5

我已经用 PL/SQL 编程了半年,我的印象是它是一种非常简单的编程语言(恕我直言)。虽然我偶然发现了一些有趣的文章,比如这篇文章——PL/SQL 中的设计模式——接口注入,以实现更松散的耦合,但我还是推荐阅读。谈到依赖注入,我错过了一个特殊的功能:将子例程作为参数传递。是否可以?如何?

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

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

tell_me (function () {
  console.log (word);
});

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

4

1 回答 1

7

您不能直接将函数作为参数传递。最好的办法是使用动态 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;

DBMS_OUTPUT 在缓冲区中应该只有“输出”。

这可能不起作用,因为 inner_function 可能超出范围。在这种情况下,请在模式本身中定义过程。

于 2012-06-21T02:11:34.780 回答