Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 извлечь SYS_REFCURSOR в переменную табличного типа  [new]
BenKenoby
Member

Откуда:
Сообщений: 19
Добрый день.

Делаю fetch SYS_REFCURSOR в переменную табличного типа.
При попытке обратиться к полю из переменной происходит ошибка:

PLS-00302: component 'ANY_FIELD' must be declared

Табличный тип ссылается на объектный тип, в котором поле ANY_FIELD есть.
11 окт 18, 10:35    [21701249]     Ответить | Цитировать Сообщить модератору
 Re: извлечь SYS_REFCURSOR в переменную табличного типа  [new]
Elic
Member

Откуда: 1984. Выбраковка финно-угром продолжается. КЯЗ
Сообщений: 28295
BenKenoby
табличного типа
Нет такого типа.
RTFM
11 окт 18, 11:00    [21701288]     Ответить | Цитировать Сообщить модератору
 Re: извлечь SYS_REFCURSOR в переменную табличного типа  [new]
BenKenoby
Member

Откуда:
Сообщений: 19
Elic,

CREATE OR REPLACE TYPE MY_OBJECT AS OBJECT
(ANY_FIELD NUMBER);
/



CREATE TYPE MY_TYPE AS
TABLE OF MY_OBJECT;
/
11 окт 18, 11:09    [21701302]     Ответить | Цитировать Сообщить модератору
 Re: извлечь SYS_REFCURSOR в переменную табличного типа  [new]
Elic
Member

Откуда: 1984. Выбраковка финно-угром продолжается. КЯЗ
Сообщений: 28295
Не стесняйся, показывай всё, что делаешь не так.
11 окт 18, 11:19    [21701320]     Ответить | Цитировать Сообщить модератору
 Re: извлечь SYS_REFCURSOR в переменную табличного типа  [new]
BenKenoby
Member

Откуда:
Сообщений: 19
Elic,

DECLARE 
   VCUR       SYS_REFCURSOR;
   VBANKPROPS T_BANKPROPS_PAYMENT;

BEGIN 
  
	any_proc(VCUR); 

    FETCH VCUR  
	INTO VBANKPROPS; 

    DBMS_OUTPUT.put_line(VBANKPROPS.ANY_FIELD);

END; 
11 окт 18, 11:21    [21701322]     Ответить | Цитировать Сообщить модератору
 Re: извлечь SYS_REFCURSOR в переменную табличного типа  [new]
Stax
Member

Откуда: Ukraine,Lviv
Сообщений: 1319
[/SRC]BenKenoby,
SQL> l
  1  declare
  2   vt my_type;
  3   c1 sys_refcursor;
  4  begin
  5   open c1 for select my_object(empno) from emp;
  6   fetch c1 bulk collect into vt ;
  7   dbms_output.put_line(vt.last);
  8   close c1;
  9* end;
SQL> /
14

PL/SQL procedure successfully completed.



.....
stax
11 окт 18, 11:31    [21701346]     Ответить | Цитировать Сообщить модератору
 Re: извлечь SYS_REFCURSOR в переменную табличного типа  [new]
-2-
Member

Откуда:
Сообщений: 13858
Три года назад в форуме интербеса прикидывался специалистом по ораклу
BenKenoby
Возникла необходимость получить результат запроса строкой (один столбец).
Работаю в основном с Oracle и там есть listagg.
Есть ли что-то подобное в IB?
А тут три ошибки по основам plsql на три строки кода.
11 окт 18, 11:46    [21701372]     Ответить | Цитировать Сообщить модератору
 Re: извлечь SYS_REFCURSOR в переменную табличного типа  [new]
BenKenoby
Member

Откуда:
Сообщений: 19
Stax,

SYS_REFCURSOR возвращается в из параметром из процедуры.
Как в таком случае его преобразовать в мой тип?
11 окт 18, 12:03    [21701402]     Ответить | Цитировать Сообщить модератору
 Re: извлечь SYS_REFCURSOR в переменную табличного типа  [new]
