茶の間で読めるITチップス

情報セキュリティ、ITの便利用途など直ぐに役立つ知見を発信してきます!

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: 識別子 を宣言してください。」のエラーが出た時は疑ってみるといいかも^^