17
 create table foo(
   id number,
   status varchar2(10)
 );

表已创建。

insert into foo values( 1, 'open' );
insert into foo values( 2, 'close' );
insert into foo values( 3, 'open' );
insert into foo values( 4, 'open' );
insert into foo values( 5, 'close' );

create type foo_obj is object (
      id number,
      status varchar2(10)
    );
   /

 create type foo_nt
     as table of foo_obj;
  /

 create or replace package test_bulk
 is 

 procedure temp;

 end;
 /

 create or replace package body test_bulk
 is 

 procedure  temp
   is 
   v_nt  foo_nt;
   begin
     select id ,status 
     bulk collect into v_nt
     from foo;

   end temp;

   end test_bulk;

这是一个非常奇怪的情况,当我全局创建一个类型对象和该类型的嵌套表并创建一个嵌套表类型的变量并将批量收集到该变量中时,我得到

ORA-00947: 值不足错误

但是,当我声明一个记录类型和该记录类型的嵌套表,然后是嵌套表的变量包里面,那么上面的批量收集工作,它不会抛出错误

谁能帮我解决这个问题?

4

1 回答 1

34

您不能只将值放入对象表中 - 您需要将值转换为适当类型的对象,然后插入对象。尝试

procedure temp is
  v_nt  foo_nt;
begin
  select FOO_OBJ(id ,status)
    bulk collect into v_nt
    from foo;
end temp;

未在动物身上进行测试 - 你会是第一个!

分享和享受。

于 2012-04-18T16:21:23.580 回答