[英]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.