5

私は半年間 PL/SQL でプログラミングしてきましたが、非常に単純なプログラミング言語 (IMHO) であるという印象を受けました。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 に答える