Tầm quan trọng của dấu chấm phẩy ở cuối lệnh SQL * Plus là gì?


16

Một số câu lệnh như tạo bảng, chèn vào v.v ... lấy dấu chấm phẩy ở cuối:

CREATE TABLE employees_demo
    ( employee_id    NUMBER(6)
    , first_name     VARCHAR2(20)
    , last_name      VARCHAR2(25) 
         CONSTRAINT emp_last_name_nn_demo NOT NULL
    ) ;

trong khi những người khác thích

set echo on
connect system/manager

đi qua mà không có dấu chấm phẩy là tốt.

Lý do đằng sau này là gì? Làm thế nào tôi có thể tự quyết định nơi đặt dấu chấm phẩy và nơi không?


6
+1 Để khiến mọi thứ trở nên khó hiểu hơn, bạn có thể sử dụng / trên dòng sau thay vì; trong vài trường hợp.
bernd_k

Câu trả lời:


15

Các thành viên đến trường hợp địa phương thực hiện khi trở về. Các lệnh nhiều dòng đến máy chủ thực thi trên dấu chấm phẩy

Các lệnh đặc biệt như chi tiết trong hướng dẫn SQL * Plus là những lệnh duy nhất không chấp nhận dấu chấm phẩy. Trong đó các lệnh SQL phải kết thúc bằng một ;để được phân tích cú pháp bởi máy chủ.


Dấu chấm phẩy ở cuối lệnh giống như câu lệnh GO ở cuối lệnh được thực thi trong OSQL / SQLCMD trong Sql Server. Đó là dấu hiệu lệnh sẽ được phân tích cú pháp và thực thi.
Mary

7

Khi bạn nhập câu lệnh SQL vào SQL * Plus, bạn cần biết khi nào bạn hoàn thành nó, đặc biệt là nếu lệnh kéo dài nhiều hàng. Do đó, nó đòi hỏi một ký tự đầu cuối có thể được đặt với set sqlterminator. Theo mặc định, ký tự này là dấu chấm phẩy:

SQL> select *
  2  from
  3  dual;

D
-
X

Bây giờ, thay đổi ký tự đầu cuối này thành #:

SQL> set sqlterminator #
SQL> select *
  2  from
  3  dual#

D
-
X

Câu lệnh SQL đã kết thúc (kết thúc thực hiện) với a #.

Bạn hỏi: tại sao set sqlterminator #không có dấu chấm phẩy? Trả lời, bởi vì đây không phải là một câu lệnh SQL. Các câu lệnh liên quan đến SQL * Plus và hành vi, đầu ra, kết nối asf (như set echo onconnect system/manager) của nó không phải là các câu lệnh SQL và được nhập vào mà không có dấu chấm phẩy.

Điều này có liên quan gì đến /?

Khi bạn đã nhập một câu lệnh SQL, SQL * plus đã điền vào một cái gì đó mà nó gọi là bộ đệm. Bộ đệm này có thể được hiển thị với listlệnh:

SQL> list
  1  select *
  2  from
  3* dual
SQL>

(Lưu ý: Tôi chỉ nhập danh sách , phần còn lại được trả về)

Các /giờ thực hiện những gì hiện đang trong bộ đệm. Hãy thử rằng:

SQL> /

D
-
X

Như có thể thấy, cùng một truy vấn được thực hiện.


2

Dấu chấm phẩy là điểm thứ tự cho trình phân tích cú pháp SQL, trong khi các lệnh được thực thi trong SQL * Plus được thực thi ngay lập tức. Tương tự như vậy, so sánh các dấu chấm phẩy trong chương trình C với các lệnh được nhập vào trình bao.


0

Theo cách hiểu của tôi, trình phân tích cú pháp SQL chung chia sẻ rất nhiều điểm chung với trình phân tích cú pháp javascript chung, ở chỗ nó muốn có một dấu chấm phẩy sau mỗi vị trí thích hợp, nhưng không bắt buộc ngoại trừ trong một số trường hợp nhất định. Khi tôi được dạy viết SQL, tôi được cho biết một dấu chấm phẩy là một phần của ngôn ngữ, không phải là toán tử bổ sung mà chúng ta có thể bỏ qua.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.