2011-08-18 25 views
17

Sto provando una semplice istruzione INSERT contro un database Oracle. Uno dei valori è un campo VARCHAR2 e l'istruzione insert contiene una e commerciale. Come faccio a fare questo? Ho provato i seguenti metodi:Escape e commerciale in PL/SQL Developer

  1. sfuggire al & come \ & con uscita sul set
  2. set scansione off (questo provoca un ORA-00922 errore di opzione non valida o mancante)
  3. set definire off (ciò causa un errore di opzione ORA-00922 mancante o non valido)

Altre idee?

+3

Ho "risolto" usando la soluzione chr (38) in questa domanda: http://stackoverflow.com/questions/1137354/oracle-pl-sql-escape-character-for-a ma vorrei qualcosa più aggraziato. –

+0

Stai provando ad eseguire l'inserimento tramite una finestra SQL o una finestra di comando? –

+0

Ray, hai provato a impostare il define su un altro personaggio invece di impostarlo completamente? Non sono sicuro che sarebbe d'aiuto in quanto non utilizzo PLSQL Developer ma potrebbe ... – Ollie

risposta

21

Come ho risolto è in fuga il & con un altro &.

Ad esempio:

INSERT INTO Foo (Bar) VALUES ('Up && Away'); 

funziona bene. Grazie per tutto l'aiuto

+0

, ma fai attenzione a non sostituire "&" con "&&" con lo strumento di ricerca e sostituzione nativo di plsqld, poiché potrebbe entrare in un ciclo infinito. – roselan

+1

Non per me ... la mia soluzione è stata la risposta "... INSERISCI NEI VALORI tablex ('Sid' || '&' || 'Nancy'); ..." –

+0

non ha funzionato anche per me. – th1rdey3

8

Hai provato qualcosa del genere?

INSERT INTO tablex VALUES ('Sid ' || '&' || ' Nancy'); 

Migliorare la mia prima risposta, il problema è in relazione con PL/SQL Developer. Se si esegue il blocco in una finestra di comando sviluppatore PL/SQL, è anche possibile utilizzare lo standard SET DEFINE OFF, che funziona come in SQL * Plus.

+0

Non penso che sia più aggraziato della soluzione di 'chr (38)' che Ray menziona. – APC

+0

propably, ma è quello che ho usato quando ho affrontato un problema simile un anno fa. In http://www.orafaq.com/wiki/SQL_FAQ ci sono alcune buone soluzioni anche in SQL * Plus, come SET ESCAPE '\', SET DEFINE ~ o SET SCAN OFF – Aitor

+1

Soluzione piacevole e più piacevole di giocherellare con le impostazioni globali . Un po 'più breve:' Sid & '|| 'Nancy'. –

12

Una delle funzionalità di PL/SQL Developer che richiede tempo per familiarizzarsi è la pletora di diversi tipi di finestre.

Una di queste è la finestra COMMAND, che è fondamentalmente un emulatore SQL * Plus. Possiamo eseguire comandi SQL * Plus e SQL, quindi SET ESCAPE, SET DEFINE e in effetti SET SCAN OFF funzionano in quella finestra.

4

il concat ha funzionato perfettamente bene per me sotto è quello che ho fatto nella mia dichiarazione prescelta:

select FUND_NM 
FROM PERFORMANCE 
WHERE upper(FUND_DESC) in ('My L&' ||'L FUNDS') 
2

Io uso chr(38) dove ho bisogno di una e commerciale in PL/SQL.

addr:= 'mysite.com/order.aspx?no=5678' || CHR(38) || 'id=947'; 
--above line gives you 'mysite.com/order.aspx?no=5678&id=947'; 
12

La versione corrente di PL/SQL Developer (11.0.x) ha un pulsante per disabilitare/abilitare le variabili di sostituzione.

enter image description here

+0

Era difficile da trovare. Ho trascorso 10 minuti a navigare tra tutte le opzioni nelle impostazioni e solo dopo ho trovato questo in linea. –

0

Questo è solo un problema di SQL Editor. Per risolvere ciò basta compilare la procedura con SET DEFINE OFF; . L'esecuzione che è PL (in esecuzione nel server) non affronterà questo problema.