create or replace
FUNCTION test_fun (
p_ref_cur OUT SYS_REFCURSOR,
p_a_code IN NUMBER DEFAULT 0,
p_category IN package.category%TYPE DEFAULT NULL,
p_name IN package.name%TYPE DEFAULT NULL,
p_display_name IN package.display_name%TYPE DEFAULT NULL,
p_rowid IN package."rowid"%TYPE DEFAULT NULL,
p_flg IN package.flg%TYPE DEFAULT '1',
p_mod_dat IN package.mod_dat%TYPE DEFAULT SYSTIMESTAMP,
p_mod_usr IN package.mod_usr%TYPE DEFAULT NULL
)
RETURN NUMBER
AS
如何在具有SYS_REFCURSOR作为OUT参数的oracle中调用此函数?
更新 ** test_fun **将从另一个函数调用,例如调用者(),其中将从数据库中获取要执行的完整函数,并使用execute immediate命令执行。
SELECT command into cmd from data_table where id=p_id;
execute immediate (cmd);
cmd 值就像
test_fun(v_cv1,0, 'pp', 'np123', 'np', NULL, 1, NULL, 'testuser');
注意:我们可以控制来电()功能, cmd 可以执行但不能控制 test_fun()
非常感谢任何帮助。
答案 0 :(得分:0)
只需在调用块中声明一个SYS_REFCURSOR类型的变量,然后调用您的函数,例如来自SQL / Plus:
set autoprint on;
var cur refcursor;
declare
FUNCTION test_fun (
p_ref_cur OUT SYS_REFCURSOR)
RETURN NUMBER is
begin
open p_ref_cur for select * from dual;
return 1;
end;
begin
dbms_output.put_line(test_fun(:cur));
end;
/
答案 1 :(得分:0)
这个程序做了神奇的
PROCEDURE executecmd(cmd_in IN VARCHAR2)
AS
v_cv1 SYS_REFCURSOR;
BEGIN
dbms_output.put_line('Executing cmd: '|| cmd);
execute immediate 'declare
result number;
BEGIN
result:='||cmd_in||';'||
'END;'
USING v_cv1;
END;