Member 13067941 Ответов: 1

Как выйти из выполнения программы pl / SQL из триггера без использования каких-либо исключений или инструкций raise error. Я хочу выйти нормально, как успешно завершенная процедура PL/SQL.


Я хотел бы знать, главным образом, есть ли какая-либо возможность выйти из полного выполнения программы pl/sql внутри триггера. Это не должно быть похоже ни на какое raise_application_error () или исключение. Это должно быть похоже на оператор return в обычной программе pl/sql. Так что пожалуйста помогите мне как я мог выход в триггере вручную между кодом.

Что я уже пробовал:

Я попытался использовать raise_application_error (), но в этом случае он завершается ненормально, но я хочу, чтобы оператор insert не выполнялся, если условие ложно в триггере before insert. Я попробовал исключение, но оно выполняет оператор insert, который присутствует в другой программе, на которой должен быть выполнен триггер.

1 Ответов

Рейтинг:
2

RAMASWAMY EKAMBARAM

Напишите такой триггер:

create or replace 
trigger <triggername>
before update on <tablename>
for each row
declare
    isexception number := 0;
begin
    begin
        <sql statements that may cause exception>
    exception
        when others then 
            isexception := 1;
    end;
/* the exception is handled in the NESTED begin-exception-end block
and you can exit normally
*/
end;


Пример процедуры, в которой выполнение продолжается после деления на ноль, так как исключение обрабатывается во внутреннем блоке

create or replace
procedure testexcept
as
i number := 0;
five constant number := 5;
begin
	for i in 1 .. 10 
	loop
		begin
			dbms_output.put_line('5 / (' || i || ' - 5)  ' || five / (i - five));
		exception
			when others then
				dbms_output.put_line('inner exeption -  divide by zero error!!');
		end;
	end loop;
end testexcept
;