簡體   English   中英

試圖在 oracle 的存儲過程中調用 Function

[英]Trying to call a Function inside a stored procedure in oracle

我正在嘗試從 Oracle 中的存儲過程調用 function,但不知道該怎么做。 我的 function 有兩個 IN 參數和一個 OUT 參數。 在我的過程中,我正在使用 out sys refcursor。 任何參考或示例都會對我有很大幫助。

這是一個在過程中調用 function 的簡單示例。 正如 APC 提到的,在 function 中使用OUT是一種不好的做法。 相反,您可以return所需的 output。 而且我不確定您如何使用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;
/

在這里查看演示

不確定您的要求是什么,也許您只是出於教育目的嘗試代碼。 一般來說,我沒有看到太多將 OUT 參數與函數一起使用的代碼,如果您想將多個值返回給調用者 object,那么您可以使用具有多個 OUT 變量的過程。 帶有 OUT 參數的 oracle function 與正常的 function 有一些限制。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM