加入收藏 | 设为首页 | 会员中心 | 我要投稿 辽源站长网 (https://www.0437zz.com/)- 云专线、云连接、智能数据、边缘计算、数据安全!
当前位置: 首页 > 站长百科 > 正文

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

发布时间:2021-03-15 07:03:58 所属栏目:站长百科 来源:网络整理
导读:关于PLSQL,“主机变量”和“绑定变量”之间有什么区别? 来自askTom的这个link说“plsql中的区别模糊 – 它非常接近sql”.那么微小的,“模糊”的差异是什么? 声明1: SELECT 1 FROM dual WHERE dummy = :B1; 声明2: SELECT 1 FROM dual WHERE dummy = v_va

关于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中进行区分,编译器会为您处理它.

(编辑:辽源站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读