1

下面的 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;
4

1 回答 1

1

它是PL/SQL 函数限制的一部分

为了防止令人讨厌的副作用和不可预测的行为,Oracle 服务器使您在 SQL 中的存储函数无法执行以下任何操作:存储函数可能不会修改数据库表

  • 它不能执行 INSERT、DELETE 或 UPDATE 语句。

改用PL/SQL过程

PL/SQL 有两种类型的子程序,过程和函数。通常,您使用过程来执行操作并使用函数来计算值。

于 2019-06-23T12:43:07.527 回答