Вам необходимо указать значение для p_custno
Я использовал псевдоним NEW
по умолчанию, но см. здесь для информации о триггере, также у Рене Найффенггера есть хорошее объяснение изNEW
и OLD
использование:
create or replace
trigger bifer_withdrawal
before insert on withdrawal
for each row
begin
if get_balance(:NEW.custno) <= amount
then
raise_application_error(-20001, 'Not enough money in account!');
end if;
end;
/
Вам нужно будет указать, что такое AMOUNT
.Если это переменная, объявите ее между операторами FOR EACH ROW
и BEGIN
:
например:
create or replace
trigger bifer_withdrawal
before insert on withdrawal
for each row
declare
c_amount CONSTANT account.balance%TYPE := 5000; -- Whatever limit you need
begin
if get_balance(:NEW.custno) <= c_amount
then
raise_application_error(-20001, 'Not enough money in account!');
end if;
end;
/
Вы должны спросить себя, нужно ли вызывать функцию?Вы можете легко поместить курсор в триггер и сохранить вызов функции.Ваш ответ будет зависеть от того, хотите ли вы использовать эту функцию в другом месте и т. Д.Я не защищаю один путь по другому, но это то, что нужно учитывать.
Надеюсь, это поможет ...
РЕДАКТИРОВАТЬ: после двух комментариев ниже, если AMOUNT
является столбцомв таблице WITHDRAWAL
затем:
create or replace
trigger bifer_withdrawal
before insert on withdrawal
for each row
begin
if get_balance(:NEW.custno) <= :NEW.amount
then
raise_application_error(-20001, 'Not enough money in account!');
end if;
end;
/