ここから本文です

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

har********さん

2010/11/1201:23:54

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 ~
/
と連ねて実行すればで複数の命令を実行できるということですよね?

閲覧数:
37,989
回答数:
1
お礼:
50枚

違反報告

ベストアンサーに選ばれた回答

tum********さん

編集あり2010/11/1210:02:25

なんか、色々と間違えているので、とりあえず、全部指摘しておきます。

まず、;と等価なのは、/だけの行で、文の途中に/を入れても意味がありません。

たとえば
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...

さらに、Delete Tableという構文はOracleにはありません。
どうやってもエラーになるでしょう。
Tableを消したいならDrop Tableです。

補足を受けて:
複数の命令を実行できるというか、SQLを2回実行することになります。
というのも、上記構文では、同一トランザクションの処理にならないのです。
2つ目のSQLを実行したときにエラーが発生しても、1つ目のSQLは実行されてしまいます。

質問した人からのコメント

2010/11/15 09:48:25

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

あわせて知りたい

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。

不適切な投稿でないことを報告しました。

閉じる