我在半年内用PL / SQL编程,我觉得它是一种非常简单的编程语言(恕我直言)。虽然我偶然发现了一些有趣的文章,比如这篇文章 - Design Patterns in PL/SQL – Interface Injection for even looser coupling,但我推荐阅读。谈到依赖注入,我想念一个特殊功能:将子程序作为参数传递。可能吗?怎么样?
例如,假设我在javascript中有这样的代码:
function tell_me (printer) {
printer ("hello");
}
tell_me (function () {
console.log (word);
});
是否可以在PL / SQL中执行类似的操作?
答案 0 :(得分: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;
DBMS_OUTPUT应该只在缓冲区中有“输出”。
这可能不起作用,因为inner_function可能超出范围。在这种情况下,请在架构中定义过程。