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