它可能只是对Oracle SQL和PL / SQL中存在的不同类型变量的误解,但是如何使用PL / SQL函数的返回值作为另一个PL / SQL函数的输入在SQL脚本中,而不必手动将其设置为DEFINE变量的值?
以下是代码(在Oracle SQL Developer中的SQL脚本中运行):
-- some INSERTS/UPDATES/SELECTS ...
DEFINE in = 'somevalue';
VAR return1 NUMBER;
EXECUTE :return1 := someschema.somepackage.somefunction(in);
PRINT return1;
-- reasonable return value gets printed out
VAR return2 NUMBER;
EXECUTE :return2 := someschema.somefunction(return1);
-- ^
-- this does not work ----------------------+
-- (neither does ":return1")
DEFINE in2 = <manually enter value of "return1">
EXECUTE :return2 := someschema.somefunction(in2);
-- ^
-- this works ------------------------------+
-- some INSERTS/UPDATES/SELECTS ...
提前感谢。
答案 0 :(得分:2)
DEFINE 和 EXECUTE 会在SQL*Plus
中按预期工作。要在 SQL Developer 中执行整个代码或从客户端执行脚本,我建议您:
DECLARE
过程的OUT parameter
变量,以及另一个存储函数返回值的变量。BEGIN-END
块中,调用该过程。例如,
DECLARE o_var ; f_var ; BEGIN -- call the procedure package.procedure(o_var); --call the function SELECT package.function(o_var) INTO f_var FROM DUAL; -- do something END; /