powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Декларация курсора в user type
72 сообщений из 72, показаны все 3 страниц
Декларация курсора в user type
    #39482991
HOME_X
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Доброго дня господа !

Возможно ли представить курсор как поле объекта

А именно
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
create or replace type ttAA as object
(
  gencurtyp REF CURSOR,   - !!!!  ЗДЕСЬ !!!!
  A integer,

  constructor function ttAA(DBEG DATE
                           ) return self as result,

  constructor function ttAA(DBEG DATE,
                            DEND DATE
                           ) return self as result,
   member function Show return integer
)



Пакетные решения мне известны
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
CREATE PACKAGE admin_data AS
   TYPE gencurtyp IS REF CURSOR;
   PROCEDURE open_cv (generic_cv IN OUT gencurtyp, choice INT);
END admin_data;
/
CREATE PACKAGE BODY admin_data AS
   PROCEDURE open_cv (generic_cv IN OUT gencurtyp, choice INT) IS
   BEGIN
      IF choice = 1 THEN
         OPEN generic_cv FOR SELECT * FROM employees;
      ELSIF choice = 2 THEN
         OPEN generic_cv FOR SELECT * FROM departments;
      ELSIF choice = 3 THEN
         OPEN generic_cv FOR SELECT * FROM jobs;
      END IF;
   END;
END admin_data;
/



Благодарен за решение в PL/SQL коде
...
Рейтинг: 0 / 0
Декларация курсора в user type
    #39483002
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
HOME_XВозможно ли представить курсор как поле объектаВ SQL нет типа данных "курсор".
...
Рейтинг: 0 / 0
Декларация курсора в user type
    #39483044
HOME_X
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Elic,

Принято !

Хотел реализовать
В конструктор передали 1 параметр - задекла-ся курсор со скриптом N1 с переданным параметром
В конструктор передали 2 параметра - задекла-ся курсор со скриптом N2 c переданными параметром
Функция Show открыла этот курсор, просканила его вернула pipelined (возвращаемый тип идентичен)

Какое возможно ПРОСТОЕ И ИЗЯЩНОЕ решение ?

Напрашивается
1. Два конструктора создают длинную строку SQL скрипта, пишу в String поле, использую далее в курсоре
2. Резервирование полей для параметров обеих типов конструктора, далее анализ какой тип конструктора
был вызван, декларация соответствующего курсора в функции Show (параметров штук 20)

Ваши предложения ?

Спасибо
...
Рейтинг: 0 / 0
Декларация курсора в user type
    #39483086
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
HOME_XВаши предложения ?Не надо за уши притягивать измышлизмы.
...
Рейтинг: 0 / 0
Декларация курсора в user type
    #39483121
Фотография dbms_photoshop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
HOME_XВаши предложения ?
Если версия 11g, то можешь попробовать создать поле типа cursor_id и потом работать с ним через dbms_sql.to_refcursor.
Если версия 12c, то можешь посмотреть в сторону dbms_sql.return_result и реализовать метод, который возвращает implicit result set.
...
Рейтинг: 0 / 0
Декларация курсора в user type
    #39483238
HOME_X
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dbms_photoshop,

Вашу мысль понял Вас, где src_cur - поле объекта


Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
Constructor
  curid      := DBMS_SQL.OPEN_CURSOR;
  sql_stmt := 'select 1 А1 from DUAL';
  DBMS_SQL.PARSE(curid, sql_stmt, DBMS_SQL.NATIVE);
  src_cur   := DBMS_SQL.TO_REFCURSOR(curid);
...........

function Show
  FETCH src_cur BULK COLLECT INTO empnos, depts;
...............



Вопрос как извлечь id cursora (curid) при такой декларации
declare
cursor Q1 is select 1 F1 from DUAL union all select 2 F1 from DUAL;
begin
......
end

Писать текст (sql_stmt := 'select 1 А1 from DUAL';)
в моем случае неудобно.

Заранее благодарен !
...
Рейтинг: 0 / 0
Декларация курсора в user type
    #39483250
Фотография --Eugene--
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Поскольку Вы хотите "курсор как поле объекта" (т.е. типа member variable), а не "Тип <КУРСОР> как поле объекта", то напрашивается ето:
HOME_X
Код: plsql
1.
2.
3.
4.
5.
6.
create or replace type ttAA as object
(
  gencurtyp sys_refcursor,   - !!!!  ЗДЕСЬ !!!!

[...]
)

так?
...
Рейтинг: 0 / 0
Декларация курсора в user type
    #39483253
Фотография AmKad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
HOME_XВозможно ли представить курсор как поле объектаДля чего?
...
Рейтинг: 0 / 0
Декларация курсора в user type
    #39483255
Фотография AmKad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ElicВ SQL нет типа данных "курсор".
Он вроде бы как бы и есть

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
select cursor(select * from dual) cur
from dual
connect by level <= 2;

CUR
--------------------
CURSOR STATEMENT : 1

CURSOR STATEMENT : 1

D
-
X

