2009-07-16 6 views
68

Durante il tentativo di eseguire istruzioni SQL INSERT utilizzando Oracle SQL Developer Continuo a generare un "Enter valore sostitutivo della programmazione":Oracle SQL carattere di escape (per un '&')

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

Ho provato escaping the special character in the query utilizzando il '\ 'sopra ma non riesco ancora ad evitare la e commerciale,' & ', causando una sostituzione di stringa.

Vai avanti punk, fare il mio giorno :)

risposta

101

la & è il valore predefinito per DEFINE, che consente di utilizzare variabili di sostituzione Mi piace spegnerlo usando

SET DEFINIRE OFF

allora non dovrà preoccuparsi di fuga o CHR (38).

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

Grazie a Jeffrey Kemp per aver fornito una soluzione con || chr (38) || –

+0

Questa è una soluzione generale molto migliore che è indipendente dai privilegi dell'utente (vale a dire quando gli utenti non sono autorizzati a impostare DEFINE OFF) e per quando gli utenti desiderano specificare sia e commerciale in testo e variabili definite nello stesso comando SQL. – fuzzyanalysis

28

Impostare il carattere definire a qualcosa di diverso &

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

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

+26

o SET DEFINE OFF – dpbradley

49

|| chr(38) ||

Questa soluzione è perfetta.

+2

Questo ha il compito, ma è un po 'goffo quando si tratta di stringhe preesistenti. – aglassman

+0

Lontano da perfetto – EoinS

3

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

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

La vera risposta è è necessario impostare il carattere di escape a '\': SET FUGA SULLA

Il problema potrebbe essersi verificato o perché escaping è stato disattivato, o la fuga il carattere era impostato su qualcosa di diverso da "\". L'affermazione sopra consentirà di evadere e impostandolo su "\".


Nessuna delle altre risposte precedentemente pubblicate in realtà risponde alla domanda originale. Tutti risolvono il problema ma non lo risolvono.

+4

Ho letto su Chiedi a Tom (https://asktom.oracle.com/pls/asktom/f?p=100:11:0:::::1111_QUESTION_ID:1629001802771) che "SET ESCAPE è un sqplus" ismo". Quindi questa sarebbe la vera risposta solo se la domanda riguardasse SQL * Plus. –