【发布时间】:2012-01-25 22:53:56
【问题描述】:
谁能解释一下 SET SCAN OFF 和 SET SCAN ON 的目的是什么?我知道它的目的是禁用替换变量和参数,但我想要一个明确的解释。
【问题讨论】:
谁能解释一下 SET SCAN OFF 和 SET SCAN ON 的目的是什么?我知道它的目的是禁用替换变量和参数,但我想要一个明确的解释。
【问题讨论】:
SET SCAN 已过时,但它用于控制是否应扫描替换参数/变量。 OFF 会阻止扫描参数/变量。
SET DEFINE 替换/扩展功能,这里有一篇很好的文章:http://shaharear.blogspot.com/2009/01/set-define.html
来自网站
设置定义;
从对偶中选择“&hello”;
如果 define 设置为 on 并且 SQL*Plus 找到当前替换 前缀,它要求输入一个字符串。在以下示例中, 我输入:哈桑
输入 hello 的值:已输入此字符串
old 1: select '&hello' from dual
new 1: select 'this string was entered' from dual
这相当于旧的SET SCAN 的工作方式。基本上,您正在控制是否提示替换
【讨论】:
在 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
【讨论】:
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 一些值
【讨论】: