В SQL * Plus (и других инструментах, поддерживающих синтаксис SQL * Plus) по умолчанию инструмент сканирует операторы SQL в поисках переменных подстановки.Это позволяет создавать сценарии SQL * Plus, которые используют переменные, определенные в SQL * Plus, для различных задач создания отчетов.
Поскольку переменные подстановки начинаются с амперсанда ('&') и, однако, не требуют предварительного объявления,это создает проблемы, если вы пытаетесь запустить оператор SQL, который содержит амперсанд.Например, если у вас есть оператор INSERT
, который содержит строковый литерал с амперсандом, вы не хотите, чтобы SQL * Plus предварительно обрабатывал оператор.Или, если я хочу выбрать строку «foo & bar»
SQL> set scan off;
SQL> ed
Wrote file afiedt.buf
1* select 'foo & bar' from dual
SQL> /
'FOO&BAR'
---------
foo & bar
Если я позволю SQL * Plus предварительно обработать оператор, текст «& bar» интерпретируется как переменная подстановкии мне предлагается ввести текст для замены во время выполнения
SQL> set scan on
SQL> /
Enter value for bar: some value
old 1: select 'foo & bar' from dual
new 1: select 'foo some value' from dual
'FOOSOMEVALUE'
--------------
foo some value