質問

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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top