Oracle
 sql >> база данни >  >> RDS >> Oracle

Как да напиша запаметена процедура, която добавя колона към референтен курсор от друга запаметена процедура?

Едно възможно решение (което евентуално може да бъде опростено) е да се използва таблична функция за обработка на курсора и за добавяне на стойността на функцията.

Да приемем, че функцията, връщаща sys_refcursor, се нарича get_cur и че курсорът се състои от колона ID, NAME (това е важно, тъй като табличната функция изисква дефиниране на тип).

Вие декларирате TYPE за реда (включително допълнителната колона на пътя) и за получената таблица.

create type t_row is object
 ( id             number(10),
   name varchar2(10),
   path varchar2(10)
);
/

create type t_rows is table of t_row;
/

и дефинирайте табличната функция, която извлича курсора и добавя извикването на функцията.

create or replace function get_cur2  return 
t_rows
PIPELINED
as
   cv_out     sys_refcursor;
   id   number;
   name   varchar2(100);    
begin
      cv_out := get_cur; 
      loop 
        FETCH cv_out INTO id, name;
        exit when cv_out%NOTFOUND;
        pipe row(t_row(id,name, GetRegionPath(id)));
      end loop;
      close    cv_out;
      return;
end;
/

Сега можете да изберете данните от табличната функция

select * from  table(get_cur2); 

        ID NAME       PATH     
---------- ---------- ----------
         1 one        path 1     
         2 two        path 2 

и, разбира се, можете да използвате тази заявка, за да отворите курсор в трета функция, която ще върне SYS_REFCURSOR с допълнителната колона за път.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Функция за контролен файл на моментна снимка с RMAN и ORA-00245

  2. oracle конвертира DD-MON-YY в DD/MM/YYYY

  3. Възможно ли е да се изпълни побитова групова функция?

  4. Съхранена процедура на Oracle, връщаща референтен курсор срещу асоциативни масиви

  5. ротационна таблица Oracle - как да промените елементите на редове в колони