首页 > 解决方案 > 触发器中的调用函数

问题描述

所以我有一个返回saldo的函数。它看起来像这样:

create or replace function get_saldo(
p_knr in konto.knr%type)
return number
as
v_saldo konto.saldo%type;
begin
select saldo
into v_saldo
from konto
where knr = p_knr;
return v_saldo;
exception
when no_data_found then
return -1;
end;

我的触发器应该调用 get_saldo 并检查插入到提款表中的金额是否不超过账户上的钱。到目前为止,我的触发器看起来像这样:

create or replace trigger bifer_överföring 
before update or insert 
of belopp
on insättning
for each row 
begin 
if (:new.belopp < get_saldo(p_knr)) then 
raise_application_error(-20001,'Överföringssumman är högre
än vad som finns på kontot'); 
end if; 
end;

希望你们明白我的意思。这是我们需要使用存储过程的学校任务。我对存储过程很陌生,我似乎真的无法掌握它。

标签: sqloracle

解决方案


对我来说看起来不错,除了这个:

if (:new.belopp < get_saldo(p_knr)) then 
                            -----

你应该向函数传递一些东西;它不能p_knr只是类似的东西:new.knr(或表中存在的任何列insättning并且可用于计算saldo)。


推荐阅读