SQL Plus から実行される SQL スクリプトでアンパサンドを無視するにはどうすればよいですか?
質問
アンパサンド (&) を含むコメントを持つパッケージを作成する SQL スクリプトがあります。SQL Plus からスクリプトを実行すると、& で始まる文字列の代替値を入力するように求められます。SQL Plus がアンパサンドを無視するようにこの機能を無効にするにはどうすればよいですか?
解決
これはあなたにとってうまくいくかもしれません:
set define off
それ以外の場合は、アンパサンドを文字列の末尾に置く必要があります。
'StackOverflow &' || ' you'
編集:保存するときにクリックして嬉しかったです...これはから参照されました ブログ.
他のヒント
置換変数を時々使用する場合は、define をオフにしたくないかもしれません。このような場合、次のようにアンパサンドを同等の数値から変換できます。 || Chr(38) ||
または、次のように単一の文字として追加します。 || '&' ||
.
以下のコードで解決しました。
set escape on
そして左側の&の横に\を入れてください 'value_\&_intert'
アト
スクリプトの実行時に検索される特殊文字を別の値に設定するには、 SET DEFINE <1_CHARACTER>
デフォルトでは、DEFINE 機能自体はオンになっており、次のように設定されています。 &
すでに述べたように、これをオフにすることもできますが、別の値に設定することで回避することもできます。どのような記号に設定したかに十分注意してください。以下の例では # 文字を選択していますが、この選択は単なる例です。
SQL> select '&var_ampersand #var_hash' from dual;
Enter value for var_ampersand: a value
'AVALUE#VAR_HASH'
-----------------
a value #var_hash
SQL> set define #
SQL> r
1* select '&var_ampersand #var_hash' from dual
Enter value for var_hash: another value
'&VAR_AMPERSANDANOTHERVALUE'
----------------------------
&var_ampersand another value
SQL>
set define off <- これが私が見つけた最良の解決策です
私も試してみました...
セット定義 }
Ampersand Characters '&'を含むいくつかのレコードを挿入することができましたが、「}」文字をテキストに使用することはできなかったので、「Set define Off」を使用することにしました。
によると この素晴らしい FAQ 解決策はいくつかあります。
バックスラッシュ文字を使用してアンパサンドをエスケープすることもできる場合があります \
コメントを変更できる場合。
WHEN 列 = 'sometext & more text' THEN ... の CASE ステートメントがありました。
column = 'sometext'の場合に置き換えました|| CHR(38)|| 「もっとテキスト」
「sometext _ more text」などの列の場合も使用できます。
(_ は単一文字のワイルドカードです)