Caractere de escape Oracle SQL (para um '&')

86

Ao tentar executar instruções de inserção de SQL usando o Oracle SQL Developer , continuo gerando um prompt "Insira o valor de substituição":

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

Tentei escapar o caractere especial na consulta usando o '\' acima, mas ainda não consigo evitar o e comercial, '&', causando uma substituição de string.

ian_scho
fonte

Respostas:

125

o & é o valor padrão para DEFINE, que permite usar variáveis ​​de substituição. Eu gosto de desligar usando

DEFINIR DESLIGADO

então você não terá que se preocupar em escapar ou CHR (38).

Neil Kodner
fonte
60

|| chr(38) ||

Esta solução é perfeita.

Aseem
fonte
2
Isso faz o trabalho funcionar, mas é um pouco desajeitado ao lidar com strings pré-existentes.
aglassman
Para mim, SET DEFINE OFF não funcionou. Sua solução funcionou. Obrigado ...
Ashok kumar
31

Defina o caractere de definição para algo diferente de &

DEFINIR DEFINIR ~
criar mesa blá (x varchar (20));
inserir em valores blah (x) ('blah & amp');
selecione * de blá;

X                    
-------------------- 
blá e amp 

RC.
fonte
27
ou SET DEFINE OFF
dpbradley
15
insert into AGREGADORES_AGREGADORES (IDAGREGADOR,NOMBRE,URL)
values (2,'Netvibes',
'http://www.netvibes.com/subscribe.php?type=rss' || chr(38) || 'amp;url=');
Jeffrey Kemp
fonte
Agradecimentos a Jeffrey Kemp por fornecer a solução com || chr (38) ||
Esta é uma solução geral muito melhor que é independente dos privilégios do usuário (ou seja, quando os usuários não têm permissão para SET DEFINE OFF) e para quando os usuários desejam especificar e comercial no texto e variáveis ​​definidas no mesmo comando SQL.
Análise Fuzzy
12
SELECT 'Free &' || ' Clear' FROM DUAL;
drj
fonte
4

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

Izo
fonte
O e comercial precisa estar apenas no final da string, economizando metade da concatenação. select 'one&' || 'two' from dual
durette
1

A verdadeira resposta é que você precisa definir o caractere de escape para '\': SET ESCAPE ON

O problema pode ter ocorrido porque o escape foi desabilitado ou o caractere de escape foi definido como algo diferente de '\'. A instrução acima permitirá o escape e configurá-lo para '\'.


Nenhuma das outras respostas postadas anteriormente realmente respondem à pergunta original. Todos eles contornam o problema, mas não o resolvem.

Girino terrível
fonte
4
Eu li em Ask Tom ( asktom.oracle.com/pls/asktom/… ) que "SET ESCAPE é um sqplus'ism". Portanto, essa só seria a resposta real se a pergunta fosse sobre o SQL * Plus.
Karl Kieninger,
-1

adicione isto antes do seu pedido

set define off;
Helali
fonte