oracle 的 PL/SQL 中的 & 和 : 有啥区别?

Posted

技术标签:

【中文标题】oracle 的 PL/SQL 中的 & 和 : 有啥区别?【英文标题】: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 中的 & 和 :(冒号) 有什么区别?两者都相同还是两者之间有什么区别?我什么时候应该使用 & 和 : ?

【问题讨论】:

【参考方案1】:

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

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

另一方面,:variable真正的 绑定变量。当 Oracle 的 SQL 引擎“解析”并执行 SQL 语句时使用它们。参见例如this link 或this 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';

【讨论】:

以上是关于oracle 的 PL/SQL 中的 & 和 : 有啥区别?的主要内容,如果未能解决你的问题,请参考以下文章

用于遍历多行的 Oracle PL/SQL 函数

Oracle中的PLsql的符号解释大全

ORACLE PL/SQL编程总结

Java 存储过程是不是比 Oracle 中的 PL/SQL 慢?

#Oracle#PL/SQL:多个输入的替换变量

Oracle数据库学习笔记1(11g版本的安装&PL/SQL工具的安装和使用)