Oracle SQL PL / SQL:使用函数的返回值作为另一个函数的输入?

时间:2015-03-13 13:10:43

标签: oracle plsql

它可能只是对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 ...

提前感谢。

1 个答案:

答案 0 :(得分:2)

DEFINE EXECUTE 会在SQL*Plus中按预期工作。要在 SQL Developer 中执行整个代码或从客户端执行脚本,我建议您:

  1. 使用匿名阻止
  2. DECLARE 过程OUT parameter变量,以及另一个存储函数返回值的变量。
  3. BEGIN-END块中,调用该过程。
  4. 并使用相同的varible来存储函数的返回值。
  5. 例如,

    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;
    /