Carattere di escape Oracle SQL (per un "&")


86

Durante il tentativo di eseguire istruzioni di inserimento SQL utilizzando Oracle SQL Developer, continuo a generare un prompt "Immettere valore di sostituzione":

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

Ho provato a eseguire l'escape del carattere speciale nella query utilizzando "\" sopra, ma non riesco ancora a evitare la e commerciale, "&", che causa una sostituzione di stringa.

Risposte:


125

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

SET DEFINE OFF

allora non dovrai preoccuparti di scappare o CHR (38).


60

|| chr(38) ||

Questa soluzione è perfetta.


2
Questo porta a termine il lavoro, ma è un po 'goffo quando si tratta di stringhe preesistenti.
Aglassman

Per me SET DEFINE OFF non ha funzionato. La tua soluzione ha funzionato. Grazie ...
Ashok kumar

31

Imposta il carattere di definizione su qualcosa di diverso da &

SET DEFINE ~
creare una tabella blah (x varchar (20));
inserire nei valori blah (x) ('blah & amp');
seleziona * da blah;

X                    
-------------------- 
blah e amp 


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

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

Questa è una soluzione generale molto migliore che è indipendente dai privilegi dell'utente (cioè quando gli utenti non sono autorizzati a SET DEFINE OFF) e per quando gli utenti vogliono specificare sia la e commerciale nel testo che le variabili definite nello stesso comando SQL.
Analisi fuzzy

12
SELECT 'Free &' || ' Clear' FROM DUAL;

4

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


La e commerciale deve essere solo alla fine della stringa, risparmiando metà della concatenazione. select 'one&' || 'two' from dual
durette

1

La vera risposta è che devi impostare il carattere di escape su "\": SET ESCAPE ON

Il problema potrebbe essersi verificato perché l'escaping era disabilitato o il carattere di escape era impostato su un valore diverso da "\". L'istruzione sopra consentirà l'escape e la imposterà su "\".


Nessuna delle altre risposte precedentemente pubblicate risponde effettivamente alla domanda originale. Tutti aggirano il problema ma non lo risolvono.


4
Ho letto su Ask Tom ( asktom.oracle.com/pls/asktom/… ) che "SET ESCAPE è uno sqplus'ism". Quindi questa sarebbe la vera risposta solo se la domanda riguardasse SQL * Plus.
Karl Kieninger

-1

aggiungilo prima della tua richiesta

set define off;
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.