我正在研究PL / SQL&我正在通过绑定变量。 我理解我们用来传递RUN-TIME值的绑定变量。
但是和&之间的区别是什么?和:PL / SQL中的(冒号)?两者是相同的还是两者之间有什么区别?我何时应该使用&并且:?
答案 0 :(得分:6)
&
仅在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之外,&
毫无意义。
答案 1 :(得分: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';