OracleでSQLを書く際のスラッシュ(/)とセミコロン(;)使用法について教えてください。

OracleでSQLを書く際のスラッシュ(/)とセミコロン(;)使用法について教えてください。 「複数処理がある場合はセミコロンでつなぎ、最後にスラッシュで閉じる」や 「最後に実行されたSQLがバッファにあり、それを実行するのがスラッシュ」など、説明は多数のサイトで見たのですが、どうしても意味を理解できないのです。 例えばobject browserで Insert Into TblA ~ ; Delete Table TblB;/ とすると構文エラーになりますよね。 では、以下の使い方はあっているのでしょうか。 Create Table TblA ~ / Create Table TblB ~ / や Insert Into TblA ~ / Delete Table TblB / Create文は試しましたがエラーは出なかったと思います。 勘違いをしているようでしたらどうかご指摘ください。 お願いいたします。

補足

ありがとうございます。 わかりました!(わかったと思います) 最後に確認させて下さい。 Create Table TblA ~ / Insert Into TblA ~ / と連ねて実行すればで複数の命令を実行できるということですよね?

Oracle40,707閲覧xmlns="http://www.w3.org/2000/svg">50

ベストアンサー

0

なんか、色々と間違えているので、とりあえず、全部指摘しておきます。 まず、;と等価なのは、/だけの行で、文の途中に/を入れても意味がありません。 たとえば Create Table TblA ~ / を実行したいなら Create Table TblA ~ / と、/だけの行を作る必要があります。 Create Table TblA ~ / も、 Create Table TblA ~ ;/ も、 Create Table TblA ~ ;/ も駄目です。 ちなみに、本来、/だけの行は、PL/SQLブロックなど、文中に;が入ってしまう場合に、DDL文の終了を表すために;の代わりに使うものです。 また、この仕様はOracleの仕様というわけではなく、単にSQL*Plus上の仕様で、↓に「SQL*Plusでは、SQL*Plusコマンドまたはコマンドを実行するために入力したセミコロンやスラッシュは、SQLバッファに格納されません。」とあるとおり、エディタ上では使用されていますが、実際にOracleにSQLを投げるときは除去されています。 http://otndnld.oracle.co.jp/document/products/oracle11g/111/doc_dvd/server.111/E05784-01/ch4.htm さらに、Delete Tableという構文はOracleにはありません。 どうやってもエラーになるでしょう。 Tableを消したいならDrop Tableです。 補足を受けて: 複数の命令を実行できるというか、SQLを2回実行することになります。 というのも、上記構文では、同一トランザクションの処理にならないのです。 2つ目のSQLを実行したときにエラーが発生しても、1つ目のSQLは実行されてしまいます。

ThanksImg質問者からのお礼コメント

トランザクションを意識しなければ命令をまとめて流すことはできるのですね。 ありがとうございました。

お礼日時:2010/11/15 9:48