Что-то вроде этого, возможно?
- Если первая функция не сработает, она повысит 20000.
- В противном случае проверьте, что возвращает вторая;если это не удастся, поднимите 20001.
- Если ни один из них не сработает, выполните
INSERT
. Я изменил коды ошибок, которые вы вернули, чтобы вы могли различить эти два.Использовать 20001 для обоих случаев не является ошибкой, но - зачем вам это?
create or replace procedure do_gymbesök(
p_rfid in gymbesök.rfid%type,
p_gymid in number)
as
begin
if get_behörighet (p_gymid, p_rfid) = 0 then
raise_application_error (-20000, 'Öbehörig');
elsif get_träningspass(p_antal) = 0 then
raise_application_error (-20001, 'Inga träningspass kvar');
end if;
insert into gymbesök (radnr,rfid,gymid,datum)
values (radnr_seq.nextval, p_rfid, p_gymid, sysdate);
end;
/
В качестве альтернативы используйте одно условие IF
с OR
:
create or replace procedure do_gymbesök(
p_rfid in gymbesök.rfid%type,
p_gymid in number)
as
begin
if get_behörighet (p_gymid, p_rfid) = 0 or
get_träningspass(p_antal) = 0
then
raise_application_error (-20001, 'Öbehörig / Inga träningspass kvar');
else
insert into gymbesök (radnr,rfid,gymid,datum)
values (radnr_seq.nextval, p_rfid, p_gymid, sysdate);
end if;
end;
/