powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / EXCEPTION Not Found для REF CURSORа
10 сообщений из 10, страница 1 из 1
EXCEPTION Not Found для REF CURSORа
    #39703398
chernvj
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день !
Понадобилась необхлдимость для одного
из веб сервисов использовать REF CURSOR.
Возвращается множество значений.
И тут выясняется, что исключительная ситуация
NOT FOUND для REF CURSORа - не катит.

BEGIN

-- XXX - это REF CURSOR

open XXX for
select r.pole as pole
from ......... длинющий запрос

EXCEPTION
WHEN NO_DATA_FOUND THEN

open XXX for
SELECT
'Dates not Found!' as pole FROM DUAL;
END;

Не возвращается ничего.

Кто-нибудь знает как в отношении REF CURSORа вернуть то, что
мне надо, если данных нет ?
...
Рейтинг: 0 / 0
EXCEPTION Not Found для REF CURSORа
    #39703417
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
chernvjNOT FOUND для REF CURSORа - не катит. Катит, как атрибут курсора после fetch.
...
Рейтинг: 0 / 0
EXCEPTION Not Found для REF CURSORа
    #39703419
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
chernvj,

обрабатывается примерно так
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
open c ...
   loop
    fetch c into r;
    if c%notfound then exit; end if;
      --обработка записи
      --dbms_output.put_line(r.);
   end loop;
close c;



или Вам надо сгенерить исключение?

.....
stax
...
Рейтинг: 0 / 0
EXCEPTION Not Found для REF CURSORа
    #39703431
chernvj
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> или Вам надо сгенерить исключение?

Да, мне надо вернуть назад сообщение
"Данные не найдены"
...
Рейтинг: 0 / 0
EXCEPTION Not Found для REF CURSORа
    #39703437
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
chernvj надо вернуть назад сообщение
"Данные не найдены"Правильный джоин на дуал. Но подход заведомо ущербный, интерпретировать стандартный результат потребителем универсальнее и дешевле.
...
Рейтинг: 0 / 0
EXCEPTION Not Found для REF CURSORа
    #39703473
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
chernvj,
Код: 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.
  1  declare
  2   exc_100 exception;
  3   pragma exception_init(exc_100,100);
  4   v varchar(200);
  5   c sys_refcursor;
  6  begin
  7   open c for select ename from emp where deptno=11; --10
  8   fetch c into v;
  9   if c%notfound then raise exc_100; end if;
 10   while c%found loop
 11     dbms_output.put_line(v);
 12     fetch c into v;
 13   end loop;
 14   close c;
 15* end;
SQL> /
declare
*
ERROR at line 1:
ORA-01403: no data found
ORA-06512: at line 9


  1  declare
  2   exc_100 exception;
  3   pragma exception_init(exc_100,100);
  4   v varchar(200);
  5   c sys_refcursor;
  6  begin
  7   open c for select ename from emp where deptno=10;
  8   fetch c into v;
  9   if c%notfound then raise exc_100; end if;
 10   while c%found loop
 11     dbms_output.put_line(v);
 12     fetch c into v;
 13   end loop;
 14   close c;
 15* end;
SQL> /
CLARK
KING
MILLER

PL/SQL procedure successfully completed.



.....
stax
...
Рейтинг: 0 / 0
EXCEPTION Not Found для REF CURSORа
    #39703477
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Stax
Код: plsql
1.
2.
  2   exc_100 exception;
  3   pragma exception_init(exc_100,100);

Делать нечего?
=NO_DATA_FOUND
...
Рейтинг: 0 / 0
EXCEPTION Not Found для REF CURSORа
    #39703694
chernvj
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> ERROR at line 1:
> ORA-01403: no data found
> ORA-06512: at line 9

он то, конечно, хорошо, но не совсем то что надо.
Я не ошибку должен вернуть, а вместо отсутствующего
значения - строку: "Данных нет"
...
Рейтинг: 0 / 0
EXCEPTION Not Found для REF CURSORа
    #39703769
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ситуацию NO_DATA_FOUND обрабатывает тот кто читает данные. Зaбудь про NO_DATA_FOUND на минутку. Что делает веб сервис с курсором XXX? Читает данные, не так-ли? И что происходит когда очередной fetch выдает NO_DATA_FOUND? Код понимает что все - бльше данных нет. Так что мешает коду вести, например, счет прочитанных строк и если при возникновении NO_DATA_FOUND счет ноль то присвоись переменной куда читается pole значение 'Dates not Found!'? А потуги с 'Dates not Found!' и открытием курсора уместны ну разве тоько если код по каким-то причинам (например код от вендора) трогать нельзя. Тогда приходится ваять что-то типа:

Код: 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.
SQL> create table test_table
  2  as select * from dual
  3  /

Table created.

SQL> variable xxx refcursor
SQL> BEGIN
  2  open :XXX for
  3  select * from test_table
  4  union all
  5  select  'No Data Found!'
  6    from  dual
  7    where 0 = (select count(*) from test_table);
  8  END;
  9  /

PL/SQL procedure successfully completed.

SQL> print xxx

DUMMY
--------------
X

SQL> truncate table test_table
  2  /

Table truncated.

SQL> BEGIN
  2  open :XXX for
  3  select * from test_table
  4  union all
  5  select  'No Data Found!'
  6    from  dual
  7    where 0 = (select count(*) from test_table);
  8  END;
  9  /

PL/SQL procedure successfully completed.

SQL> print xxx

DUMMY
--------------
No Data Found!

SQL> 



SY.
...
Рейтинг: 0 / 0
EXCEPTION Not Found для REF CURSORа
    #39703783
chernvj
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>SQL> BEGIN
> 2 open :XXX for
> 3 select * from test_table
> 4 union all
> 5 select 'No Data Found!'
> 6 from dual
> 7 where 0 = (select count(*) from test_table);
> 8 END;
> 9 /

Прикольно.
Буду перевартвать всю полученную информацию.

Спасибо
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / EXCEPTION Not Found для REF CURSORа
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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