SQL * Plus komutlarının sonunda noktalı virgülün önemi nedir?


16

Tablo oluşturma, ekleme vb. Gibi bazı ifadeler sonunda noktalı virgül alır:

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

diğerleri severken

set echo on
connect system/manager

noktalı virgül olmadan da geçin.

Bunun arkasındaki sebep nedir? Noktalı virgülün nereye koyulacağına ve nereye koyulmayacağına kendime nasıl karar verebilirim?


6
+1 İşleri daha karmaşık hale getirmek için / yerine aşağıdaki satırda kullanabilirsiniz; bazı durumlarda.
bernd_k

Yanıtlar:


15

Yerel yönetim ortamına komutanlar dönüşte idam edilir. Sunucuya çok satırlı komutlar noktalı virgülle yürütülür

SQL * Plus kılavuzunda ayrıntılı olarak açıklanan özel komutlar, noktalı virgülleri kabul etmeyen tek komutlardır . Wheras SQL Komutları; sunucu tarafından ayrıştırılabilmesi için bir ile bitmelidir .


Bir komutun sonundaki noktalı virgül, Sql Server'da OSQL / SQLCMD'de yürütülen bir komutun sonundaki GO ifadesiyle aynıdır. Komutun ayrıştırılıp yürütüleceğinin işaretidir.
Marian

7

SQL * Plus'a bir SQL ifadesi girerken, özellikle komut çok satırlı satırlara yayılmışsa, bunu ne zaman bitirdiğinizi bilmeniz gerekir. Bu nedenle, ile ayarlanabilen bir terminal karakter karakteri gerektirir set sqlterminator. Varsayılan olarak, bu karakter noktalı virgüldür:

SQL> select *
  2  from
  3  dual;

D
-
X

Şimdi, bu terminal karakterini şu şekilde değiştirin #:

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

D
-
X

SQL deyimi bir ile sonlandırıldı (son yürütüldü) #.

Siz soruyorsunuz: Neden set sqlterminator #noktalı virgül gelmedi? Yanıt, çünkü bu bir SQL ifadesi değil. SQL * Plus ve davranışı, çıkışı, bağlantısı asf ( set echo onve gibi connect system/manager) ile ilgili ifadeler SQL ifadeleri değildir ve bundan sonra noktalı virgül olmadan girilir.

Bununla ne ilgisi var /?

Bir SQL ifadesi girdiğinizde, SQL * plus arabellek dediği şeyi doldurdu. Bu arabellek şu listkomutla gösterilebilir :

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

(Not: Sadece listeye girdim , geri kalanı iade edildi)

/Şimdi tampon şu anda ne yürütür. Şunu deneyelim:

SQL> /

D
-
X

Görüldüğü gibi, aynı sorgu yürütülür.


2

Noktalı virgül, SQL ayrıştırıcısı için sıra noktasıdır , oysa SQL * Plus içinde yürütülen komutlar hemen uygulanır. Bir benzetme olarak, bir C programındaki noktalı virgülleri kabuğa girilen komutlarla karşılaştırın.


0

Anladığım kadarıyla, genel SQL ayrıştırıcısının genel javascript ayrıştırıcısı ile çok ortak paylaştığı, her uygun yerden sonra noktalı virgül istediği, ancak belirli durumlar dışında gerekli olmadığıdır. SQL yazmam öğretildiğinde, noktalı virgülün dilin bir parçası olduğu söylendi, görmezden gelebileceğimiz ekstra bir operatör değil.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.