PL/SQL传递函数作为参数

Bol*_*oso 4 parameters plsql functional-programming function

我在半年内用PL/SQL编程,我觉得它是一种非常简单的编程语言(恕我直言).虽然我偶然发现了一些有趣的文章,比如这篇文章 - PL/SQL中的设计模式 - 界面注入更加宽松的耦合,我建议阅读.谈到依赖注入,我想念一个特殊功能:将子程序作为参数传递.可能吗?怎么样?

例如,假设我在javascript中有这样的代码:

function tell_me (printer) {
  printer ("hello");
}

tell_me (function () {
  console.log (word);
});
Run Code Online (Sandbox Code Playgroud)

是否有可能在PL/SQL中做类似的事情?

N W*_*est 6

您不能直接将函数作为参数传递.您可以做的最好的事情是使用动态PL/SQL来执行以字符串形式传入的函数.我不推荐这个.在少数情况下,我可以看到动态PL/SQL的使用,但这会让您面临各种各样的问题.

DECLARE 
   PROCEDURE inner_function
   IS
   BEGIN
       dbms_output.put_line('Output');
   END;

   PROCEDURE tell_me(parm_function varchar2) 
   IS
   BEGIN
       EXECUTE IMMEDIATE 'BEGIN '||parm_function||'(); END;';
   END;

BEGIN
   tell_me('inner_function');
END;
Run Code Online (Sandbox Code Playgroud)

DBMS_OUTPUT应该只在缓冲区中有"输出".

这可能不起作用,因为inner_function可能超出范围.在这种情况下,请在架构中定义过程.