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
替换为define
d 的内容。另见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 中的 & 和 : 有啥区别?的主要内容,如果未能解决你的问题,请参考以下文章