我最近收到了一位同事关于提交存储功能的一些意见.我们是否使用过程或函数在Oracle数据库中执行脱机/批处理逻辑主要是我们的应用程序的品味问题.在这两种情况下,我们都返回代码作为函数结果或作为过程OUT参数.我们通常要求从PL/SQL调用那些脱机/批处理例程,而不是从SQL调用:
-- good
declare
rc number(7);
begin
rc := our_function(1, 2, 3);
end;
-- less good
select our_function(1, 2, 3) from dual;
Run Code Online (Sandbox Code Playgroud)
后者不太好的原因是因为our_function出于性能原因可能会提交事务.这对于批处理例程是可以的.
问题是:是否有围绕此主题的最佳实践,或某些特殊关键字阻止在编译器级别的SQL语句中使用此类函数?或者我们应该避免批处理操作的功能而只使用程序?