2009-05-08 9 views
2

と仮定私は、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; 

ことが可能ですが(たとえば、foo_table_tまたはbar_table_tのいずれか)をパラメータとして使用しますか。このプロシージャでは、表の行タイプの知識は必要ありません。簡単な例:

PROCEDURE remove_last(some_table ...) IS 
BEGIN 
    some_table.DELETE(some_table.LAST); 
END; 

答えて

4

直接ではありません。 PL/SQLプログラマーズ・ガイドから:

"実際のパラメータと対応する仮パラメータには、互換性のあるデータ型が必要です。

PL/SQLは、実際のパラメータ・データ型を仮パラメータ・データ型に暗黙的に変換します。したがって、文字列を必要とするプロシージャに数値を渡すことができます。暗黙の変換を行うことができるため、関数が動作します。あなたができる

最高のは、オーバーロードされたプロシージャを作成するために、次のようになります。

PROCEDUREジェネリック(OUT、IN foo_t FOO);

プロシージャジェネリック(bar IN OUT bar_t);

次に、いずれかのレコードタイプでジェネリックを呼び出すことができます。これは、処理するレコードタイプの数に比例して魅力を失います.-D

関連する問題