BenKenoby
Member

Откуда:
Сообщений: 19
-2-,

Там написано, что специалист?
11 окт 18, 12:10    [21701423]     Ответить | Цитировать Сообщить модератору
 Re: извлечь SYS_REFCURSOR в переменную табличного типа  [new]
Stax
Member

Откуда: Ukraine,Lviv
Сообщений: 1319
BenKenoby,

структура SYS_REFCURSOR известная?

.....
stax
11 окт 18, 12:23    [21701448]     Ответить | Цитировать Сообщить модератору
 Re: извлечь SYS_REFCURSOR в переменную табличного типа  [new]
BenKenoby
Member

Откуда:
Сообщений: 19
Stax,

да.
И объект я описал той же структуры, что и курсор
11 окт 18, 13:02    [21701502]     Ответить | Цитировать Сообщить модератору
 Re: извлечь SYS_REFCURSOR в переменную табличного типа  [new]
Stax
Member

Откуда: Ukraine,Lviv
Сообщений: 1319
BenKenoby,

  1  declare
  2   c1 sys_refcursor;
  3   procedure p(p_c in sys_refcursor) is
  4     vt my_type;
  5   begin
  6     fetch c1 bulk collect into vt ;
  7     dbms_output.put_line(vt.last);
  8     close c1;
  9   end;
 10  begin
 11   open c1 for select my_object(empno) from emp;
 12   p(c1);
 13   open c1 for select my_object(deptno) from dept;
 14   p(c1);
 15* end;
SQL> /
14
4

PL/SQL procedure successfully completed.


.....
stax
11 окт 18, 13:59    [21701596]     Ответить | Цитировать Сообщить модератору
 Re: извлечь SYS_REFCURSOR в переменную табличного типа  [new]
Stax
Member

Откуда: Ukraine,Lviv
Сообщений: 1319
  1  declare
  2   c1 sys_refcursor;
  3   procedure p(p_c in sys_refcursor) is
  4     vt my_type;
  5   begin
  6     fetch c1 bulk collect into vt ;
  7     dbms_output.put_line(vt.last);
  8     close c1;
  9   end;
 10   procedure po(p_s in varchar2,p_c out sys_refcursor) is
 11   begin
 12     open c1 for p_s;
 13   end;
 14  begin
 15   po('select my_object(deptno) from emp',c1);
 16   p(c1);
 17   open c1 for select my_object(deptno) from dept;
 18   po('select my_object(deptno) from dept',c1);
 19   p(c1);
 20* end;
SQL> /
14
4

PL/SQL procedure successfully completed.


.....
stax
11 окт 18, 14:07    [21701614]     Ответить | Цитировать Сообщить модератору
 Re: извлечь SYS_REFCURSOR в переменную табличного типа  [new]
SY
Member

Откуда: Middlebury, CT USA
Сообщений: 9124
Stax,

А какой смысл в object type?

SQL> set serveroutput on
SQL> declare
  2      c1 sys_refcursor;
  3      v_num_list sys.OdciNumberList;
  4  begin
  5      open c1 for'select deptno from emp';
  6      fetch c1 bulk collect into v_num_list;
  7      for i in 1..v_num_list.count loop
  8        dbms_output.put_line(v_num_list(i));
  9      end loop;
 10      close c1;
 11  end;
 12  /
20
30
30
20
30
30
10
20
10
30
20
30
20
10

PL/SQL procedure successfully completed.

SQL> 


SY.
11 окт 18, 14:47    [21701656]     Ответить | Цитировать Сообщить модератору
 Re: извлечь SYS_REFCURSOR в переменную табличного типа  [new]
Stax
Member

Откуда: Ukraine,Lviv
Сообщений: 1319
SY
Stax,

А какой смысл в object type?


я не знаю
мож курсор возвращает MY_OBJECT
мож функция должна вернуть MY_TYPE

хз, архитекторам BenKenoby виднее

.....
stax
11 окт 18, 15:04    [21701673]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить