УСТАНОВИТЬ СКАНИРОВАНИЕ - PullRequest
6 голосов
/ 26 января 2012

Может кто-нибудь объяснить, для чего предназначены SET SCAN OFF и SET SCAN On? Я знаю, что его целью является отключение подстановочных переменных и параметров. Но я хочу получить четкое объяснение

Ответы [ 3 ]

12 голосов
/ 26 января 2012

SET SCAN устарел, но он использовался для контроля того, должен ли он сканировать параметры / переменные подстановки.OFF будет препятствовать сканированию параметров / переменных.

SET DEFINE заменяет / расширяет функциональность, и хорошая запись здесь: http://shaharear.blogspot.com/2009/01/set-define.html

С веб-сайта

set define on;

выбрать '& hello' из dual;

Если для define задано значение on, а SQL * Plus находит текущий префикс замещения, он запрашивает ввод строки,В следующем примере я ввел: hasan

Введите значение для hello: эта строка была введена

 old 1: select '&hello' from dual 
 new 1: select 'this string was entered' from dual

Это эквивалентно тому, как будет работать старый SET SCAN.В основном вы контролируете, стоит ли запрашивать замену

4 голосов
/ 26 января 2012

В 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
0 голосов
/ 25 июля 2015

SQL> установить сканирование на SQL> / Введите значение для бара: некоторое значение старое 1: выберите «foo & bar» из двойного нового 1: выберите «foo some value» из двойного

'FOOSOMEVALUE' -------------- foo some value

...