CURSOR STATEMENT : 1

CURSOR STATEMENT : 1

D
-
X


а вроде бы как бы и нет

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
select *
from
   (select cursor(select * from dual) cur
    from dual
    connect by level <= 2
    );
   (select cursor(select * from dual) cur
           *
ошибка в строке 3:
ORA-22902: выражение CURSOR не разрешено


Затрач.время: 00:00:00.01

select dump(cursor(select * from dual)) dcur
from dual
connect by level <= 2;
select dump(cursor(select * from dual)) dcur
            *
ошибка в строке 1:
ORA-22902: выражение CURSOR не разрешено
...
Рейтинг: 0 / 0
Декларация курсора в user type
    #39483257
Фотография --Eugene--
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AmKadДля чего?если ТС и в пакетах использует совершенно ненужную конструкцию TYPE gencurtyp IS REF CURSOR, то что-то мне подсказывает, что он не вкурсе, что такое SYS_REFCURSOR..
...
Рейтинг: 0 / 0
Декларация курсора в user type
    #39483265
Фотография --Eugene--
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А в 12 ето можно делать?

PLS-00989: Cursor Variable in record, object, or collection is not supported by this release
...
Рейтинг: 0 / 0
Декларация курсора в user type
    #39483268
stax..
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
--Eugene--AmKadДля чего?если ТС и в пакетах использует совершенно ненужную конструкцию TYPE gencurtyp IS REF CURSOR, то что-то мне подсказывает, что он не вкурсе, что такое SYS_REFCURSOR..

если чесно, то я тож разницу не знаю (кроме удобства)

.....
stax
...
Рейтинг: 0 / 0
Декларация курсора в user type
    #39483270
HOME_X
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
--Eugene--Поскольку Вы хотите "курсор как поле объекта" (т.е. типа member variable), а не "Тип <КУРСОР> как поле объекта", то напрашивается ето:
HOME_X
Код: plsql
1.
2.
3.
4.
5.
6.
create or replace type ttAA as object
(
  gencurtyp sys_refcursor,   - !!!!  ЗДЕСЬ !!!!

[...]
)

так?

gencurtyp sys_refcursor,
и что так возможно ?
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
create or replace type ttAA as object
(
  gencurtyp sys_refcursor,

  A integer,

  constructor function ttAA(DBEG DATE
                           ) return self as result,

  constructor function ttAA(DBEG DATE,
                            DEND DATE
                           ) return self as result,
   member function Show return integer
)
...
Рейтинг: 0 / 0
Декларация курсора в user type
    #39483272
HOME_X
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AmKad,

Пояснение вышеизложено, для передачи указателя на курсор между методами
...
Рейтинг: 0 / 0
Декларация курсора в user type
    #39483273
Фотография dbms_photoshop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
HOME_Xпри такой декларацииВероятно тебе сначала стоит узнать что такое реф курсор.
AmKadа вроде бы как бы и нетcursor expressions предназначены прежде всего для PL/SQL Static SQL
https://docs.oracle.com/cloud/latest/db112/LNPLS/static.htm
За исключением экзотики типа xmltype.
...
Рейтинг: 0 / 0
Декларация курсора в user type
    #39483279
Фотография --Eugene--
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dbms_photoshopЗа исключением экзотики типа xmltype. XMLSEQUENCE rules!
...
Рейтинг: 0 / 0
Декларация курсора в user type
    #39483288
HOME_X
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[quot dbms_photoshop]

В моем случае - это ничего не дает.
Дешевле текст запроса передать как параметр (очень длинная строка)
Так как в целом строку запроса приходиться формировать как для
REF CUR так и для передачи параметра.

Спасибо за уделенное время

Может есть еще идеи ?
...
Рейтинг: 0 / 0
Декларация курсора в user type
    #39483302
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
HOME_XМожет есть еще идеи ?
Не очень понимаю суть затруднений.
Если речь о static SQL, то ref cursor можно открывать (да, в теле - но все-таки статиком) так:

Код: plsql
1.
2.
3.
4.
declare
 rc sys_refcursor;
begin
 open rc for select rownum id, 'val'||rownum v from dual connect by level < 10; 



Кроме того, если структуры тоже статичны, то, возможно, вместо weak ref cursor лучше подойдет strong ref cursor.
...
Рейтинг: 0 / 0
Декларация курсора в user type
    #39483323
HOME_X
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrey_anonymous,

Не-не - дошел до истины ...

Все в норме
Код: plsql
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.
59.
60.
61.
62.
63.
64.
create or replace type ttAA as object
(
  C number,  

  constructor function ttAA(DBEG DATE
                           ) return self as result,

  constructor function ttAA(DBEG DATE,
                            DEND DATE
                           ) return self as result,
   member function Show return integer
)

create or replace type body ttAA as

constructor function ttAA(
                           DBEG DATE
                         ) return self as result
as begin
  DECLARE 
     TYPE curtype IS REF CURSOR;
     src_cur  curtype;
  BEGIN
    OPEN src_cur FOR select 10 F1 from DUAL;
    self.C:=DBMS_SQL.TO_CURSOR_NUMBER(src_cur);
    dbms_output.put_line('Hello1');
    return;
  end;  
end;  

constructor function ttAA(
                           DBEG DATE,
                           Dend DATE
                         ) return self as result
as begin
  DECLARE 
     TYPE curtype IS REF CURSOR;
     src_cur  curtype;
  BEGIN
    OPEN src_cur FOR select 30 F1 from DUAL  union all select 20 F1 from DUAL;
    self.C:=DBMS_SQL.TO_CURSOR_NUMBER(src_cur);
    dbms_output.put_line('Hello 2');
    return;
  end;  
end;  

member function Show return integer
as
  begin
    declare
      i    number;
      b    number;
    begin
      i:=0;
      b:=self.c;
      WHILE DBMS_SQL.FETCH_ROWS(b) > 0 LOOP
        i:= i+ 1;
        dbms_output.put_line('Show '||b);
      END LOOP;
      DBMS_SQL.CLOSE_CURSOR(b);
      return i;
    end;
  end;
end;



select ttAA(To_date('01-01-2017','DD-MM-YYYY'),To_date('01-01-2017','DD-MM-YYYY')).Show()
from DUAL

!!! dbms_photoshop - ЧЕЛОВЕЧИЩЕ большое спасибо за идею !!!!
...
Рейтинг: 0 / 0
Декларация курсора в user type
    #39483326
HOME_X
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrey_anonymousНе очень понимаю суть затруднений.


Иногда надо вовремя ПОАААБЕДАТЬ
(и тема решается самопроизвольно)
...
Рейтинг: 0 / 0
Декларация курсора в user type
    #39483335
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AmKadОн вроде бы как бы и естьВ OCI только
...
Рейтинг: 0 / 0
Декларация курсора в user type
    #39483381
Фотография --Eugene--
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
HOME_X
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
[...]
constructor function ttAA(
                           DBEG DATE,
                           Dend DATE
                         ) return self as result
as begin
  DECLARE 
     TYPE curtype IS REF CURSOR; -- простите, милейший, а зачем вы так настойчиво делаете ЭТО? неужели политика Партии?
     src_cur  curtype;
  BEGIN
    OPEN src_cur FOR select 30 F1 from DUAL  union all select 20 F1 from DUAL; -- практически один хрен что OPEN FOR 'select foo from bar where col = :1' using var;
-- (всмысле, на мой взгляд, что в кавычках, что нет - особой роли не играет, кроме того что без кавычек валидируется на стадии компиляции. ошибаюсь?)
    self.C:=DBMS_SQL.TO_CURSOR_NUMBER(src_cur);
    dbms_output.put_line('Hello 2');
    return;
  end;  
end;  
[...]
...
Рейтинг: 0 / 0
Декларация курсора в user type
    #39483471
HOME_X
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
--Eugene-- OPEN src_cur FOR select 30 F1 from DUAL union all select 20 F1 from DUAL; -- >>>практически один хрен что OPEN FOR 'select foo from bar where col = :1' using var;<<<


У меня в продуктиве это выглядит на строк 70-100 с константами (которые в козявках 'hhhhh' и за которыми нужно следить)
А в этом случае я просто откопирую отлаженный в Dev-ре запрос, предварительно фиксируя параметры и типы
Т.е. проще в сборке и отладке а в целом "ХРЕН один"
...
Рейтинг: 0 / 0
Декларация курсора в user type
    #39483473
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
HOME_Xв целом "ХРЕН один"
Статическая компиляция существенно удобнее динамической уже потому, что отлавливает многие ошибки на этапе компиляции, а не в рантайме.
...
Рейтинг: 0 / 0
Декларация курсора в user type
    #39483524
stax..
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ElicAmKadОн вроде бы как бы и естьВ OCI только
про только не понял
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
SQL> set pages 5000
SQL> var r refcursor
SQL> exec open :r for select * from dept;

PL/SQL procedure successfully completed.

SQL> select :r from dual;

:R
--------------------
CURSOR STATEMENT : 1

CURSOR STATEMENT : 1

    DEPTNO DNAME          LOC
---------- -------------- -------------
        10 ACCOUNTING     NEW YORK
        20 RESEARCH       DALLAS
        30 SALES          CHICAGO
        40 OPERATIONS     BOSTON


SQL>



и тд ...

.....
stax
...
Рейтинг: 0 / 0
Декларация курсора в user type
    #39483539
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
stax..про только не понялЕщё раз: нет SQL типа данных "курсор", потому что это абстракция уровня Call Interface.
...
Рейтинг: 0 / 0
Декларация курсора в user type
    #39483560
stax..
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Elicstax..про только не понялЕщё раз: нет SQL типа данных "курсор", потому что это абстракция уровня Call Interface.

мне ету абстракцию не понять
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
  1  declare
  2   v varchar2(40);
  3   rc sys_refcursor;
  4   cursor c is select cursor(select dname from dept) c from dual;
  5  begin
  6    open c;
  7    fetch c into rc;
  8    fetch rc into v;
  9    dbms_output.put_line(v);
 10    close rc;
 11    close c;
 12* end;
SQL> /
ACCOUNTING

PL/SQL procedure successfully completed.



какого типа асстракция с?

.....
stax
...
Рейтинг: 0 / 0
Декларация курсора в user type
    #39483599
Фотография env
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
stax..,

SQL reference -> CURSOR Expression ..
...
Рейтинг: 0 / 0
Декларация курсора в user type
    #39483636
stax..
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
envstax..,

SQL reference -> CURSOR Expression ..

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
FeedbackDownload
Share to:
Share to FacebookShare to TwitterShare to EmailShare to PrintShare to GmailShare to More2
Categories
Home
Master Index
Master Glossary
CURSOR Expressions
A CURSOR expression returns a nested cursor. This form of expression is equivalent to the PL/SQL REF CURSOR and can be passed as a REF CURSOR argument to a function.


и что? returns a nested cursor, который поддерживается в sql

напр неподдержки, return boolean даст ошибку, не поддерживается в SQL

.....
stax
...
Рейтинг: 0 / 0
Декларация курсора в user type
    #39483648
Фотография env
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
stax..,

Игра слов. Nested cursor - не тип данных.
...
Рейтинг: 0 / 0
Декларация курсора в user type
    #39483660
Фотография AmKad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
stax..какого типа асстракция с?Я выше попытался спросить у dump-а, но он мне не ответил .
...
Рейтинг: 0 / 0
Декларация курсора в user type
    #39483663
stax..
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
envstax..,

Игра слов. Nested cursor - не тип данных.

expression какого типа?

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
  1  declare
  2   v varchar2(40);
  3   rc number; --sys_refcursor;
  4   cursor c is select cursor(select dname from dept) c from dual;
  5  begin
  6    open c;
  7    fetch c into rc;
  8  --  fetch rc into v;
  9    dbms_output.put_line(v);
 10  --  close rc;
 11    close c;
 12* end;
SQL> /
  fetch c into rc;
               *
ERROR at line 7:
ORA-06550: line 7, column 16:
PLS-00386: type mismatch found at 'RC' between FETCH cursor and INTO variables
ORA-06550: line 7, column 3:
PL/SQL: SQL Statement ignored



cursor c is select cursor(select dname from dept) cur from dual;

у cur какой тип? игра слов?

.....
stax
...
Рейтинг: 0 / 0
Декларация курсора в user type
    #39483684
stax..
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AmKadstax..какого типа асстракция с?Я выше попытался спросить у dump-а, но он мне не ответил .
Restrictions on CURSOR Expressions
The following restrictions apply to CURSOR expressions:

If the enclosing statement is not a SELECT statement, nested cursors can appear only as REF CURSOR arguments of a procedure.

імхо, dump не перегружаєтся для "REF CURSOR"

Код: plsql
1.
2.
3.
4.
5.
SQL> select dump(cursor(select * from dual)) d from dual;
select dump(cursor(select * from dual)) d from dual
            *
ERROR at line 1:
ORA-22902: CURSOR expression not allowed



.....
stax
...
Рейтинг: 0 / 0
Декларация курсора в user type
    #39483685
Фотография env
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
stax..,

Код: plsql
1.
2.
3.
4.
select dump(cursor(select dummy from dual)) cur from dual;

22902. 00000 -  "CURSOR expression not allowed"
*Cause:    CURSOR on a subquery is allowed only in the top-level


expression, Стас, expression, интерпретируемое далее
...
Рейтинг: 0 / 0
Декларация курсора в user type
    #39483708
Фотография dbms_photoshop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AmKadstax..какого типа асстракция с?Я выше попытался спросить у dump-а, но он мне не ответил .А dbms_sql пробовал? :)
stax..expression какого типа?Если прочитать мой ответ выше, то можно перейти по ссылке и попасть на Example 6-34 CURSOR Expression.
А еще можно открыть доку по XMLtype и увидеть

