问题描述
嗨,康纳,克里斯
你能帮忙吗,
从表中选择 * (强制转换 (t_daz作为daz_test_tab)) 在这里不起作用。
你能帮忙吗,
从表中选择 * (强制转换 (t_daz作为daz_test_tab)) 在这里不起作用。
create table tb_test
as select object_name, object_id from user_objects where rownum <= 10;
create type daz_test as object (name varchar2(100));
create type daz_test_tab as table of Daz_test index by binary integer;
declare
t_daz daz_test_tab := daz_test_tab();
begin
select object_name
bulk collect into t_daz
from tb_test
where rownum <= 10;
for r_item in (select * from table(cast(t_daz as daz_test_tab)))
loop
dbms_output.put_line(r_item.id);
end loop;
end;
专家解答
这里有几个问题:
-“按二进制整数索引” 仅是PL/SQL,但是您正在使用SQL创建它
-批量收集数据时,您需要选择对象
-ID不是您类型的属性,因此在put_line中对此的引用将失败
您可以将daz_test_tab创建为PL/SQL类型。但是您只能从12.1开始在table() 运算符中使用该类型的变量。你在11.2,所以你需要坚持使用SQL类型:
如果要在12.1中使用PL/SQL类型,则需要在包中声明它:
-“按二进制整数索引” 仅是PL/SQL,但是您正在使用SQL创建它
-批量收集数据时,您需要选择对象
-ID不是您类型的属性,因此在put_line中对此的引用将失败
您可以将daz_test_tab创建为PL/SQL类型。但是您只能从12.1开始在table() 运算符中使用该类型的变量。你在11.2,所以你需要坚持使用SQL类型:
create table tb_test
as select object_name, object_id from user_objects where rownum <= 10;
create type daz_test as object (name varchar2(100));
/
create type daz_test_tab as table of Daz_test;
/
declare
t_daz daz_test_tab := daz_test_tab();
begin
select daz_test(object_name)
bulk collect into t_daz
from tb_test
where rownum <= 5;
for r_item in (select * from table(cast(t_daz as daz_test_tab)))
loop
dbms_output.put_line(r_item.name);
end loop;
end;
/
AAA
ABC
ADDRESS_TY
ADDRESS_TYY
AGE_I如果要在12.1中使用PL/SQL类型,则需要在包中声明它:
create table tb_test
as select object_name, object_id from user_objects where rownum <= 10;
create type daz_test as object (name varchar2(100));
/
create or replace package pkg as
type daz_test_tab is table of Daz_test;
end pkg;
/
declare
t_daz pkg.daz_test_tab;
begin
select daz_test(object_name)
bulk collect into t_daz
from tb_test
where rownum <= 5;
for r_item in (select * from table(t_daz))
loop
null;
dbms_output.put_line(r_item.name);
end loop;
end;
/
A
AAA
ABC
ABC_TEMP_TABLE
ACCOUNTS 「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




