zoukankan      html  css  js  c++  java
  • 执行ORACLE SQL时如何 忽略替换变量(转载)

    你想在SQL*Plus里执行一个脚本,脚本里包含了一些看起来像替换变量的元素,但实际上你并不是想把它们当替换变量来处理。这时你想让解析器忽略它们而不是提示用户输入。
    解决方案1
    有一种解决方案就是在&字符前使用转义字符。转义字符可以告诉SQL*Plus不要把转义字符后面的内容当做变量引用来处理。
    在下面的代码中,转义字符会让SQL*Plus在碰到字符串“& Receiving”时忽略其中的&字符,只把它当做普通的字符串处理:

    解决方案2
    另一个方案就是完全禁止替换变量特性,下面的例子中使用SET DEFINE OFF命令来告诉SQL*Plus忽略所有的替换变量:

    原理分析
    你常常会碰到需要告诉SQL*Plus忽略替换变量的情况。上面两个例子就是这种情况的两个不同解决方案。你可根据具体情况取舍。
    通过SET ESCAPE命令设置转义字符,可以告诉SQL*Plus在所有的情况下都将这个特定的字符作为转义字符,这样一来,无论什么时候碰到这个字符,后面紧接着的字符就会被解析器忽略掉。这里所说的“忽略”指的是这个字符不会触发你所预期的那种常规功能,如提示用户输入数据。
    使用SET DEFINE OFF命令会使所有的替换变量都被忽略掉。实际上,这种解决方案仅对替换变量起作用,在其他情况下并不会使解析器进行转义。因为这个方法只是转义替换变量,所以在运行脚本时比较适合使用。假设你有一个名字为display_department_info.sql的脚本,其中包含以下SQL:

    如果你想通过SQL*Plus执行脚本,并且不使用本案例所提供的任何方案,那么,你就会看到下面的消息:

    这段消息之所以出现是因为SQL*Plus把“Importing & Exporting”里的&符号当做替换变量处理了,所以会提示用户输入。现在,再执行一次相同的脚本,不同的是我们先运行SET DEFINE OFF命令:

    使用SET DEFINE OFF之后的结果就是你希望得到的。

  • 相关阅读:
    《Linux系统编程(第2版)》
    《深入网站开发和运维》
    《软件定义网络:SDN与OpenFlow解析》
    《大话重构》
    《程序员的修炼——从优秀到卓越》
    《Web性能权威指南》
    自定义项目脚手架- Maven Archetypes
    Intellij修改archetype Plugin配置
    ng-template寄宿方式
    ThoughtWorks持续集成平台GO开源了
  • 原文地址:https://www.cnblogs.com/go2anywhere/p/3190848.html
Copyright © 2011-2022 走看看