Код: plaintext
1.
2.
3.
4.
5.
constructor function XMLType(
   xmlData IN SYS_REFCURSOR,
   schema in varchar2 := NULL,
   element in varchar2 := NULL,
   validated in number := 0)
return self as result deterministic;

Код: plaintext
1.
2.
3.
4.
5.
select xmltype(xmldata   => cursor (select rownum id from dual connect by level <= 2),
               schema    => null,
               element   => null,
               validated => 0) x
  from dual
...
Рейтинг: 0 / 0
Декларация курсора в user type
    #39483709
Фотография dbms_photoshop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
envstax..,

Код: plsql
1.
2.
3.
4.
select dump(cursor(select dummy from dual)) cur from dual;

22902. 00000 -  "CURSOR expression not allowed"
*Cause:    CURSOR on a subquery is allowed only in the top-level


expression, Стас, expression, интерпретируемое далееУ результата expression всегда есть тип.
Собственно cursor expression хороший пример когда цель объяснить отличия SQL vs PL/SQL static SQL.
...
Рейтинг: 0 / 0
Декларация курсора в user type
    #39483713
Фотография AmKad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dbms_photoshopА dbms_sql пробовал? :)Нет. Поленился.
...
Рейтинг: 0 / 0
Декларация курсора в user type
    #39483718
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
stax..какого типа асстракция с?Попробуй об этом спросить у SQL посредством:
dump

