SQL * Plusコマンドの最後のセミコロンの意味は何ですか?


16

create table、insert intoなどの一部のステートメントは、最後にセミコロンを使用します。

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

他の人が好きな間

set echo on
connect system/manager

同様にセミコロンなしで通過します。

この背後にある理由は何ですか?セミコロンを配置する場所と配置しない場所を自分で決定するにはどうすればよいですか?


6
+1物事をより混乱させるために、;の代わりに次の行で/を使用できます。ある場合には。
-bernd_k

回答:


15

ローカルインスタンスへのコマンドは、戻り時に実行されます。サーバーへの複数行コマンドはセミコロンで実行されます

セミコロンを受け入れないのは、SQL * Plusマニュアルで詳細に説明されている特別なコマンドのみです。Wheras SQLコマンド;、サーバーで解析されるためにa で終わる必要があります。


コマンドの末尾のセミコロンは、SQL ServerのOSQL / SQLCMDで実行されるコマンドの末尾のGOステートメントと同じです。これは、コマンドが解析および実行されるサインです。
マリアン

7

SQL * PlusにSQLステートメントを入力するときは、特にコマンドが複数の行にまたがる場合、それがいつ完了したかを知る必要があります。したがって、で設定できる終端文字が必要set sqlterminatorです。デフォルトでは、この文字はセミコロンです。

SQL> select *
  2  from
  3  dual;

D
-
X

次に、この端末文字を次のように変更します#

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

D
-
X

SQLステートメントはで終了しました(実行の終了)#

あなたは尋ねる:なぜset sqlterminator #セミコロンが続かなかったのか?これはSQLステートメントではないためです。SQL * Plusおよびその動作、出力、接続asf(set echo onandなどconnect system/manager)に関連する文はSQL文ではないため、セミコロンなしで入力されます。

これは何と関係があり/ますか?

SQLステートメントを入力すると、SQL * plusがバッファと呼ぶものを埋めました。このバッファーは、list次のコマンドで表示できます。

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

(注:リストを入力しただけで、残りは返されます)

/今のバッファに現在あるものを実行します。それを試してみましょう:

SQL> /

D
-
X

ご覧のように、同じクエリが実行されます。


2

セミコロンはSQLパーサーのシーケンスポイントですが、SQL * Plus内で実行されるコマンドはとにかくすぐに実行されます。類推として、Cプログラムのセミコロンをシェルに入力されたコマンドと比較します。


0

私が理解する方法は、一般的なSQLパーサーは一般的なjavascriptパーサーと多くの共通点があることです。適切な場所ごとにセミコロンが必要ですが、特定の状況を除いて必須ではありません。SQLの記述を教えられたとき、セミコロンは言語の一部であり、無視できる余分な演算子ではないと言われました。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.