我想在ref_cursor中得到结果,但我无法做到这一点。
请建议我如何使用立即执行
在ref_cursor中获取结果CREATE OR REPLACE PROCEDURE TEST_PROC_QT ( p_name IN VARCHAR2,
p_result_set OUT sys_refcursor ) IS
v_sql VARCHAR2(4000);
BEGIN
v_sql := '';
v_sql := 'SELECT * FROM USERS WHERE 1=1 ';
IF p_name is not null THEN
v_sql := v_sql || ' AND login_id = :v_name';
ELSE
v_sql := v_sql || ' AND ((1=1) or :v_name is null)';
END IF;
Dbms_output.put_line(v_sql);
EXECUTE IMMEDIATE v_sql
--OPEN p_result_set for v_sql
--INTO p_result_set using p_name;
END;
答案 0 :(得分:9)
只需:
OPEN p_result_set for v_sql using p_name;
答案 1 :(得分:1)
例如,您需要创建一个类型以保持您选择的数据将返回。
想象一下,这是您的用户表user(id number, name varchar2)
,您的类型应如下所示:
create type users_type as object (id number, name varchar2);
创建一个类型表以保持上面创建的对象。
create type users_table_object as table of users_type;
创建程序:
create the procedure test(
cv_1 OUT SYS_REFCURSOR
....
)
as
users_table_object;
v_query VARCHAR2(2000);
begin
v_query := N'select users_type(id, name) from users ';
execute immediate
bulk collect into users_table_object;
open cv_1 for table(users_table_object)