PL / SQLプロシージャのパラメータの一般的な動作
質問
PL / SQLでいくつかのデータ型が定義されているとします:
TYPE foo_t IS RECORD (...);
TYPE foo_table_t IS TABLE OF foo_t INDEX BY BINARY_INTEGER;
TYPE bar_t IS RECORD (...);
TYPE bar_table_t IS TABLE OF bar_t INDEX BY BINARY_INTEGER;
TABLEから派生したデータ型(たとえば、foo_table_t
またはbar_table_t
)をパラメーターとして受け入れることができるプロシージャを作成することはできますか?この手順では、テーブルの行タイプに関する知識は必要ありません。簡単な例:
PROCEDURE remove_last(some_table ...) IS
BEGIN
some_table.DELETE(some_table.LAST);
END;
解決
直接ではありません。 PL / SQLプログラマーズガイドから:
<!> quot;実パラメータとそれに対応する仮パラメータには互換性のあるデータ型が必要です。<!> quot;
PL / SQLは、実際のパラメーターデータ型から正式なパラメーターデータ型への暗黙的な変換を行います。したがって、文字列を必要とするプロシージャに数値を渡すことができます。暗黙的な変換を行うことができるため、それは機能します。
最善の方法は、オーバーロードされたプロシージャを記述することです。
PROCEDURE generic(foo IN OUT foo_t);
PROCEDURE generic(bar IN OUT bar_t);
その後、どちらのレコードタイプでもジェネリックを呼び出すことができます。これは、処理するレコードタイプの数に比例して魅力を失います:-D
所属していません StackOverflow