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

Откуда: Боярышник
Сообщений: 2075
+
SQL>create table tmp$tab1 as
  2  select level a from dual connect by level <= 3
  3  /

Table created.

SQL>select * from tmp$tab1
  2  /
         A
----------
         1
         2
         3

SQL>declare
  2     cursor c is
  3             select *
  4                     from tmp$tab1;
  5     type t is table of c%rowtype;
  6     r c%rowtype;
  7     v t;
  8     v_isopen boolean;
  9     v_rowcount pls_integer;
10     v_found boolean;
11     v_notfound boolean;
12  begin
13     open c;
14     fetch c into r;
15     v_isopen := sql%isopen;
16     v_rowcount := sql%rowcount;
17     v_found := sql%found;
18     v_notfound := sql%notfound;
19     dbms_output.put_line('sql%isopen='||case when v_isopen is null then 'null' when v_isopen then 'true' else 'false' end);
20     dbms_output.put_line('sql%rowcount='||v_rowcount);
21     dbms_output.put_line('sql%found='||case when v_found is null then 'null' when v_found then 'true' else 'false' end);
22     dbms_output.put_line('sql%notfound='||case when v_notfound is null then 'null' when v_notfound then 'true' else 'false' end);
23  end;
24  /
sql%isopen=false
sql%rowcount=
sql%found=null
sql%notfound=null

PL/SQL procedure successfully completed.

SQL>select * from v$version
  2  /
BANNER                                                                               CON_ID
-------------------------------------------------------------------------------- ----------
Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production              0
PL/SQL Release 12.2.0.1.0 - Production                                                    0
CORE    12.2.0.1.0      Production                                                                0
TNS for Linux: Version 12.2.0.1.0 - Production                                            0
NLSRTL Version 12.2.0.1.0 - Production                                                    0
Не мог бы кто-нибудь прокомментировать почему курсор может не открываться, но и ошибки я не вижу?
Возможно, что-то делаю не так?
Мне показалось, это не то поведение, которое описано в доке.
7 дек 18, 15:24    [21757149]     Ответить | Цитировать Сообщить модератору
 Re: Named Cursor Attributes  [new]
SY
Member

Откуда: Middlebury, CT USA
Сообщений: 9219
ROWCOUNT, FOUND, NOTFOUND = NULL до первого FETCH.

SY.
7 дек 18, 15:30    [21757156]     Ответить | Цитировать Сообщить модератору
 Re: Named Cursor Attributes  [new]
SY
Member

Откуда: Middlebury, CT USA
Сообщений: 9219
SY
ROWCOUNT, FOUND, NOTFOUND = NULL до первого FETCH.

SY.


И доку на которую ты ссылаешься ты причел по диагонали:

%FOUND

named_cursor%FOUND has one of these values:

If the cursor is not open, INVALID_CURSOR

If cursor is open but no fetch was tried, NULL.

If the most recent fetch returned a row, TRUE.

If the most recent fetch did not return a row, FALSE.

SY.
7 дек 18, 15:32    [21757158]     Ответить | Цитировать Сообщить модератору
 Re: Named Cursor Attributes  [new]
sharkerr
Member

Откуда:
Сообщений: 39
v_isopen := sql%isopen;

А почему через sql%, у вас же явный курсор или тут какой-то другой смысл?
7 дек 18, 15:37    [21757163]     Ответить | Цитировать Сообщить модератору
 Re: Named Cursor Attributes  [new]
ma1tus
Member

Откуда:
Сообщений: 599
автор
v_isopen := sql%isopen;
Implicit Cursors
в доке.(ц)
6.2.1.1 SQL%ISOPEN Attribute: Is the Cursor Open?
SQL%ISOPEN always returns FALSE, because an implicit cursor always closes after its associated statement runs.
7 дек 18, 15:38    [21757164]     Ответить | Цитировать Сообщить модератору
 Re: Named Cursor Attributes  [new]
saxarock
Member

Откуда: ЕКБ
Сообщений: 152
--Eugene--,

declare
     cursor c is
             select *
                   from tmp$tab1;
    type t is table of c%rowtype;
    r t;
    
    --v t;
    
    v_isopen boolean;
    v_rowcount pls_integer;
    v_found boolean;
    v_notfound boolean;
  begin
    open c;
     fetch c bulk collect into r;
     v_isopen := c%isopen;
     v_rowcount := c%rowcount;
     v_found := c%found;
     v_notfound := c%notfound;
     dbms_output.put_line('sql%isopen='||case when v_isopen is null then 'null' when v_isopen then 'true' else 'false' end);
     dbms_output.put_line('sql%rowcount='||v_rowcount);
     dbms_output.put_line('sql%found='||case when v_found is null then 'null' when v_found then 'true' else 'false' end);
     dbms_output.put_line('sql%notfound='||case when v_notfound is null then 'null' when v_notfound then 'true' else 'false' end);
  end;


sql%isopen=true
sql%rowcount=3
sql%found=false
sql%notfound=true
7 дек 18, 15:39    [21757166]     Ответить | Цитировать Сообщить модератору
 Re: Named Cursor Attributes  [new]
saxarock
Member

Откуда: ЕКБ
Сообщений: 152
--Eugene--,

У тебя же явный курсор:
cursor c is
             select *
                   from tmp$tab1;
7 дек 18, 15:40    [21757172]     Ответить | Цитировать Сообщить модератору
 Re: Named Cursor Attributes  [new]
--Eugene--
Member

Откуда: Боярышник
Сообщений: 2075
sharkerr
А почему через sql%, у вас же явный курсор или тут какой-то другой смысл?
а потому что я ступил. прошу прощения.
вопрос снят
7 дек 18, 15:42    [21757174]     Ответить | Цитировать Сообщить модератору
 Re: Named Cursor Attributes  [new]
SY
Member

Откуда: Middlebury, CT USA
Сообщений: 9219
saxarock
--Eugene--,

У тебя же явный курсор:


Сути не меняет - NULL до первого FETCH.

SY.
7 дек 18, 15:48    [21757193]     Ответить | Цитировать Сообщить модератору
 Re: Named Cursor Attributes  [new]
andrey_anonymous
Member

Откуда: Москва
Сообщений: 16897
SY
saxarock
--Eugene--,

У тебя же явный курсор:

Сути не меняет

Наоборот, именно в этом вся суть затруднений ТС.
А fetch у него в тесте, если присмотреться, вполне себе присутствует.
7 дек 18, 16:30    [21757281]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить