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.