Oracle SQLエスケープ文字(「&」の場合)


86

使用してSQL INSERT文を実行しようとしているときのOracle SQL Developerをを、「置換値の入力」プロンプトが生成され続けます。

insert into agregadores_agregadores 
(
 idagregador,
 nombre,
 url
) 
values 
(
 2,
 'Netvibes',
 'http://www.netvibes.com/subscribe.php?type=rss\&url='
);

上記の「\」を使用してクエリ内の特殊文字をエスケープしようとしましたが、それでもアンパサンド「&」を回避できず、文字列が置換されます。

回答:


125

&はDEFINEのデフォルト値であり、置換変数を使用できます。を使用してオフにするのが好きです

定義をオフに設定

そうすれば、エスケープやCHR(38)について心配する必要はありません。


60

|| chr(38) ||

このソリューションは完璧です。


2
これで作業は完了しますが、既存の文字列を処理する場合は少し不格好です。
aglassman 2013

私にとって、SET DEFINEOFFは機能しませんでした。あなたの解決策はうまくいきました。ありがとう...
アショク・クマール

31

定義文字を&以外に設定します

SET DEFINE〜
テーブルblah(x varchar(20));を作成します。
blah(x)値に挿入します( 'blah&amp');
何とかから*を選択します。

バツ                    
-------------------- 
何とか&amp 


27
または
SETDEFINE

15
insert into AGREGADORES_AGREGADORES (IDAGREGADOR,NOMBRE,URL)
values (2,'Netvibes',
'http://www.netvibes.com/subscribe.php?type=rss' || chr(38) || 'amp;url=');

ソリューションを提供してくれたJeffreyKempに感謝します|| chr(38)||

これは、ユーザーの特権に依存しない(つまり、ユーザーがDEFINE OFFを設定できない場合)、およびユーザーが同じSQLコマンドでテキストのアンペアサンドと定義済み変数の両方を指定する場合の、はるかに優れた一般的なソリューションです。
ファジー分析


4

select 'one'||'&'||'two' from dual


アンパサンドは文字列の最後にあるだけでよく、連結の半分を節約できます。select 'one&' || 'two' from dual
デュレット

1

本当の答えは、エスケープ文字を「\」に設定する必要があるということです:SET ESCAPE ON

この問題は、エスケープが無効になっているか、エスケープ文字が「\」以外に設定されているために発生した可能性があります。上記の文は脱出できるようになりますし、「\」に設定します。


以前に投稿された他の回答は、実際には元の質問に回答していません。それらはすべて問題を回避しますが、それを解決しません。


4
Ask Tom(asktom.oracle.com/pls/asktom/…)で、「SETESCAPEはsqplus'ismです」と読みました。したがって、これは、質問がSQL * Plusに関するものである場合にのみ本当の答えになります。
Karl Kieninger 2014年

-1

リクエストの前にこれを追加してください

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