powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / return cursor...
8 сообщений из 8, страница 1 из 1
return cursor...
    #32164117
gda
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mojno li napisati functiu catoraia vozvosciaet cursor. Esli mojno pokajite primerom.
...
Рейтинг: 0 / 0
return cursor...
    #32164165
Fedor_F
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Create or Replace Package MyPackage is
Type T_REFCUR is ref cursor;
Function GetData([parameters]) return T_REFCUR;
End MyPackage;

Create or Replace Package Body MyPackage is
Function GetData([parameters]) return T_REFCUR is MyDataSet T_REFCUR;
Begin
open MyDataSet for Select * from <TableorViewName>;
End;
End MyPackage;
...
Рейтинг: 0 / 0
return cursor...
    #32164196
gda
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
SQL> create or replace package mypackage_1 is
   2   type t_refcur is ref cursor;
   3   function getdata return t_refcur;
   4   end mypackage_1;
   5   /

Package created

SQL> create or replace package body mypackage_1 is
   2   function getdata return t_refcur is
   3   MyDataSet t_refcur;
   4   begin
   5   open MyDataSet for select * from emp;
   6   end;
   7   end mypackage_1;
   8   /

Package body created

SQL> select mypackage_1.getdata() from dual;

select mypackage_1.getdata() from dual

ORA- 06503 : PL/SQL: Function returned without value
ORA- 06512 : at  "PROBA2.MYPACKAGE_1" , line  5 
...
Рейтинг: 0 / 0
return cursor...
    #32164239
Fedor_F
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ну забыл...
после OPEN......;
добвавь return MyDataSet;
...
Рейтинг: 0 / 0
return cursor...
    #32164261
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 gda:

You can not call user defined function in SQL statement if function returns not SQL datatype. And REF CURSOR is PL/SQL, not SQL structure. To test Fedor's package use:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
SQL> set linesize  132 
SQL> create or replace
   2     package mypackage_1
   3       is
   4         type t_refcur is ref cursor;
   5         function getdata
   6           return t_refcur;
   7   end mypackage_1;
   8   /

Package created.

SQL> create or replace
   2     package body mypackage_1
   3       is
   4         function getdata
   5           return t_refcur
   6           is
   7               MyDataSet t_refcur;
   8           begin
   9               open MyDataSet for select * from emp;
  10               return MyDataSet;
  11         end;
  12   end mypackage_1;
  13   /

Package body created.

SQL> set autoprint on
SQL> variable x refcursor
SQL> begin
   2       :x := mypackage_1.getdata;
   3   end;
   4   /

PL/SQL procedure successfully completed.


     EMPNO ENAME      JOB              MGR HIREDATE         SAL       COMM     DEPTNO
 ---------- ---------- --------- ---------- --------- ---------- ---------- ----------
 
       7369  SMITH      CLERK            7902   17 -DEC- 80          800                      20 
       7499  ALLEN      SALESMAN         7698   20 -FEB- 81         1600          300           30 
       7521  WARD       SALESMAN         7698   22 -FEB- 81         1250          500           30 
       7566  JONES      MANAGER          7839   02 -APR- 81         2975                      20 
       7654  MARTIN     SALESMAN         7698   28 -SEP- 81         1250         1400           30 
       7698  BLAKE      MANAGER          7839   01 -MAY- 81         2850                      30 
       7782  CLARK      MANAGER          7839   09 -JUN- 81         2450                      10 
       7788  SCOTT      ANALYST          7566   19 -APR- 87         3000                      20 
       7839  KING       PRESIDENT             17 -NOV- 81         6000                      10 
       7844  TURNER     SALESMAN         7698   08 -SEP- 81         1500            0           30 
       7876  ADAMS      CLERK            7788   23 -MAY- 87         1100                      20 

     EMPNO ENAME      JOB              MGR HIREDATE         SAL       COMM     DEPTNO
 ---------- ---------- --------- ---------- --------- ---------- ---------- ----------
 
       7900  JAMES      CLERK            7698   03 -DEC- 81          950                      30 
       7902  FORD       ANALYST          7566   03 -DEC- 81         3000                      20 
       7934  MILLER     CLERK            7782   23 -JAN- 82         1300                      10 


SY
...
Рейтинг: 0 / 0
return cursor...
    #32164286
