Come ignoro la e commerciale in uno script SQL in esecuzione da SQL Plus?


104

Ho uno script SQL che crea un pacchetto con un commento contenente una e commerciale (&). Quando eseguo lo script da SQL Plus, mi viene chiesto di inserire un valore sostitutivo per la stringa che inizia con &. Come disabilito questa funzionalità in modo che SQL Plus ignori la e commerciale?

Risposte:


181

Questo potrebbe funzionare per te:

set define off

Altrimenti la e commerciale deve essere alla fine di una stringa,

'StackOverflow &' || ' you'

EDIT: ero felice di fare clic durante il salvataggio ... Questo è stato fatto riferimento da un blog .


2
Puoi anche specificarlo nel file di configurazione del profilo del sito glogin.sql o nel file di configurazione del profilo utente login.sql
David Aldridge,

Questa è la soluzione più semplice se non sei interessato alle variabili di sostituzione.
Drumbeg

Sempre una soluzione salvavita :) Grazie.
Anjana Silva

25

Se a volte utilizzi variabili di sostituzione, potresti non voler disattivare la definizione. In questi casi è possibile convertire la e commerciale dal suo equivalente numerico come in || Chr(38) ||o aggiungerla come un singolo carattere come in || '&' ||.


Lo scenario specifico è un pacchetto la cui origine include una e commerciale in un commento. Non vedo come userei la concatenazione o la sostituzione per questo.
JoshL

JoshL, hai ragione, l'ho appena elencato per completezza. È correlato alla tua domanda anche se non risponde direttamente alla tua domanda specifica.
Leigh Riffel

In realtà mi ha aiutato.
Archimedes Trajano

13

Ho risolto con il codice seguente:

set escape on

e metti una \ accanto a & a sinistra 'value_\&_intert'

Att


Questo ha funzionato per me. Stavo usando il comando comment on column tablename.columnname is 'war ' || chr(38) || ' peace'ma mi dava l'errore ORA-01780: string literal required.
mrswadge

6

È possibile impostare il carattere speciale, che viene cercato durante l'esecuzione di uno script, su un altro valore utilizzando il SET DEFINE <1_CHARACTER>

Per impostazione predefinita, la funzione DEFINE stessa è attiva ed è impostata su &

Può essere disattivato - come già accennato - ma può essere evitato anche impostandolo su un valore diverso. Sii molto consapevole del segno su cui lo hai impostato. Nell'esempio seguente, ho scelto il carattere #, ma quella scelta è solo un esempio.

SQL> select '&var_ampersand #var_hash' from dual;
Enter value for var_ampersand: a value

'AVALUE#VAR_HASH'
-----------------
a value #var_hash

SQL> set define #
SQL> r
  1* select '&var_ampersand #var_hash' from dual
Enter value for var_hash: another value

'&VAR_AMPERSANDANOTHERVALUE'
----------------------------
&var_ampersand another value

SQL>

1
Recentemente ho utilizzato questo approccio. Mi piace perché non richiede di modificare il contenuto dei miei pacchetti PL / SQL.
Drumbeg

3

set define off <- Questa è la migliore soluzione che ho trovato

Ho anche provato ...

set define}

Sono stato in grado di inserire diversi record contenenti i caratteri e commerciale "&" ma non posso utilizzare il carattere "}" nel testo Così ho deciso di utilizzare "set define off" e tutto funziona come dovrebbe.


2

Secondo questa simpatica FAQ ci sono un paio di soluzioni.

Potresti anche essere in grado di eseguire l'escape della e commerciale con il carattere barra rovesciata \se puoi modificare il commento.


2
L'escape della barra rovesciata non funziona in SQL * Plus o SQLDeveloper
Jim Tough

2
@JimTough Lo fa dopo averlo attivato conset escape on
David Balažic

0

Avevo una dichiarazione CASE con colonna WHEN = 'sometext & more text' THEN ....

L'ho sostituito con WHEN column = 'sometext' || CHR (38) || 'altro testo' ALLORA ...

potresti anche usare la colonna WHEN LIKE 'sometext _ more text' THEN ...

(_ è il carattere jolly per un singolo carattere)

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.