sql - 触发器中的调用函数
问题描述
所以我有一个返回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;
希望你们明白我的意思。这是我们需要使用存储过程的学校任务。我对存储过程很陌生,我似乎真的无法掌握它。
解决方案
对我来说看起来不错,除了这个:
if (:new.belopp < get_saldo(p_knr)) then
-----
你应该向函数传递一些东西;它不能p_knr
只是类似的东西:new.knr
(或表中存在的任何列insättning
并且可用于计算saldo)。
推荐阅读
- rust - 为什么 std::rc::Rc 可以调用自己的值的方法?
- oracle - Postgres 到 Oracle 数据迁移,无需第三方软件
- java - 带有viewpager和毕加索的应用程序不断停止
- python - 使用 SQLAlchemy 引擎将 Pandas 数据帧保存到 SQLite3 DB
- c++ - 使用已编译的 gcc 编译我的代码,但找不到某些头文件
- php - json解码变成数组到字符串的转换
- c - 为什么 fscanf 只从文件中读取一个字符串的第一个单词
- c++ - 游戏时间步长上的灯光师:std::chrono implementation
- python - 每n步执行一次while循环
- reactjs - Api 调用从应用程序中给出 204