Fedor_F
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2 SY
У qda ошибка была из-за отсутствия в функции оператора возврата значения.
Использовать эту функцию можно без каких-либо ухищрений, т.к. возвращаемое значение и есть уже типа CURSOR, входящего в набор типов SQL.
...
Рейтинг: 0 / 0
return cursor...
    #32164297
gda
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
proba2@sql>;select mypackage_1.getdata from dual;

GETDATA
 --------------------
 
CURSOR STATEMENT :  1 

CURSOR STATEMENT :  1 

     EMPNO ENAME      JOB              MGR HIREDATE          SAL       COMM     DEPTNO
 ---------- ---------- --------- ---------- ---------- ---------- ---------- ----------
 
       7369  SMITH      CLERK            7902   17 - 12 - 1980          800                      20 
       7499  ALLEN      SALESMAN         7698   20 - 02 - 1981         1600          300           30 
       7521  WARD       SALESMAN         7698   22 - 02 - 1981         1250          500           30 
       7566  JONES      MANAGER          7839   02 - 04 - 1981         2975                      20 
       7654  MARTIN     SALESMAN         7698   28 - 09 - 1981         1250         1400           30 
       7698  BLAKE      MANAGER          7839   01 - 05 - 1981         2850                      30 
       7782  CLARK      MANAGER          7839   09 - 06 - 1981         2450                      10 
       7788  SCOTT      ANALYST          7566   09 - 12 - 1982         3000                      20 
       7839  KING       PRESIDENT             17 - 11 - 1981         5000                      10 
       7844  TURNER     SALESMAN         7698   08 - 09 - 1981         1500            0           30 
       7876  ADAMS      CLERK            7788   12 - 01 - 1983         1100                      20 
       7900  JAMES      CLERK            7698   03 - 12 - 1981          950                      30 
       7902  FORD       ANALYST          7566   03 - 12 - 1981         3000                      20 
       7934  MILLER     CLERK            7782   23 - 01 - 1982         1300                      10 

 14  rows selected.


proba2@sql>;set autotrace on
proba2@sql>;variable x refcursor
proba2@sql>;begin
   2   :x := mypackage_1.getdata;
   3   end;
   4   /

PL/SQL procedure successfully completed.


     EMPNO ENAME      JOB              MGR HIREDATE          SAL       COMM     DEPTNO
 ---------- ---------- --------- ---------- ---------- ---------- ---------- ----------
 
       7369  SMITH      CLERK            7902   17 - 12 - 1980          800                      20 
       7499  ALLEN      SALESMAN         7698   20 - 02 - 1981         1600          300           30 
       7521  WARD       SALESMAN         7698   22 - 02 - 1981         1250          500           30 
       7566  JONES      MANAGER          7839   02 - 04 - 1981         2975                      20 
       7654  MARTIN     SALESMAN         7698   28 - 09 - 1981         1250         1400           30 
       7698  BLAKE      MANAGER          7839   01 - 05 - 1981         2850                      30 
       7782  CLARK      MANAGER          7839   09 - 06 - 1981         2450                      10 
       7788  SCOTT      ANALYST          7566   09 - 12 - 1982         3000                      20 
       7839  KING       PRESIDENT             17 - 11 - 1981         5000                      10 
       7844  TURNER     SALESMAN         7698   08 - 09 - 1981         1500            0           30 
       7876  ADAMS      CLERK            7788   12 - 01 - 1983         1100                      20 
       7900  JAMES      CLERK            7698   03 - 12 - 1981          950                      30 
       7902  FORD       ANALYST          7566   03 - 12 - 1981         3000                      20 
       7934  MILLER     CLERK            7782   23 - 01 - 1982         1300                      10 

 14  rows selected.
...
Рейтинг: 0 / 0
return cursor...
    #32164378
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Well, I'll meet you half-way. It is not possible in 8i. In 9i looks like Oracle added REF CURSOR to the list.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
SQL> select * from v$version;

BANNER
 ----------------------------------------------------------------
 
Oracle8i Enterprise Edition Release  8 . 1 . 7 . 0 . 0  - Production
PL/SQL Release  8 . 1 . 7 . 0 . 0  - Production
CORE     8 . 1 . 7 . 0 . 0        Production
TNS for  32 -bit Windows: Version  8 . 1 . 7 . 0 . 0  - Production
NLSRTL Version  3 . 4 . 1 . 0 . 0  - Production

SQL> select mypackage_1.getdata from dual;
select mypackage_1.getdata from dual
       *
ERROR at line  1 :
ORA- 00902 : invalid datatype


SY
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / return cursor...
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]