Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Oracle [игнор отключен] [закрыт для гостей] / return cursor... / 8 сообщений из 8, страница 1 из 1
20.05.2003, 15:19
    #32164117
gda
gda
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
return cursor...
Mojno li napisati functiu catoraia vozvosciaet cursor. Esli mojno pokajite primerom.
...
Рейтинг: 0 / 0
20.05.2003, 15:57
    #32164165
Fedor_F
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
return cursor...
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
20.05.2003, 16:15
    #32164196
gda
gda
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
return cursor...
Код: 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
20.05.2003, 16:33
    #32164239
Fedor_F
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
return cursor...
Ну забыл...
после OPEN......;
добвавь return MyDataSet;
...
Рейтинг: 0 / 0
20.05.2003, 16:49
    #32164261
SY
SY
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
return cursor...
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
20.05.2003, 17:08
    #32164286
Fedor_F
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
return cursor...
2 SY
У qda ошибка была из-за отсутствия в функции оператора возврата значения.
Использовать эту функцию можно без каких-либо ухищрений, т.к. возвращаемое значение и есть уже типа CURSOR, входящего в набор типов SQL.
...
Рейтинг: 0 / 0
20.05.2003, 17:17
    #32164297
gda
gda
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
return cursor...
Код: 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
20.05.2003, 18:15
    #32164378
SY
SY
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
return cursor...
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
Форумы / Oracle [игнор отключен] [закрыт для гостей] / return cursor... / 8 сообщений из 8, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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