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


104

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

回答:


181

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

set define off

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

'StackOverflow &' || ' you'

編集:保存するときにクリックハッピーでした...これはブログから参照されました。


2
これは、glogin.sqlサイトプロファイルセットアップファイルまたはlogin.sqlユーザープロファイルセットアップファイルでも指定できます
David Aldridge

これは、置換変数に関心がない場合の最も簡単な解決策です。
Drumbeg 2015

常に命を救うソリューション:)ありがとう。
Anjana Silva

25

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


特定のシナリオは、ソースにコメントにアンパサンドが含まれているパッケージです。これに連結または置換を使用する方法がわかりません。
JoshL

JoshL、正解です。完全を期すためにこれをリストしました。特定の質問には直接回答しませんが、質問に関連しています。
リーリフェル

それは実際に私を助けました。
アルキメデストラハノ2014

13

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

set escape on

左側の&の横に\を置きます 'value_\&_intert'

Att


これでうまくいきました。コマンドを使用してcomment on column tablename.columnname is 'war ' || chr(38) || ' peace'いましたが、エラーが発生しましたORA-01780: string literal required
mrswadge 2015

6

スクリプトの実行時に検索される特殊文字を別の値に設定するには、 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>

1
私はこのアプローチを最近使用しました。PL / SQLパッケージの内容を変更する必要がないので、気に入っています。
Drumbeg 2015

3

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

私も試しました...

セット定義}

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


2

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

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


2
バックスラッシュエスケープがSQL * PlusまたはSQLDeveloperで機能しない
Jim Tough

2
@JimToughそれはでそれを活性化した後に行いますset escape on
デヴィッドBalažic

0

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

WHEN column = 'sometext'に置き換えました|| CHR(38)|| 'more text' THEN ...

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

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.