create view

Только http://www.oracle.com/pls/topic/lookup?ctx=db112&id=LNOCI16427]OCI provides the ability to bind and define PL/SQL REF CURSORs
...
Рейтинг: 0 / 0
Декларация курсора в user type
    #39483737
stax..
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dbms_photoshopУ результата expression всегда есть тип.


вот я и спрашиваю какой тип у етого конкретного expression?
імхо, ref cursor, который поддерживается в sql

напр bollean в ораклячем sql пока не поддерживается

.....
stax
...
Рейтинг: 0 / 0
Декларация курсора в user type
    #39483742
Фотография dbms_photoshop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
stax..вот я и спрашиваю какой тип у етого конкретного expression?Когда спрашиваешь - имеет смысл читать ответы.
stax..імхо, ref cursor, который поддерживается в sqlНу покажи как ты из него отфетчишь данные.
...
Рейтинг: 0 / 0
Декларация курсора в user type
    #39483743
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ElicТолько http://www.oracle.com/pls/topic/lookup?ctx=db112&id=LNOCI16427]OCI provides the ability to bind and define PL/SQL REF CURSORs
Правильнее - "OCI тоже может".
И Java может. http://docs.oracle.com/database/122/TDPJD/GUID-21E2370C-4D07-492D-8276-936DB7122D0F.htm#TDPJD218
И .Net http://docs.oracle.com/database/122/ODPNT/featImplRefCursor.htm#ODPNT329
Да и pl/sql не откажется.
...
Рейтинг: 0 / 0
Декларация курсора в user type
    #39483744
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dbms_photoshopНу покажи как ты из него отфетчишь данные.
Дык через table() же, не?
...
Рейтинг: 0 / 0
Декларация курсора в user type
    #39483757
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrey_anonymousИ Java может.Это параллельный Call Interface.andrey_anonymousИ .NetНасколько я понимаю, это всё равно через OCI.
andrey_anonymousДа и pl/sql не откажется.Это, грубо говоря, почти тот же OCI.
...
Рейтинг: 0 / 0
Декларация курсора в user type
    #39483759
