2012年7月23日月曜日

Oracle 置換変数 & を無効にする

今回も自分用のメモです。
業務で使っている bat ファイルの処理で、データファイルから SQL の INSERT 分を生成し ORACLE に更新をかけていました。
あるとき、更新がいつまで待っても終わらない事件発生。ログを確認すると、"~に値を入力してください: "とメッセージが表示され入力待ちで停止していた。
なぜ入力待ちに?

原因は INSERT SQL に & 文字が入っていたため。データファイル内に & があり、生成された SQL にも入り込んでいる。
この & は Oracle では置換変数。
解決方法は下記の3とおり。

  • 置換変数を無効にする
  • 置換変数の文字を他の文字に割り当てる
  • エスケープ文字を設定し、置換変数と認識させない


今回は置換変数を無効にするコマンドで対応しました。INSERT SQL 実行時に下記コマンドを先行して処理します。
SET DEFINE OFF

参考サイト
SET DEFINE - オラクル・Oracle SQL*Plus リファレンス
SET ESCAPE - オラクル・Oracle SQL*Plus リファレンス

0 件のコメント :

コメントを投稿