1. ホーム
  2. sql

[解決済み】Oracle SQLで、セミコロンとスラッシュの使い分けはいつ必要ですか?

2022-04-11 20:41:15

質問

今週、私の会社では、SQLスクリプトをどのように書くべきかについて、議論がありました。

背景 当社のデータベースはOracle 10g(近日中に11にアップグレード)です。 私たちのDBAチームは、スクリプトを本番環境にデプロイするためにSQLPlusを使用しています。

さて、最近デプロイに失敗したのは、セミコロンとフォワードスラッシュの両方を使っていたため ( / ). セミコロンは各ステートメントの終わりに、スラッシュはステートメントとステートメントの間にありました。

alter table foo.bar drop constraint bar1;
/
alter table foo.can drop constraint can1;
/

スクリプトの後半では、いくつかのトリガーが追加され、いくつかのビューが作成され、いくつかのストアドプロシージャが作成されています。 このため ;/ は、各ステートメントが2回実行され、エラーが発生しました(特に、一意である必要がある挿入の場合)。

SQL Developerではこのようなことは起こりませんし、TOADでは起こりません。 あるコマンドを実行する場合、そのコマンドは / を追加しました。

PL/SQLではサブプログラム(DECLARE, BEGIN, END)がある場合、使用したセミコロンはサブプログラムの一部とみなされるので、スラッシュを使用する必要があるのです。

そこで質問なのですが。 データベースがOracleの場合、SQLスクリプトはどのように書くのが適切でしょうか? データベースがOracleであることは分かっているのだから、常に / ?

解決方法は?

好みの問題ですが、私は一貫してスラッシュを使用しているスクリプトを見るのが好きです。そうすれば、すべての作業単位(PL/SQLオブジェクトの作成、PL/SQL匿名ブロックの実行、DML文の実行)をより簡単に目で見て確認することができるからです。

また、最終的にAntのようなものにデプロイメントを移行する場合、一貫したステートメントデリミターを持つことで、ターゲットの定義を簡素化することができます。