【发布时间】:2015-07-07 21:38:28
【问题描述】:
我正在尝试动态执行存储过程,因为我基于一个简单的数字获得了它们,所以我创建了另一个过程来执行此操作,但我一直在我的问题标题上得到错误,这是我的程序:
PROCEDURE P_EXEC_REG(p_Register IN VARCHAR2, p_LineBuff IN VARCHAR2, p_User IN VARCHAR2) IS
l_Procedure VARCHAR2(50);
l_Sentence VARCHAR2(500);
BEGIN
l_Procedure := 'P_REG_' || TRIM(p_Register);
l_Sentence := 'BEGIN CTS.PK_INTEGRATE_MANIFESTO.' || l_Procedure || '(:A, :B); END;';
EXECUTE IMMEDIATE l_Sentence
USING IN p_LineBuff, p_User;
END;
由于我们有数百个程序,用 if 语句来做这件事很痛苦,希望有人能帮我解决这个问题,另外,我会告诉你我是怎么称呼它的:
PROCEDURE P_LOAD_FILE(p_Linebuff IN VARCHAR2, p_User IN VARCHAR2) IS
l_Register VARCHAR2(3);
BEGIN
BEGIN
SELECT SUBSTR(p_Linebuff,1,3)
INTO l_Register
FROM DUAL;
EXCEPTION
WHEN NO_DATA_FOUND THEN
--p_result := false;
NULL;
END;
CTS.PK_INTEGRATE_MANIFESTO.P_EXEC_REG(l_Register, p_Linebuff, p_User);
EXCEPTION
WHEN OTHERS THEN
NULL;
END;
【问题讨论】:
-
在
execute immediate之前添加dbms_output.put_line(l_Sentence);,并显示最后一行调用。 -
好的,这就是我从 l_Sentence "Conectando a la base de datos Manifiestos_Lazaro 得到的。BEGIN CTS.PK_INTEGRATE_MANIFESTO.P_REG_900(:p_LineBuff, :p_User); END; El proceso ha terminado。Desconectando de la base de datos Manifiestos_Lazaro。”
-
我会翻译那部分,它说:“正在连接到数据库 Manifiestos_Lazaro。BEGIN CTS.PK_INTEGRATE_MANIFESTO.P_REG_900(:p_LineBuff, :p_User); END; 进程已完成。与数据库断开连接Manifiestos_Lazaro"
标签: stored-procedures dynamic oracle11g plsqldeveloper execute-immediate