尝试在oracle中的存储过程内调用函数

时间:2019-11-20 07:16:47

标签: oracle plsql

我试图从Oracle中的存储过程中调用一个函数,但是却不知道该怎么做。 我的函数有两个IN参数和一个OUT参数。 在我的程序中,我正在使用sys refcursor。任何参考或榜样都会对我有很大帮助。

2 个答案:

答案 0 :(得分:1)

这是在过程内部调用函数的简单示例。同样,正如APC所提到的,在功能中使用OUT是一种不好的做法。相反,您可以return所需的输出。而且我不确定您如何使用sys_refcursor,因此请相应地修改您的程序

CREATE OR REPLACE FUNCTION SUM_OF_2(NUM1 IN NUMBER,NUM2 IN NUMBER) RETURN NUMBER
 IS
    RESULT_SUM NUMBER;
    BEGIN
       RESULT_SUM:=NUM1+NUM2;
       RETURN RESULT_SUM;
    END;



CREATE OR REPLACE PROCEDURE CALL_FUNCTON(NUM1 NUMBER,NUM2 NUMBER)
AS
    V_FINAL_RESULT NUMBER;
    BEGIN
        V_FINAL_RESULT:=SUM_OF_2(NUM1,NUM2);
        DBMS_OUTPUT.PUT_LINE(V_FINAL_RESULT);
    END;

BEGIN
 CALL_FUNCTON(5,10);
END;
/

CHECK DEMO HERE

答案 1 :(得分:1)

不确定您的要求是什么,也许您只是出于教育目的而尝试使用该代码。通常,我没有看到太多使用OUT参数和函数的代码,如果您想将多个值返回给调用者对象,则可以使用一个过程使用多个OUT变量。带有OUT参数的oracle函数与普通函数的区别有一些限制。

CREATE OR REPLACE FUNCTION temp_demo_func(out_var1 OUT NUMBER)
   RETURN VARCHAR2 IS
BEGIN
   out_var1 := 1;
   RETURN 'T';
EXCEPTION
   WHEN OTHERS THEN
      RETURN 'F';
END temp_demo_func;
/



CREATE OR REPLACE PROCEDURE temp_demo_proc
(
   in_var1        NUMBER
  ,cur_refcur_out OUT SYS_REFCURSOR
) IS
   res      VARCHAR2(1);
   out_var1 NUMBER;

BEGIN

   res := temp_demo_func(out_var1 => out_var1);

   dbms_output.put_line(out_var1);

   OPEN cur_refcur_out FOR
      SELECT in_var1
            ,out_var1
            ,res
        FROM dual;

END;
/


set serveroutput on
declare
cur_refcur_out  Sys_Refcursor;
in_var1 number := 22;
begin 

temp_demo_proc(in_var1 => in_var1
               ,cur_refcur_out => cur_refcur_out);

end;
/