web-dev-qa-db-ja.com

SQL Plusから実行されているSQLスクリプトでアンパサンドを無視するにはどうすればよいですか?

アンパサンド(&)を含むコメント付きのパッケージを作成するSQLスクリプトがあります。 SQL Plusからスクリプトを実行すると、&で始まる文字列の代替値を入力するよう求められます。 SQL Plusがアンパサンドを無視するように、この機能を無効にするにはどうすればよいですか?

98
JoshL

これはあなたのために働くかもしれません:

set define off

それ以外の場合、アンパサンドは文字列の最後にある必要があります。

'StackOverflow &' || ' you'

編集:保存するときにクリックして幸せだった...これは ブログ から参照されていました。

169
Austin Salonen

置換変数を時々使用する場合、定義をオフにしたくない場合があります。これらの場合、アンパサンドを|| Chr(38) ||のように同等の数値から変換するか、|| '&' ||のように単一の文字として追加できます。

23
Leigh Riffel

私は以下のコードで解決しました:

set escape on

そして'value_\&_intert'の左側に&を置きます

Att

11
Cauca

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>
6
tvCa

set define off <-これは私が見つけた最良の解決策です

私も試しました...

セット定義}

アンパサンド文字「&」を含む複数のレコードを挿入できましたが、テキストに「}」文字を使用できないため、「set define off」を使用することにしました。すべてが正常に機能します。

3
ora

このNice FAQ によると、いくつかの解決策があります。

コメントを変更できる場合は、バックスラッシュ文字\でアンパサンドをエスケープすることもできます。

2
user19387

WHEN column = 'sometext&more text' THEN ...のCASEステートメントがありました。

WHEN column = 'sometext'に置き換えました|| CHR(38)|| 「もっとテキスト」そして...

また、WHEN列LIKE 'sometext _ more text' THEN ...を使用することもできます。

(_は1文字のワイルドカードです)

0
AWOLKiwi