Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2008/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 触发器中的调用函数_Sql_Oracle - Fatal编程技术网

Sql 触发器中的调用函数

Sql 触发器中的调用函数,sql,oracle,Sql,Oracle,所以我有一个返回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

所以我有一个返回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;
创建或替换触发器biferöverföring
在更新或插入之前
贝洛普的
论insättning
每行
开始
如果(:new.belopp

希望你们能理解我的意思。这是一项学校任务,我们需要使用存储过程。我对存储过程非常陌生,我似乎真的不懂它的窍门。

在我看来还行,除了以下几点:

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

你应该把一些东西传递给函数;它不能是
p_knr
,而是类似于
:new.knr
(或者
insättning
表中存在的可用于计算saldo的列)。

问题是什么。触发器中不存在名为
p_knr
的变量。2.如果您想在金额高于saldo的情况下引发错误,则需要
:new.belopp>get_saldo
,而不是
:new.belopp
。3.如果帐户不存在,则返回-1的saldo。-1不是有效的萨尔多吗?我认为引发异常或至少返回null将是更好的反应。4.如果使用缩进,代码的可读性会更高。