使用Execute Immediate(继续显示我"遇到符号文件结束")从包中调用dynamicaly存储过程

时间:2015-04-22 21:54:43

标签: sql stored-procedures dynamic oracle11g

我试图将存储过程的结果存储到变量中,但问题是我想用EXECUTE IMMEDIATE调用这些存储过程。

所以问题是,我真的不知道如何将该调用的结果分配给变量。

我有许多具有相似名称的存储过程,唯一改变的是用于验证要执行的存储过程的特定数字,例如:

PROCEDURE P_EXAMPLE_1(p_param1 IN VARCHAR2, p_param2 OUT VARCHAR2);
PROCEDURE P_EXAMPLE_2(p_param1 IN VARCHAR2, p_param2 OUT VARCHAR2);
PROCEDURE P_EXAMPLE_3(p_param1 IN VARCHAR2, p_param2 OUT VARCHAR2);
PROCEDURE P_EXAMPLE_4(p_param1 IN VARCHAR2, p_param2 OUT VARCHAR2);
PROCEDURE P_EXAMPLE_5(p_param1 IN VARCHAR2, p_param2 OUT VARCHAR2);

每当我想执行任何这些存储过程时,我都会像这样使用EXECUTE IMMEDIATE

EXECUTE IMMEDIATE 'CALL P_EXAMPLE_' || p_dynamic || '(p_param1)';

我想将输出值保存到变量中,但我真的不知道如何做到这一点,坦率地说,我甚至不确定我的EXECUTE IMMEDIATE是否正确。

希望你们能帮帮我。

编辑27/04/2015:

大家好,我回答了一些问题,我设法摆脱了代码的一些问题,但现在我遇到了一些新的问题,我不知道是什么做什么或从哪里开始寻找。

现在我有很多存储过程,如下所述:

PROCEDURE P_REG_001(p_SomeParameter IN VARCHAR2) IS
l_SomeVariable   VARCHAR2
BEGIN
    'some code here'
END;
...
...
PROCEDURE P_REG_XXX(p_SomeParameter IN VARCHAR2) IS
l_SomeVariable    VARCHAR2
BEGIN
     'some code here too'
END;

然后我有一个存储过程,它接受一个参数来执行多个" P_REG_XXX(参数)"我存储的程序,如下:

PROCEDURE P_LOAD_BUFFER(p_Register IN VARCHAR2, p_Buffer IN VARCHAR2) IS
l_StoredProcedure    VARCHAR2(300);
BEGIN
    "some code"
    l_StoredProcedure := 'BEGIN P_REG_' || p_Register || '(:p_Buffer); END;';
EXECUTE IMMEDIATE l_StoredProcedure
USING IN p_Buffer;
END;

在我尝试以命令方式执行我的存储过程后,它一直向我发送错误ORA-06550和/或ORA-06512告诉我我的存储过程尚未声明,这是声明的。

0 个答案:

没有答案