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中进行区分,编译器会为您处理它. (编辑:威海站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |