【问题标题】:what is the difference between the & and : in PL/SQL in oracle?oracle 的 PL/SQL 中的 & 和 : 有什么区别?
【发布时间】:2012-04-27 16:33:33
【问题描述】:

我正在学习 PL/SQL 并且正在查看绑定变量。 我知道我们用来传递 RUN-TIME 值的绑定变量。

但是 PL/SQL 中的 & 和 :(冒号) 有什么区别?两者都相同还是两者之间有什么区别?我什么时候应该使用 & 和 : ?

【问题讨论】:

    标签: sql plsql sqldatatypes


    【解决方案1】:

    & 仅用于SQL*Plus,除此之外没有任何意义。

    SQL*Plus“解析”输入缓冲区时,它将&variables 替换为defined 的内容。另见this linkthis link技术术语替代变量

    另一方面,:variable真正的 绑定变量。当 Oracle 的 SQL 引擎“解析”并执行 SQL 语句时使用它们。参见例如this linkthis link

    所以,简而言之,&variables 被 SQL*Plus 替换并然后传递给 Oracle 的 SQL 引擎,而 :variables 不被 SQL Plus 修改并传递给 Oracle 的 SQL它们出现时的引擎。在 SQL 之外Plus,& 毫无意义。

    【讨论】:

      【解决方案2】:

      & 在 PL/SQL 中没有任何意义,它实际上是一个 SQL Plus 功能(为了兼容性,已在 Toad、SQL Developer 等中复制了该功能)。在 SQL Plus 中,& 用于定义一个替换变量,在将代码发送到服务器进行处理之前,由 SQL Plus 将其替换为指定的替换文本。

      SQL Plus 替换变量的正确语法是&name.,即以& 开头并以. 结尾,但在大多数情况下. 是可选的。所以当你在 SQL Plus 中运行这段代码时:

      select * from emp where ename = '&name.';
      

      SQL Plus 提示用户输入name 的值,并将其替换为在运行之前 的查询。所以如果用户输入KING那么实际运行的SQL是:

      select * from emp where ename = 'KING';
      

      【讨论】:

        猜你喜欢
        • 2014-10-14
        • 2011-07-22
        • 2012-05-25
        • 2016-02-18
        • 1970-01-01
        • 2014-10-20
        • 1970-01-01
        • 2014-05-15
        相关资源
        最近更新 更多