Apa pentingnya tanda titik koma di akhir perintah SQL * Plus?

16

Beberapa pernyataan seperti buat tabel, masukkan ke dalam dll, ambil titik koma di bagian akhir:

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

sementara yang lain suka

set echo on
connect system/manager

melewati tanpa titik koma juga.

Apa alasan di balik ini? Bagaimana saya bisa memutuskan sendiri di mana harus meletakkan titik koma dan di mana tidak?

Lazer
sumber
6
+1 Untuk membuat hal-hal lebih membingungkan, Anda dapat menggunakan / pada baris berikut alih-alih; dalam beberapa kasus.
bernd_k

Jawaban:

15

Komitmen pada instance lokal dieksekusi saat kembali. Perintah multi-line ke server dieksekusi pada titik koma

Perintah khusus seperti yang dijelaskan dalam manual SQL * Plus adalah satu-satunya yang tidak menerima semi-titik dua. Dimana Perintah SQL harus diakhiri dengan ;agar dapat diuraikan oleh server.

Brian Ballsun-Stanton
sumber
Tanda titik koma di akhir perintah sama dengan pernyataan GO di akhir perintah yang dijalankan di OSQL / SQLCMD di Sql Server. Itu tanda perintah akan diuraikan dan dieksekusi.
Marian
7

Ketika Anda memasukkan pernyataan SQL ke dalam SQL * Plus, itu perlu tahu kapan Anda selesai dengan itu, terutama jika perintahnya mencakup baris multple. Oleh karena itu, diperlukan karakter karakter terminal yang dapat diatur dengan set sqlterminator. Secara default, karakter ini adalah titik koma:

SQL> select *
  2  from
  3  dual;

D
-
X

Sekarang, ubah karakter terminal ini menjadi #:

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

D
-
X

Pernyataan SQL berakhir (berakhir dieksekusi) dengan a #.

Anda bertanya: mengapa set sqlterminator #tidak diikuti dengan tanda titik koma? Jawab, karena ini bukan pernyataan SQL. Pernyataan yang berhubungan dengan SQL * Plus dan perilakunya, output, koneksi asf (seperti set echo ondan connect system/manager) bukan pernyataan SQL dan karenanya dimasukkan tanpa tanda titik koma.

Apa hubungannya ini dengan /?

Ketika Anda memasukkan pernyataan SQL, SQL * plus mengisi sesuatu yang disebutnya buffer. Buffer ini dapat ditampilkan dengan listperintah:

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

(Catatan: Saya hanya memasukkan daftar , sisanya dikembalikan)

The /sekarang mengeksekusi apa yang saat ini dalam buffer. Mari kita coba itu:

SQL> /

D
-
X

Seperti yang dapat dilihat, permintaan yang sama dijalankan.

René Nyffenegger
sumber
2

Titik koma adalah titik urutan untuk parser SQL, sedangkan perintah yang dieksekusi dalam SQL * Plus dieksekusi segera pula. Sebagai analogi, bandingkan titik koma dalam program C dengan perintah yang dimasukkan ke dalam shell.

Gayus
sumber
0

Cara saya memahaminya adalah bahwa parser SQL umum memiliki banyak kesamaan dengan parser javascript umum, dalam hal ini akan membutuhkan titik koma setelah setiap tempat yang sesuai, tetapi tidak diperlukan kecuali dalam keadaan tertentu. Ketika saya diajari menulis SQL, saya diberi tahu bahwa titik koma adalah bagian dari bahasa itu, bukan operator tambahan yang bisa kami abaikan.

jcolebrand
sumber