oracle – ORA-00947在全局声明类型时没有足够的值

前端之家收集整理的这篇文章主要介绍了oracle – ORA-00947在全局声明类型时没有足够的值前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
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: not enough values error

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

有人可以帮我吗?

您不能将值放入对象表中,您需要将值转换为适当类型的对象,然后插入对象.尝试
procedure temp is
  v_nt  foo_nt;
begin
  select FOO_OBJ(id,status)
    bulk collect into v_nt
    from foo;
end temp;

没有动物测试 – 你会是第一!

分享享受.

猜你在找的Oracle相关文章