Oracle
PL/SQL

Курсор(select) из хранимых процедур, функций

Опубликовано: 09 дек 04
Рейтинг:

Автор: Роман Дынник
Прислал:

Создается пакет в котором определяются тип курсора и функции/процедуры. В теле пакета - реализация процедур и функций.

create or replace package my_pack is
  --тип ссылка на курсор (тип курсора не указывается)
  type ref_cursor is ref cursor;
  -- из функции
  function sp_test return ref_cursor;
  --возврат через выходной параметр хп
  procedure sp_test1(cur out ref_cursor);
end;
/

create or replace package body my_pack is
--возврат как результат функции
function sp_test return ref_cursor is
  rs ref_cursor;
begin
  open rs for
    select e.*
    from scott.emp e;
  return rs;
end;

--возврат через выходной параметр хп
procedure sp_test1(cur out ref_cursor) is
begin
  open cur for
    select e.*
    from scott.emp e;
end;

end;
/


Начиная с Oracle9i можно воспользоваться системным типом SYS_REFCURSOR вместо описания в пакете собственного (в примере - REF_CURSOR).

Различные клиентские приложения по-разному позволяют работать с refcursor'ами. Пример для SQL*Plus:
SQL> var result refcursor
SQL> exec :result := my_pack.sp_test;

PL/SQL procedure successfully completed.

SQL> print result

     EMPNO ENAME      JOB              MGR HIREDATE                   SAL       COMM     DEPTNO
---------- ---------- --------- ---------- ------------------- ---------- ---------- ----------
      7369 SMITH      CLERK           7902 17.12.1980 00:00:00        800                    20
      7499 ALLEN      SALESMAN        7698 20.02.1981 00:00:00       1600        300         30
      7521 WARD       SALESMAN        7698 22.02.1981 00:00:00       1250        500         30
      7566 JONES      MANAGER         7839 02.04.1981 00:00:00       2975                    20
      7654 MARTIN     SALESMAN        7698 28.09.1981 00:00:00       1250       1400         30
      7698 BLAKE      MANAGER         7839 01.05.1981 00:00:00       2850                    30
      7782 CLARK      MANAGER         7839 09.06.1981 00:00:00       2450                    10
      7788 SCOTT      ANALYST         7566 19.04.1987 00:00:00       3000                    20
      7839 KING       PRESIDENT            17.11.1981 00:00:00       5000                    10
      7844 TURNER     SALESMAN        7698 08.09.1981 00:00:00       1500          0         30
      7876 ADAMS      CLERK           7788 23.05.1987 00:00:00       1100                    20
      7900 JAMES      CLERK           7698 03.12.1981 00:00:00        950                    30
      7902 FORD       ANALYST         7566 03.12.1981 00:00:00       3000                    20
      7934 MILLER     CLERK           7782 23.01.1982 00:00:00       1300                    10

14 rows selected.

Другие примеры: Result Sets from Stored Procedures In Oracle, examples for SQLPlus, Pro*C, Java/JDBC, ODBC, ADO/ASP, DBI Perl and OCI

Комментарии


  • вы бы лучше написали как сделать Select из REF CURSOR`а

  • афтор жжт

  • Тема не раскрыта

  • рассчитана на уже знающих пользователей, хотя должна на новичков

  • 10 марта 2006, 18:51 radovano_perez

    Тема, действительно, не раскрыта. Смысл статьи не ясен

  • А надо ли закрывать такой курсор явно, если я скажем, обращаюсь к нему из программы на Java?

  • если модератор дал на этот пример линк значит есть интерес, а для остальных оценяющих просьба помнить о аксиоме кас. примеров - Что: надо показывать не какой я умный а как это просто.

  • Рома, а ты не из КиевЭнерго? Имена полей больно знакомые по старой работе :)))

  • как передается то?... через какие компоненты??.. тема не раскрыта..

  • а дальше это всё передаётся через адо в дельфийский грид

  • Гениально... а дальше что???



Необходимо войти на сайт, чтобы оставлять комментарии

Раздел FAQ: Oracle / PL/SQL / Курсор(select) из хранимых процедур, функций