1

以下に示すように宣言しています

type respond_field
IS
  record
  (
    provider_id          VARCHAR2(100),
    provider_name        VARCHAR2(100));

type respond_field_group
IS
  TABLE OF respond_field INDEX BY BINARY_INTEGER;

Respond_field_groupの変数を作成し、 この仮想テーブルに値を入力しました。私の問題は、この仮想テーブルをカーソルに変換/転送する方法です。

私が試したのは、 respond_valuesがrespond_field_group変数であることを以下に示しています

OPEN v_result_cursor for SELECT provider_id FROM TABLE (Cast(respond_values AS respond_field));

しかし、私は無効なデータ型を取得しています

この問題の解決策を見つけるのを手伝ってください

4

1 に答える 1

4

このような pl/sql 型は使用できません。SQL 型のみを使用できます (つまり、パッケージまたはプロシージャ レベルではなく、スキーマ レベルで定義された型)。レコードと連想配列 (テーブルごとのインデックス) は pl/sql 型です。代わりに、適切なオブジェクト タイプを作成し、コードで使用する必要があります。次に例を示します。

SQL> create type respond_field as object
  2  (
  3    provider_id   varchar2(100),
  4    provider_name varchar2(100)
  5  )
  6  /

Type created.

SQL> create type respond_field_group as table of respond_field
  2  /

Type created.

SQL> create or replace function test_fun return respond_field_group as
  2    l_rfgroup respond_field_group := respond_field_group();
  3  begin
  4    l_rfgroup.extend(2);
  5    l_rfgroup(1) := respond_field('abc', '123');
  6    l_rfgroup(2) := respond_field('def', '456');
  7    return l_rfgroup;
  8  end;
  9  /

Function created.

SQL> select * from table(test_fun);

PROVIDER_ID     PROVIDER_NAME
--------------- ---------------
abc             123
def             456
于 2012-08-22T07:34:49.720 に答える