stax..
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dbms_photoshopstax..вот я и спрашиваю какой тип у етого конкретного expression?Когда спрашиваешь - имеет смысл читать ответы.
stax..імхо, ref cursor, который поддерживается в sqlНу покажи как ты из него отфетчишь данные.

кроме читать ответы, их еще желательно понять, с чем у меня проблем

Код: plsql
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.
SQL> ed
Wrote file afiedt.buf

  1  declare
  2   v varchar2(100);
  3   sr sys_refcursor;
  4   cursor c is select dname,(cursor(select ename
  5               from emp e where e.deptno=d.deptno)) r from dept d;
  6  begin
  7   open c;
  8   loop
  9    fetch c into v,sr;
 10    EXIT WHEN c%NOTFOUND;
 11    dbms_output.put_line(v);
 12     loop
 13        FETCH sr INTO v;
 14        EXIT WHEN sr%NOTFOUND;
 15        dbms_output.put_line('--- '||v);
 16     end loop;
 17     close sr;
 18   end loop;
 19   close c;
 20* end;
SQL> /
ACCOUNTING
--- CLARK
--- KING
--- MILLER
RESEARCH
--- SMITH
--- JONES
--- SCOTT
--- ADAMS
--- FORD
SALES
--- ALLEN
--- WARD
--- MARTIN
--- BLAKE
--- TURNER
--- JAMES
OPERATIONS

PL/SQL procedure successfully completed.



....
stax
...
Рейтинг: 0 / 0
Декларация курсора в user type
    #39483762
stax..
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrey_anonymousdbms_photoshopНу покажи как ты из него отфетчишь данные.
Дык через table() же, не?

кинул пример, но мож я вопрос/ответ не понимаю

....
stax
...
Рейтинг: 0 / 0
Декларация курсора в user type
    #39483764
stax..
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Elic,

пример когда тонко не осі?

.....
stax
...
Рейтинг: 0 / 0
Декларация курсора в user type
    #39483769
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
stax..пример когда тонко не осі?Попробуй перефразировать по-русски.
...
Рейтинг: 0 / 0
Декларация курсора в user type
    #39483774
Фотография dbms_photoshop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dbms_photoshopСобственно cursor expression хороший пример когда цель объяснить отличия SQL vs PL/SQL static SQL.
stax..ref cursor, который поддерживается в sql
stax..PL/SQL procedure successfully completed.
...
Рейтинг: 0 / 0
Декларация курсора в user type
    #39483777
