【问题标题】:Cursor on record table type in OracleOracle中记录表类型上的光标
【发布时间】:2012-08-22 06:50:35
【问题描述】:

我有一个如下所示的声明

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_valuesrespond_field_group

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

但我得到的数据类型无效

请帮我解决这个问题

【问题讨论】:

    标签: sql oracle stored-procedures plsql stored-functions


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 2010-11-24
      • 1970-01-01
      • 1970-01-01
      • 2019-09-17
      • 2021-02-11
      • 1970-01-01
      • 2021-05-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多