我必须修改具有以下行的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阅读了教程,但找不到任何帮助。
答案 0 :(得分: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;
应在引号内。无论如何,这是有道理的,因为你有一个结束语和连接之后。