Ссылка курсора с Выполнить немедленно - PullRequest
2 голосов
/ 23 июня 2011

Я хочу получить результаты в 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;

Ответы [ 2 ]

9 голосов
/ 23 июня 2011

Всего:

OPEN p_result_set for v_sql using p_name;  
1 голос
/ 26 июля 2012
  1. Вам нужно создать тип, чтобы сохранить, например, выбранные вами данные.Представьте, что это ваша таблица пользователей user(id number, name varchar2), ваш тип должен выглядеть следующим образом:

    create type users_type as object (id number, name varchar2);
    
  2. Создать таблицу типов, чтобы сохранить объект, созданный выше.

    create type users_table_object as table of users_type;
    
  3. создать процедуру:

    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)     
    
...