Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Oracle [игнор отключен] [закрыт для гостей] / EXCEPTION Not Found для REF CURSORа / 10 сообщений из 10, страница 1 из 1
17.09.2018, 10:26
    #39703398
chernvj
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
EXCEPTION Not Found для REF CURSORа
Добрый день !
Понадобилась необхлдимость для одного
из веб сервисов использовать 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
17.09.2018, 10:42
    #39703417
-2-
-2-
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
EXCEPTION Not Found для REF CURSORа
chernvjNOT FOUND для REF CURSORа - не катит. Катит, как атрибут курсора после fetch.
...
Рейтинг: 0 / 0
17.09.2018, 10:45
    #39703419
Stax
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
EXCEPTION Not Found для REF CURSORа
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
17.09.2018, 11:03
    #39703431
chernvj
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
EXCEPTION Not Found для REF CURSORа
> или Вам надо сгенерить исключение?

Да, мне надо вернуть назад сообщение
"Данные не найдены"
...
Рейтинг: 0 / 0
17.09.2018, 11:12
    #39703437
-2-
-2-
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
EXCEPTION Not Found для REF CURSORа
chernvj надо вернуть назад сообщение
"Данные не найдены"Правильный джоин на дуал. Но подход заведомо ущербный, интерпретировать стандартный результат потребителем универсальнее и дешевле.
...
Рейтинг: 0 / 0
17.09.2018, 11:47
    #39703473
Stax
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
EXCEPTION Not Found для REF CURSORа
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
17.09.2018, 11:51
    #39703477
Elic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
EXCEPTION Not Found для REF CURSORа
Stax
Код: plsql
1.
2.
  2   exc_100 exception;
  3   pragma exception_init(exc_100,100);

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

он то, конечно, хорошо, но не совсем то что надо.
Я не ошибку должен вернуть, а вместо отсутствующего
значения - строку: "Данных нет"
...
Рейтинг: 0 / 0
17.09.2018, 17:07
    #39703769
SY
SY
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
EXCEPTION Not Found для REF CURSORа
Ситуацию 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
17.09.2018, 17:29
    #39703783
chernvj
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
EXCEPTION Not Found для REF CURSORа
>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
Форумы / Oracle [игнор отключен] [закрыт для гостей] / EXCEPTION Not Found для REF CURSORа / 10 сообщений из 10, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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