Обработка исключений PL / SQL с помощью процедур - PullRequest
0 голосов
/ 08 мая 2011
create or replace procedure UPD_DEP 
    (dd_name in dept.dname%type, --department which has to be updated
    d_name in dept.dname%type)   --name to which the first parameter has to be updated 
is 
abc_exception exception;
begin
if (dname<>dd_name) THEN
  raise abc_exception; 
end if;
update dept
set dname=d_name
where dname=dd_name;  
commit;
EXCEPTION
WHEN  abc_exception THEN
dbms_output.put_line('department not present which u want to be updated');
end upd_dep;

Ошибка в строке 9: PL / SQL: оператор игнорируется

  • 7 if (dname <> dd_name) THEN (строка 7)
  • 8 повысить abc_exception;(строка 8)
  • 9 заканчивается если;(строка 9)
  • 10 отдел обновления (строка 10)
  • 11 set dname = d_name (строка 11)

1 Ответ

4 голосов
/ 08 мая 2011

В строке 7 вы указываете dname как переменную, но переменная с таким именем отсутствует.Мое первое предположение состояло в том, что вы имели в виду d_name, второй параметр функции, но это не имеет смысла, поскольку вы бы тогда пропустили обновление, если два значения не будут равны.

На основена том, что вы делаете в обработчике исключений, я предполагаю, что if - это попытка проверить, существуют ли строки для обновления, а dname - это попытка сослаться на фактический столбец в таблице.Но вы не можете просто ссылаться на столбцы таблицы в середине кода PL / SQL - как компилятор должен понимать эту ссылку?

Кроме того, лучший способ проверить, повлияет ли обновление на какое-либостроки, чтобы сделать это и проверить результат.

create or replace procedure UPD_DEP
(dd_name in dept.dname%type, --department which has to be updated
d_name in dept.dname%type) --name to which the first parameter has to be updated
is
begin

update dept
set dname=d_name
where dname=dd_name;

if SQL%FOUND then
  commit;
else
  dbms_output.put_line('department not present which u want to be updated');
end if;

end upd_dep;
...