PLSQL Bind变量和Host变量有什么区别

好人

关于PLSQL,“主机变量”和“绑定变量”之间有什么区别?

链接从askTom说:“在PLSQL的区别模糊-它非常接近SQL”这一点。那微小的“模糊”区别是什么?

陈述1:

SELECT 1 FROM dual WHERE dummy = :B1;

陈述2:

SELECT 1 FROM dual WHERE dummy = v_var;

在这两个语句中,语句1代表绑定变量,语句2代表主机变量,对吗?

金·伯格·汉森

考虑以下C#代码段:

int    v_empno = 7369;
string v_ename;

OracleCommand cmd = con.CreateCommand();
cmd.Parameters.Add("paramEmpno", OracleDbType.Decimal, v_empno, ParameterDirection.Input);
cmd.CommandText = "select e.ename from scott.emp e where e.empno = :1";
v_ename = cmd.ExecuteScalar().ToString();

v_empnov_ename是主机变量。在这里,您可以显式创建绑定变量以供:1在语句中使用。

请考虑以下PL / SQL片段:

declare
   v_empno  number := 7369;
   v_ename  varchar2(10);
begin
   select e.ename
     into v_ename
     from scott.emp e
    where e.empno = v_empno;
   dbms_output.put_line(v_ename);
end;
/

再次声明的变量v_empno,并v_ename可以被认为是主变量,但是当他们在静态SQL的PL / SQL代码中使用,它们会自动由PL / SQL编译器/引擎变成绑定变量-您不必手动创建像C#示例一样绑定变量。如果您检查由这部分PL / SQL实际执行的SQL,它将看起来像这样:

   select e.ename
     from scott.emp e
    where e.empno = :B1

那就是PL / SQL编译器自动:B1为您的v_empnoPL / SQL变量创建了绑定变量。这就是Tom Kyte的意思,即您实际上无法在PL / SQL中正确区分主机变量和绑定变量。编写PL / SQL时,在PL / SQL代码中使用时,变量是宿主变量,而在嵌入式SQL代码中使用时,则是绑定变量。您无需在PL / SQL中进行区分,编译器会为您处理。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章