Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 Определить количество записей, которое вернулось в SYS_REFCURSOR  [new]
Matrix_
Guest
11-я версия:
declare
  cr sys_refcursor;
begin
  open cr for
    select * from dual;
  dbms_output.put_line(cr%rowcount);   
end;

rowcount возвращает 0
а мне надо определить, вернулись ли записи.
Можно конечно:
1. сначала тупо проверить есть ли они отдельным запросом
2. можно в курсоре вернуть на одну запись больше и сделать один фетч, но тоже извращение же
15 янв 14, 09:27    [15416744]     Ответить | Цитировать Сообщить модератору
 Re: Определить количество записей, которое вернулось в SYS_REFCURSOR  [new]
123йй
Member

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

STFF
15 янв 14, 09:29    [15416752]     Ответить | Цитировать Сообщить модератору
 Re: Определить количество записей, которое вернулось в SYS_REFCURSOR  [new]
Matrix_
Guest
123йй, ну это вариация на тему второго озвученного мной варианта - я неверно сформулировал вопрос - мне надо не вол-во записей, а вообще есть ли они в принципе. Вариант с count в самом запросе не отменяет геморроя с необходимостью сделать фетч курсора, объявлять для этого соответствующую структуру в процедуре не охота.
Значит остается отдельным запросом.
Спасибо.
15 янв 14, 09:34    [15416775]     Ответить | Цитировать Сообщить модератору
 Re: Определить количество записей, которое вернулось в SYS_REFCURSOR  [new]
Долбоящер
Guest
Необходимо понять, что sys_refcursor не достаёт, не ищет, не проверяет, не возвращает записи, их возвращает fetch
15 янв 14, 09:39    [15416792]     Ответить | Цитировать Сообщить модератору
 Re: Определить количество записей, которое вернулось в SYS_REFCURSOR  [new]
Matrix_
Guest
Долбоящер, это да. На самом деле, решил проще.
Изначально наткнулся на такой код (упрощенно):
...
open cr for
 select fld from tab
  where dat = p_dat;
if cr%rowcount=0 then
  open cr for
    select null fld from dual;  
end if;
return cr;
...


Пока переписал так:

...
open cr for
 select t.fld 
   from tab t,
          (select p_dat dat from dual) d
     where d.dat = t.dat(+);
return cr;
...

Вроде это немного лучше выполняет то, что задумывалось автором )
15 янв 14, 09:49    [15416825]     Ответить | Цитировать Сообщить модератору
 Re: Определить количество записей, которое вернулось в SYS_REFCURSOR  [new]
-2-
Member

Откуда:
Сообщений: 15330
Matrix_
мне надо не вол-во записей, а вообще есть ли они в принципе.
scrollable cursor или буферизация одной строки.
15 янв 14, 09:55    [15416846]     Ответить | Цитировать Сообщить модератору
 Re: Определить количество записей, которое вернулось в SYS_REFCURSOR  [new]
Грустный админ
Guest
Matrix_,

Так подойдет?

for r in (select fld from tab where dat = p_dat and rownum = 1)
loop
    do_something;
end loop;
15 янв 14, 12:00    [15417665]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить