触发-无法提取超过当前余额的余额-使用中的功能不正确?

时间:2018-10-12 18:57:40

标签: sql oracle

因此,正如标题所述,我试图组装触发器,以确保您不能提取超过当前余额的款项。

 Translation;
 Saldo = balance
 Belopp = amount


Create or replace trigger bifer_uttag
 before insert
 on UTTAG
 for each row
 begin
   IF get_saldo  (:new.belopp > :old.belopp)
   Then 
     raise_applicaton_error( -20001, 'snålt saldo!');
   end if;
 end;

但是我得到了

所以我想我的函数(Get_saldo)调用了它吗?

create or replace function get_saldo(
p_knr in kontotest.knr%type
)
return number                    
as
v_saldo number := 0 ;
begin
  select sum( saldo) 
   into v_saldo
   from konto                    
   where knr = p_knr ;
  return v_saldo ;
end;
/

感谢任何帮助。

更新,获取错误:TRIGGER BIFER_UTTAG行/行:2/2 PL / SQL:语句被忽略行/行:2/5 PLS-00306:调用'GET_SALDO'时参数或参数类型错误< / strong>

2 个答案:

答案 0 :(得分:1)

您需要将帐号传递给函数调用,然后进行比较-

Create or replace trigger bifer_uttag
 before insert
 on UTTAG
 for each row
 begin
 IF get_saldo(:new.knr) > :new.belopp
 Then 
 raise_applicaton_error( -20001, snålt saldo!');
 end if;
 end;

答案 1 :(得分:1)

CREATE OR replace TRIGGER bifer_uttag 
  BEFORE INSERT ON uttag 
  FOR EACH ROW 
BEGIN 
    IF get_saldo(:new.knr) > :new.belopp THEN 
      Raise_application_error(-20001, 'snålt saldo!'); 
    END IF; 
END;