2015-12-17 9 views
34

sto guardando uno script in Oracle e vedo qualcosa che non riconoscoquando e perché utilizzare un "SET DEFINIRE OFF" in Oracle Database

REM INSERTING into database1."Users" 
SET DEFINE OFF; 
Insert into database1."Users" ("id","right") values ('1','R'); 

sto cercando documentazione su "set define off "e sta letteralmente scrivendo" disabilita l'analisi dei comandi per sostituire la variabile di sostituzione con i loro valori "

Non capisco davvero cosa vogliono dire.

Qualcuno può aiutarmi?

+1

disattiva le variabili di sostituzione. quindi non ti viene chiesto di inserire un valore quando vede la tua variabile di sostituzione. Credo che il valore predefinito sia &. –

+0

Questa è un'impostazione per _client_ SQL, non il database stesso. E così è documentato nel manuale SQL * Plus: http://docs.oracle.com/cd/E11882_01/server.112/e16604/ch_twelve040.htm#SQPUG073 –

risposta

58

Per impostazione predefinita, SQL Plus considera "&" come un carattere speciale che inizia una stringa di sostituzione. Questo può causare problemi durante l'esecuzione di script che capita di includere '&' per altre ragioni:

SQL> insert into customers (customer_name) values ('Marks & Spencers Ltd'); 
Enter value for spencers: 
old 1: insert into customers (customer_name) values ('Marks & Spencers Ltd') 
new 1: insert into customers (customer_name) values ('Marks Ltd') 

1 row created. 

SQL> select customer_name from customers; 

CUSTOMER_NAME 
------------------------------ 
Marks Ltd 

Se si conosce lo script include (o potrebbe includere) dati contenenti '&' personaggi, e non si vuole la sostituzione comportamento come sopra, quindi utilizzare set define off per spegnere il comportamento durante l'esecuzione dello script:

SQL> set define off 
SQL> insert into customers (customer_name) values ('Marks & Spencers Ltd'); 

1 row created. 

SQL> select customer_name from customers; 

CUSTOMER_NAME 
------------------------------ 
Marks & Spencers Ltd 

si potrebbe desiderare di aggiungere set define on alla fine dello script per ripristinare il comportamento predefinito.

8

Ecco l'esempio:

SQL> set define off; 
SQL> select * from dual where dummy='&var'; 

no rows selected 

SQL> set define on 
SQL>/
Enter value for var: X 
old 1: select * from dual where dummy='&var' 
new 1: select * from dual where dummy='X' 

D 
- 
X 

Con set define off, ci sono voluti una riga con &var valore, viene richiesto all'utente di immettere un valore per esso e sostituita &var con il valore immesso (in questo caso, X) .

Problemi correlati