SQL * Developerで面白い動作が発生しました。私は試験の準備をしているので、セミコロンの要件に関するいくつかの不一致を理解したいと思います。なぜOracle SQLコマンドの後にセミコロンを使用する必要はありませんか?
ご存知のように、ドキュメントのOracle DBは、セミコロンの使用法と終了文について非常に厳しいようです。しかしコマンドの中にはセミコロンをまったく必要としないものもあります。 それはなぜですか?
DML: - セミコロンを持っている必要があります:
SELECT .... FROM ...; -- has to have a semicolon
CREATE TABLE x (...); -- has to have a semicolon
TCL: - セミコロンを必要としない:
SAVEPOINT
ROLLBACK
SQL * Plusを:
DESC TABLE tab1 -- does not require semicolons.
をなぜそれは一貫していません(少なくともSQL * Developerでは)、ここでのルールは何ですか?
SQL文は常に ';'を必要とします( 'savepoint'と' rollback'も同様です)。これもSQL標準で定義されています。 'DESC'はSQL文ではなく、SQLクライアントによって提供されるユーティリティ文です。複数の行に渡すことができないため、終了文字を持つ必要はありません。 –
@a_horse_with_no_name - 私はそれが当てはまるとは思わない。私が知る限り、SQL標準によれば、SQL文にはターミネータはありません。また、SQL開発者は、セミコロンなしで完全なSQL文を選択して実行することができます。セミコロンは、SQL * PlusやSQL Developerなどのインタフェース・ユーティリティによって使用され、SQL文が終了する場所を決定します。SQL文は、スクリプト内にあっても一度に1つだけサーバに送信できるためです。実際、カタログに保存されているSQL文のテキストをチェックすると、最後にセミコロンはありません。 – mathguy
"SQL入力ウィンドウに複数のSQLステートメントがある場合を除き、"セミコロンが必要です。 "は真です。それを試してみてください:入力ウィンドウをクリアし、 'select * from dual'(セミコロンなし)と入力して、CTRL + ENTERを押して実行してください。ステートメントがセミコロンなしで実行されていることがわかります。 1つ以上のSQL文を入力します。たとえば、 'select count(*)from dual'を入力します。ウィンドウ内のすべてを選択してCtrl + Enterキーを押すと、エラーが発生します。しかし、2つのステートメントのうち1つだけを選択して実行すると、問題なく動作します。 – mathguy