设置扫描目的

时间:2012-01-25 22:53:56

标签: sql oracle sqlplus

任何人都可以解释一下SET SCAN OFF和SET SCAN On的目的是什么?我知道它的目的是禁用替换变量和参数。但我想要一个明确的解释

3 个答案:

答案 0 :(得分:11)

SET SCAN已过时但它用于控制是否应扫描替换参数/变量。 OFF会阻止扫描参数/变量。

SET DEFINE替换/扩展了功能,并在此处写了一篇好文章:http://shaharear.blogspot.com/2009/01/set-define.html

来自网站

  

设置define on;

     

从双重选择'& hello';

     

如果将define设置为on并且SQL * Plus找到当前替换   前缀,它要求输入一个字符串。在以下示例中,   我输入了:hasan

     

输入hello的值:输入此字符串

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

这相当于旧SET SCAN的工作方式。基本上你控制是否提示替换

答案 1 :(得分:4)

在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

答案 2 :(得分:-2)

SQL>在SQL>上设置扫描/输入bar的值:某些值为旧1:选择' foo&栏'来自双新1:选择一些价值'来自双重

' FOOSOMEVALUE' -------------- foo有些价值