我的声明如下所示
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));
但是我的数据类型无效
请帮我找到解决此问题的方法
答案 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