stax..
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Elicstax..пример когда тонко не осі?Попробуй перефразировать по-русски.
пример где ОСИ не использовалось?
о ком нельзя сказать "грубо говоря, почти тот же OCI."

....
stax
...
Рейтинг: 0 / 0
Декларация курсора в user type
    #39483787
stax..
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dbms_photoshopdbms_photoshopСобственно cursor expression хороший пример когда цель объяснить отличия SQL vs PL/SQL static SQL.
stax..ref cursor, который поддерживается в sql
stax..PL/SQL procedure successfully completed.
не понял

намекаете что ето PL/SQL?

я утверждаю что ref corsor тип который поддерживается в sql и pl/sql

пример не поддерживаемого типа в sql boolean;

ps
к стати, целостность на момент открытия выражения, а не старта селекта (аля ф-ция)
Код: plsql
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.
SQL> ed
Wrote file afiedt.buf

  1  declare
  2   e sys_refcursor;
  3   cursor c1 is select e from dual;
  4  begin
  5   open c1;
  6   close c1;
  7* end;
SQL> /

PL/SQL procedure successfully completed.

SQL> ed
Wrote file afiedt.buf

  1  declare
  2   e boolean;
  3   cursor c1 is select e from dual;
  4  begin
  5   open c1;
  6   close c1;
  7* end;
SQL> /
 cursor c1 is select e from dual;
                     *
ERROR at line 3:
ORA-06550: line 3, column 22:
PLS-00382: expression is of wrong type


....
stax
...
Рейтинг: 0 / 0
Декларация курсора в user type
    #39483816
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
stax..к стати, целостность на момент открытия выражения, а не старта селекта (аля ф-ция)Ты пишешь какой-то трудно понимаемый бред.
Но продемонстрировал ты ошибку времени компиляции.
...
Рейтинг: 0 / 0
Декларация курсора в user type
    #39483833
stax..
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Elicstax..к стати, целостность на момент открытия выражения, а не старта селекта (аля ф-ция)Ты пишешь какой-то трудно понимаемый бред.
Но продемонстрировал ты ошибку времени компиляции.
а какого еще времени, если комиляция не проходит? в execute?

что не понятно?

выражение cursor еxpression неконсистентно относительно времени старта селекта

.....
stax
...
Рейтинг: 0 / 0
Декларация курсора в user type
    #39483839
Фотография dbms_photoshop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
stax..намекаете что ето PL/SQL?Я намекаю что PL/SQL static SQL это не обычный SQL.
AmKad же уже показал, что оно валитися в обычном SQL если засунуть в inline view.
stax..пример не поддерживаемого типа в sql boolean;Смотри, у меня "поддержало".
Код: plsql
1.
2.
3.
4.
5.
6.
7.
SQL> select lnnvl(1 = 1) x from dual where not lnnvl(1 = 1);

         X
----------


SQL>


Касательно тонкостей работы, у Подера было две видео сессии типа "SQL HACKING SESSION", он там трассировал OCI и немного ковырял внутренности.
...
Рейтинг: 0 / 0
Декларация курсора в user type
    #39483844
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
stax..что не понятно?Твои мысли путаны и отягощены непонятным языком.
...
Рейтинг: 0 / 0
Декларация курсора в user type
    #39483927
stax..
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dbms_photoshopstax..намекаете что ето PL/SQL?Я намекаю что PL/SQL static SQL это не обычный SQL.
AmKad же уже показал, что оно валитися в обычном SQL если засунуть в inline view.
stax..пример не поддерживаемого типа в sql boolean;Смотри, у меня "поддержало".
Код: plsql
1.
2.
3.
4.
5.
6.
7.
SQL> select lnnvl(1 = 1) x from dual where not lnnvl(1 = 1);

         X
----------


SQL>


Касательно тонкостей работы, у Подера было две видео сессии типа "SQL HACKING SESSION", он там трассировал OCI и немного ковырял внутренности.

я не очень понимаю разницу между PL/SQL static SQL и обычным SQL.

насчет вью

авторNested cursors cannot appear in views.


lnnvl, видел етот трюк, ето скорее баг чем поддержка

The function can be used only in the WHERE clause of a query.

only я понимаю как только

.....
stax
...
Рейтинг: 0 / 0
Декларация курсора в user type
    #39483932
stax..
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Elicstax..что не понятно?Твои мысли путаны и отягощены непонятным языком.

согласен

поетому и постарался перефразировать

выражение cursor еxpression неконсистентно относительно времени старта селекта (ведет себя аналогично ф-ции)

ps
для меня английский еще более непонятен
stax..
...
Рейтинг: 0 / 0
Декларация курсора в user type
    #39483946
Фотография dbms_photoshop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
stax..я не очень понимаю разницу между PL/SQL static SQL и обычным SQL.Ну вот еще пример, про различия в "понимании типов полей select list".
Иерархический запрос завис (год работал)

