0

我必须对具有以下几行的 Oracle 存储过程进行修改。

      InsStmt = 'INSERT INTO EMPLOYEE (Emp_cd, Emp_lst_nm, Emp_fst,nm) VALUES
                (:Emp_cd, :Emp_lst_nm, :Emp_fst_nm);';
    varExec :='
    DECLARE
      var1 VARCHAR2(100);
    BEGIN
      var1 := :Emp_cd||:Emp_lst_nm||:Emp_fst_nm;
      '||InsStmt||'
    END;';
   EXECUTE IMMEDIATE varExec USING ip_param_cd, ip_param_lnm, ip_param_fnm;

我对Oracle存储过程只有基本的了解。经过一番研究,我发现 || 运算符用于连接字符串。

但我仍然想知道下面的陈述是什么意思

var1 := :Emp_cd||:Emp_lst_nm||:Emp_fst_nm;
      '||InsStmt||'

我浏览了http://docs.oracle.com/cd/B28359_01/appdev.111/b28843/tdddg_procedures.htm#CIHGDECD上的教程,但找不到任何帮助。

4

1 回答 1

2

在触发器上下文之外,该列:用于绑定语句中的变量。

例如:

EXECUTE IMMEDIATE 'UPDATE mytable SET age = 25 WHERE age = :1' 
     USING IN localVarAge;

在这种情况下,该:1值将替换为 的值localVarAge。':' 变量出现在准备好的语句中的顺序很重要,而不是它们的实际标签。

在您的代码中,显然缺少一块,这部分var1 := :Emp_cd||:Emp_lst_nm||:Emp_fst_nm;应该在引号内。无论如何,这都是有道理的,因为在那之后您有一个结束引号和一个连接。

于 2013-03-17T03:26:01.113 回答