Подтвердить что ты не робот

Когда или зачем использовать "SET DEFINE OFF" в Oracle Database

Я смотрю сценарий в Oracle, и я вижу то, что я не узнаю

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

Я ищу документацию о "set define off", и она буквально пишет "отключить синтаксический анализ команд, чтобы заменить переменные подстановки их значениями"

Я не очень понимаю, что они хотят сказать.

Может кто-нибудь мне помочь?

4b9b3361

Ответ 1

По умолчанию SQL Plus обрабатывает "&" как специальный символ, начинающий строку замещения. Это может вызвать проблемы при запуске сценариев, которые включают '&' по другим причинам:

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

Если вы знаете, что ваш сценарий содержит (или может включать) данные, содержащие символы '&', и вы не хотите использовать поведение подстановки, как описано выше, используйте set define off чтобы отключить поведение во время выполнения сценария:

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

Возможно, вы захотите добавить set define on в конец скрипта, чтобы восстановить поведение по умолчанию.

Ответ 2

Вот пример:

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

С set define off он взял строку со значением &var, предложив пользователю ввести для нее значение и заменив &var на введенное значение (в данном случае X).