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 回答