oracle – PLSQL Bind变量和Host变量之间有什么区别

前端之家收集整理的这篇文章主要介绍了oracle – PLSQL Bind变量和Host变量之间有什么区别前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
关于PLsql,“主机变量”和“绑定变量”之间有什么区别?

来自askTom的这个link说“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_empno和v_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可以被认为是主变量,但是当它们在PL / sql代码中的静态sql中使用时,它们会被PL / sql编译器/引擎自动转换为绑定变量 – 您不必手动像在C#示例中一样创建绑定变量.如果检查这个PL / sql实际执行的sql,它将如下所示:

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

这是自动创建的PL / sql编译器:用于v_empno PL / sql变量的B1绑定变量.这就是Tom Kyte意味着你无法在PL / sql中真正区分主变量和绑定变量.当您编写PL / sql时,变量在PL / sql代码中使用时是主变量,同时在嵌入式sql代码中使用时它们是绑定变量.您不需要在PL / sql中进行区分,编译器会为您处理它.

猜你在找的Oracle相关文章