А вообще на старых версиях вроде было намного больше отличий в работе SQL в PL/SQL (вроде еще использовалось словосочетение embedded SQL) и изолированно, странно что ты этого не помнишь. А смотреть Подера не хочешь и вообще английский не поманиешь. Вот и считай себе ref cursor SQL типом, я не против. :)
...
Рейтинг: 0 / 0
Декларация курсора в user type
    #39483998
stax..
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dbms_photoshopstax..я не очень понимаю разницу между PL/SQL static SQL и обычным SQL.Ну вот еще пример, про различия в "понимании типов полей select list".
Иерархический запрос завис (год работал)

А вообще на старых версиях вроде было намного больше отличий в работе SQL в PL/SQL (вроде еще использовалось словосочетение embedded SQL) и изолированно, странно что ты этого не помнишь. А смотреть Подера не хочешь и вообще английский не поманиешь. Вот и считай себе ref cursor SQL типом, я не против. :)

про Подера я проморгал ссылку
если на английском, то что его смотреть (и вообще английский не поманимаю)

.....
stax
...
Рейтинг: 0 / 0
Декларация курсора в user type
    #39484002
HOME_X
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrey_anonymousHOME_Xв целом "ХРЕН один"
Статическая компиляция существенно удобнее динамической уже потому, что отлавливает многие ошибки на этапе компиляции, а не в рантайме.

Вы правы...
...
Рейтинг: 0 / 0
Декларация курсора в user type
    #39484016
stax..
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dbms_photoshopstax..я не очень понимаю разницу между PL/SQL static SQL и обычным SQL.Ну вот еще пример, про различия в "понимании типов полей select list".
Иерархический запрос завис (год работал)

А вообще на старых версиях вроде было намного больше отличий в работе SQL в PL/SQL (вроде еще использовалось словосочетение embedded SQL) и изолированно, странно что ты этого не помнишь. А смотреть Подера не хочешь и вообще английский не поманиешь. Вот и считай себе ref cursor SQL типом, я не против. :)
embedded я наверное не правильно понимаю

ето ограничение/нюансы на использование sql в конкретной "среде"

напр в SQL добавили фичу with, а pl/sql ee понимает

.....
stax
...
Рейтинг: 0 / 0
Декларация курсора в user type
    #39484036
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
stax..embedded я наверное не правильно понимаю
Да нет, это коллега, кмк, слегка подзабыл за давностью лет.
Oracle Embedded - это был такой вариант лицензии на oracle во времена 10g.
Отличался тем, что ПО Oracle можно было распространять исключительно в составе дистрибутива приложения и абсолютно все операции с БД (включая развертывание и администрирование) должны были проходить через приложение, в которое "встроен" сервер.
Даже SQL*Plus нельзя... Зато дешево :)
...
Рейтинг: 0 / 0
Декларация курсора в user type
    #39484055
Фотография dbms_photoshop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
stax..dbms_photoshopпропущено...
Ну вот еще пример, про различия в "понимании типов полей select list".
Иерархический запрос завис (год работал)

А вообще на старых версиях вроде было намного больше отличий в работе SQL в PL/SQL (вроде еще использовалось словосочетение embedded SQL) и изолированно, странно что ты этого не помнишь. А смотреть Подера не хочешь и вообще английский не поманиешь. Вот и считай себе ref cursor SQL типом, я не против. :)
embedded я наверное не правильно понимаю

ето ограничение/нюансы на использование sql в конкретной "среде"

напр в SQL добавили фичу with, а pl/sql ee понимает

.....
staxЯ возможно неверно использовал "embedded".
Имелось в виду функциональные различия для "независимого" SQL и описанного в PL/SQL (не говоря уже про различия под капотом).
Где-то попадалось что-то в духе "ну вот с этой версии SQL в PL/SQL такой же как вне его".
Есть в доке раздел Overview of SQL Support in PL/SQL , но я немного не это искал.
...
Рейтинг: 0 / 0
Декларация курсора в user type
    #39484058
Фотография dbms_photoshop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrey_anonymousstax..embedded я наверное не правильно понимаю
Да нет, это коллега, кмк, слегка подзабыл за давностью лет.
Oracle Embedded - это был такой вариант лицензии на oracle во времена 10g.
Отличался тем, что ПО Oracle можно было распространять исключительно в составе дистрибутива приложения и абсолютно все операции с БД (включая развертывание и администрирование) должны были проходить через приложение, в которое "встроен" сервер.
Даже SQL*Plus нельзя... Зато дешево :)Ничессе.
Под Oracle Embeddable Databases я понимал всегда Oracle Berkeley DB.
Там предельно понятно как "распростанять СУБД в составе приложения".
Но мы еще больше запутали и без того запутаннай топик.
...
Рейтинг: 0 / 0
Декларация курсора в user type
    #39484060
stax..
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrey_anonymousstax..embedded я наверное не правильно понимаю
Да нет, это коллега, кмк, слегка подзабыл за давностью лет.
Oracle Embedded - это был такой вариант лицензии на oracle во времена 10g.
Отличался тем, что ПО Oracle можно было распространять исключительно в составе дистрибутива приложения и абсолютно все операции с БД (включая развертывание и администрирование) должны были проходить через приложение, в которое "встроен" сервер.
Даже SQL*Plus нельзя... Зато дешево :)
хз

