Oracle中记录表上的游标类型

时间:2012-08-22 06:50:36

标签: 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 创建了一个变量,我已为此虚拟表填充了值。 我的问题是如何将此虚拟表转换/传输到游标。

我试过的是 respond_values 变量 respond_field_group

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

但是我的数据类型无效

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

1 个答案:

答案 0 :(得分: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