我试图将存储过程的结果存储到变量中,但问题是我想用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告诉我我的存储过程尚未声明,这是声明的。