【问题标题】:SET SCAN OFF purposeSET SCAN OFF 目的
【发布时间】:2012-01-25 22:53:56
【问题描述】:

谁能解释一下 SET SCAN OFF 和 SET SCAN ON 的目的是什么?我知道它的目的是禁用替换变量和参数,但我想要一个明确的解释。

【问题讨论】:

    标签: sql oracle sqlplus


    【解决方案1】:

    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 的工作方式。基本上,您正在控制是否提示替换

    【讨论】:

    • DEFINE是否默认设置为ON?
    【解决方案2】:

    在 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
    

    【讨论】:

      【解决方案3】:

      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 一些值

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-12-19
        • 2016-02-05
        • 2013-07-22
        • 1970-01-01
        相关资源
        最近更新 更多