2009-07-16 11 views
68

Oracle SQL Developerを使用してSQL INSERT文を実行しようとしているとき、私は、プロンプト「置換値入力」を生成保つ:(「&」のための)は、Oracle SQLのエスケープ文字

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

を私は「\を使用してescaping the special character in the queryを試してみました'上記の文字列の置換を引き起こすアンパサンド' & 'を避けることはできません。

先に行くパンク、&

 
SET DEFINE ~ 
create table blah (x varchar(20)); 
insert into blah (x) values ('blah&amp'); 
select * from blah; 

X      
-------------------- 
blah&amp 

答えて

101

以外に文字を定義する設定してください私の一日作る:)

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

解決策を提供してくれたJeffrey Kempに感謝します。 chr(38)|| –

+0

これは、ユーザー優先権とは独立した(ユーザーがDEFINE OFFを許可されていない場合)、同じSQLコマンドでアンパサンドとテキストの両方を指定する必要がある場合に便利です。 – fuzzyanalysis

28

&は、あなたが使用することを可能にする、DEFINEのデフォルト値です代入変数。私は

、あなたはエスケープまたはCHR(38)を心配する必要はありませんがOFF DEFINE

SETを使用して、それをオフにしたいです。

+26

またはSET DEFINE OFF – dpbradley

49

|| chr(38) ||

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

+2

これでジョブは完了しますが、既存の文字列を処理する場合は少しぎこちなくなります。 – aglassman

+0

完璧なものから – EoinS

3

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

8
SELECT 'Free &' || ' Clear' FROM DUAL; 
1

本当の答えは、あなたが '\' にエスケープ文字を設定する必要がある:

ON SET ESCAPEエスケープが無効になっていたため、問題がいずれかの発生している可能性、またはエスケープ文字は '\'以外に設定されていました。上記のステートメントは、をエスケープして '\'に設定します。


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

+4

私はAsk Tom(https://asktom.oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID:1629001802771)に「SET ESCAPEはsqplusです。 ism "です。 SQL * Plusに関する質問があれば、これは本当の答えに過ぎません。 –

関連する問題