2

基本的に、OracleFormのRecordGroup関数のプロシージャ/関数を複製するパッケージを作成しています。これらの機能をシミュレートするのに苦労しています。特に、RecordGroup(2番目の次元)が数値またはvarchar2(任意の長さ)列(3番目の次元)を持つことができる場合。

私が考えているのは、オラクルフォームの手順をシミュレートするために、パッケージに3次元の連想配列が含まれていることです。

1次元-パッケージセッションで定義されたすべてのRecordGroupのコレクション。これは、varchar2によってインデックス付けされたRecordGroupsのテーブルになります。

2番目のディメンション-このディメンションは、レコードグループ自体、つまりレコードグループの列としてシミュレートするVARRAYのテーブルになります。このテーブルは、列の名前を示すvarchar2によってインデックスが付けられます。

3次元-これは、列に固有の長さの数値またはvarchar2のいずれかのVARRAYになります。このVARRAYは、その行番号によって索引付けされます。

私の質問は、さまざまなデータ型のVARRAYのテーブルになるように、定義されたRecordGroupなどのテーブルを作成できるかどうかです。もしそうなら、それを行う方法についてのアイデアはありますか?不可能な場合、とにかく定義された動作を実装できますか?ありがとう!

4

1 に答える 1

1

特定のレコードグループに数値行または文字列行のいずれかが含まれているが、両方が混在していないことを意味していると思います。その場合:データを保持するSQLタイプを作成し、ポリモーフィズムを使用して、さまざまなデータタイプの汎用レコードgrtoupスーパータイプと特定のサブタイプを作成します。

create or replace type record_group_t as object (
     rg_name varchar2(30)
     , rg_type varchar2(6)  -- i.e. number or string
 ) 
not final not instantiable;
/

create or replace type rg_strings_nt as table of varchar2(128);
/

create or replace type rg_numbers_nt as table of number(38,0);
/

create or replace type record_group_string under record_group_t (
    rg_recs rg_strings_nt
)
final instantiable;
/

create or replace type record_group_number under record_group_t (
    rg_recs rg_numbers_nt
)
final instantiable;
/

特定の値を変更したり、より特殊なサブタイプを許可したりすることもできます。また、record_group_t.rg_type属性は必要ない場合もあります。これは、yopuがこれらのものをどのように使用するかによって異なります。

次に、レコードグループのコレクション(最初のディメンション)は単純になります。

create or replace type record_group_nt as table of record_group_t;
/

record_group_tYiouは、TREAT()とCAST()を使用するサブタイプを切り替えることができます。詳細については、オブジェクト開発者ガイドを読み直してください

于 2013-03-27T08:26:26.483 に答える