Sql Oracle中记录表类型上的游标

Sql Oracle中记录表类型上的游标,sql,oracle,stored-procedures,plsql,stored-functions,Sql,Oracle,Stored Procedures,Plsql,Stored Functions,我有一份声明,如下所示 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创建了一个变量,并填充了这个虚拟表的值

我有一份声明,如下所示

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_值是respond_字段_组的变量

但我得到的数据类型无效


请帮助我找到此问题的解决方案

您不能像这样使用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

您不能像这样使用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