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.

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).


60

|| chr(38) ||

Esta solução é perfeita.


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 


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=');

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;

4

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


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.


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;
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.