первая ссылка из гугля
Home / Database / Oracle Database Online Documentation 11g Release 1 ( 11.1 ) / Application Development

Pro*COBOL® Programmer's Guide
Embedded SQL

мне английские нюансы понять трудно

.....
stax
...
Рейтинг: 0 / 0
Декларация курсора в user type
    #39484066
stax..
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dbms_photoshopstax..пропущено...

embedded я наверное не правильно понимаю

ето ограничение/нюансы на использование sql в конкретной "среде"

напр в SQL добавили фичу with, а pl/sql ee понимает

.....
staxЯ возможно неверно использовал "embedded".
Имелось в виду функциональные различия для "независимого" SQL и описанного в PL/SQL (не говоря уже про различия под капотом).
Где-то попадалось что-то в духе "ну вот с этой версии SQL в PL/SQL такой же как вне его".
Есть в доке раздел Overview of SQL Support in PL/SQL , но я немного не это искал.
embedded я понимал как нюансы/ограничения реализации sql

.....
stax
...
Рейтинг: 0 / 0
Декларация курсора в user type
    #39484088
Фотография --Eugene--
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AmKadstax..какого типа асстракция с?Я выше попытался спросить у dump-а, но он мне не ответил .
Код: plsql
1.
2.
3.
4.
5.
SQL> select dump(data_default) from user_tab_columns where rownum = 1;
select dump(data_default) from user_tab_columns where rownum = 1
            *
ERROR at line 1:
ORA-00997: illegal use of LONG datatype

типа LONG тоже нет в SQL*
------------------------------------------
* по мнению функции DUMP()
...
Рейтинг: 0 / 0
Декларация курсора в user type
    #39484093
Фотография --Eugene--
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
stax..The following restrictions apply to CURSOR expressions:
If the enclosing statement is not a SELECT statement, nested cursors can appear only as REF CURSOR arguments of a procedure.
The enclosing statement *is not* a SELECT statement :)
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
SQL> create table t(a number);

Table created.

SQL> create or replace function f(x sys_refcursor)
  2  return number
  3  as
  4  begin
  5     return 1;
  6  end;
  7  /

Function created.

SQL> insert into t(a) values (f(cursor(select 1 from dual)));

1 row created.

SQL> commit;

Commit complete.
...
Рейтинг: 0 / 0
Декларация курсора в user type
    #39484218
stax..
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
--Eugene--AmKadпропущено...
Я выше попытался спросить у dump-а, но он мне не ответил .
Код: plsql
1.
2.
3.
4.
5.
SQL> select dump(data_default) from user_tab_columns where rownum = 1;
select dump(data_default) from user_tab_columns where rownum = 1
            *
ERROR at line 1:
ORA-00997: illegal use of LONG datatype

типа LONG тоже нет в SQL*
------------------------------------------
* по мнению функции DUMP()

с чего такой вывод?
я наоборот считаю, DUMP "перегружается" (определена) не для всех типов

.....
stax
...
Рейтинг: 0 / 0
Декларация курсора в user type
    #39484221
stax..
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
--Eugene--stax..The following restrictions apply to CURSOR expressions:
If the enclosing statement is not a SELECT statement, nested cursors can appear only as REF CURSOR arguments of a procedure.
The enclosing statement *is not* a SELECT statement :)
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
SQL> create table t(a number);

Table created.

SQL> create or replace function f(x sys_refcursor)
  2  return number
  3  as
  4  begin
  5     return 1;
  6  end;
  7  /

Function created.

SQL> insert into t(a) values (f(cursor(select 1 from dual)));

1 row created.

SQL> commit;

Commit complete.


не понял
Гугл перевел так

Если заключенный оператор не является оператором SELECT, вложенные курсоры могут отображаться только как аргументы REF CURSOR процедуры

или Вы о баге в доке
только в процедуре, а Вы использовали в функции, не в процедуре

.....
stax
...
Рейтинг: 0 / 0
Декларация курсора в user type
    #39484343
Бракованный финский угорь
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
stax..только в процедуре, а Вы использовали в функции, не в процедуре
Какой же ты нудный.
...
Рейтинг: 0 / 0
Декларация курсора в user type
    #39484349
stax..
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Бракованный финский угорьstax..только в процедуре, а Вы использовали в функции, не в процедуре
Какой же ты нудный.

есть немножко

.....
stax
...
Рейтинг: 0 / 0
Декларация курсора в user type
    #39484357
Фотография --Eugene--
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
stax..есть немножко да, я о "процедуре" ))
можно иногда хоть немного посмеяться?
а эти сразу начинают: "какой ты нудный.. бла бла..."
...
Рейтинг: 0 / 0
72 сообщений из 72, показаны все 3 страниц
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Декларация курсора в user type
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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