任何人都可以解释一下SET SCAN OFF和SET SCAN On的目的是什么?我知道它的目的是禁用替换变量和参数。但我想要一个明确的解释
答案 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有些价值