sqlplusとPL/SQLでつまずいたこと
PL/SQLでハマったこと
今週は初めてPL/SQLをやりましたが、いろいろハマりました^^;(エラーメッセージが何を言ってるのかさっぱりわからないです・・)
今回はハマったことを軽くまとめようと思います^^
1,「記号””が見つかりました」や「記号”end of file”が見つかりました」などのエラーメッセージ
コロンを忘れているとこんなメッセージが出たりします(・・;)
これでそれなりに時間使いました・・・
2,exitでは処理の終了ができない
sqlplusと同じようにexitで終了できると思いきや、exitはループを抜けるだけみたいです^^;
なので、シェルスクリプトから呼び出していて、sqlplus終了時のステータスを返したい場合は、
variable status_cd number;
begin
(処理)
:status_cd := 1;
end;
/
exit :status_cd;
PL/SQLの外で宣言した変数に格納して返します。
3,end;の下のスラッシュ
ネット上のPL/SQLのコードを見るとend;の下にスラッシュがあったり無かったりします(*_*)
スラッシュが何かはよくわからなかったのですが、スラッシュが無いと実行されなかったです・・・
なので、私はとりあえずスラッシュをつけときました(笑)
4,例外処理
無名ブロックの構文を調べると
DECLARE (変数宣言) BEGIN (メイン処理) EXCEPTION (例外処理) END; /
と出ますが、
DECLARE
(変数宣言)
BEGIN
(メイン処理)
EXCEPTION
WHEN OTHERS THEN
(例外処理)
END;
/
when others thenが無いとコケます(・・;)
5,EOFの位置
シェルスクリプトでsqlplusを使うとき
sqlplus -s user/pass << EOF
(処理)
EOF
のように書きますが、シェルスクリプト内だとインデントなどで
if (条件) then
sqlplus -s user/pass << EOF
(処理)
EOF
fi
のようなことがあると思いますが、これをやると動かないです(・.・;)
if (条件) then
sqlplus -s user/pass << EOF
(処理)
EOF
fi
最後のEOFは、インデントをつけずに先頭に書きます。(なぜかはわからないですが・・・)
6、不明なコマンドです。行の残りは無視されました。のエラー
.sqlのファイルを流したら上記のエラーが出ました^^;
特に間違った箇所は無かったのですが、なぜが一行目がエラーになる??
ファイルの文字コードを調べたら、BOM付きUTF-8だったので、BOMを削除したら
動きました^0^
7、begin~end;外の変数の参照方法
variable status_cd number;
begin
(処理)
:status_cd := 1;
if (:status_cd = 1 ) then
(処理)
end;
/
exit :status_cd;
variableで宣言したbegin~end;外の変数を参照する時は変数前にコロンをつける。
「PLS-00201: 識別子 を宣言してください。」のエラーが出た時は疑ってみるといいかも^^