plus - Cuándo o por qué usar un "SET DEFINE OFF" en la base de datos Oracle
sqlplus command line (2)
Aquí está el ejemplo:
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
, tomó una fila con el valor
&var
, solicitó al usuario que ingrese un valor y reemplazó
&var
con el valor ingresado (en este caso,
X
).
Estoy viendo un script en Oracle y veo algo que no reconozco
REM INSERTING into database1."Users"
SET DEFINE OFF;
Insert into database1."Users" ("id","right") values (''1'',''R'');
Estoy buscando documentación sobre "set define off" y está literalmente escribiendo "deshabilitar el análisis de comandos para reemplazar la variable de sustitución con sus valores"
Realmente no entiendo lo que quieren decir.
¿Alguien puede ayudarme?
Por defecto, SQL Plus trata ''&'' como un carácter especial que comienza una cadena de sustitución. Esto puede causar problemas al ejecutar scripts que incluyen ''&'' por otros motivos:
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
Si sabe que su script incluye (o puede incluir) datos que contienen caracteres ''&'', y no desea el comportamiento de sustitución como se indicó anteriormente, utilice
set define off
para desactivar el comportamiento mientras ejecuta el 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
Es posible que desee agregar
set define on
al final del script para restaurar el comportamiento predeterminado.