下面的pl SQL脚本将金额c从帐户a转移到b。为什么不允许更新函数中的表/如何对其进行修复?
create or replace function ueberweisung (a varchar2, b varchar2,c number)
RETURN varchar2 IS
k1 number; -- Variablendeklaration
k2 number;
BEGIN
SELECT saldo into k1
FROM konto
WHERE konto_nr=a;
SELECT saldo into k2
FROM konto
WHERE konto_nr=b;
k1:=k1-c;
k2:=k2+c;
update konto
set saldo = case
when konto_nr=a then k1
when konto_nr=b then k2
end;
commit;
RETURN (c ||'Eur überwiesen von Konto ' || a || 'a uf Konto ' || b);
END ueberweisung;
答案 0 :(得分:1)
它是Restrictions on PL/SQL Functions
的一部分为了防止令人讨厌的副作用和可预测的行为,Oracle服务器使您在SQL中的存储函数无法采取以下任何操作:存储函数可能无法修改数据库表 。
- 它无法执行INSERT,DELETE或UPDATE语句。
改为使用PL/SQL procedure
PL / SQL具有两种类型的子程序:过程和函数。通常,您使用过程执行操作,并使用函数来计算值。