Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oracle ORA-00947全局声明类型时没有足够的值_Oracle_Plsql_Oracle11g_Ora 00947 - Fatal编程技术网

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

Oracle ORA-00947全局声明类型时没有足够的值,oracle,plsql,oracle11g,ora-00947,Oracle,Plsql,Oracle11g,Ora 00947,表已创建 create table foo( id number, status varchar2(10) ); 这是一种非常奇怪的情况,当我全局地创建一个类型对象和该类型的嵌套表,并创建一个嵌套表类型的变量,然后批量收集到我得到的变量中 ORA-00947:值不足错误 但是,当我声明一个记录类型和该记录类型的嵌套表,然后在包中声明嵌套表的一个变量时,上面的批量收集工作,并且不会抛出错误 有人能帮我解决这个问题吗 不能只将值放入对象表中-需要将值转换为适当类型的对象,然后插入对

表已创建

 create table foo(
   id number,
   status varchar2(10)
 );
这是一种非常奇怪的情况,当我全局地创建一个类型对象和该类型的嵌套表,并创建一个嵌套表类型的变量,然后批量收集到我得到的变量中

ORA-00947:值不足错误

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


有人能帮我解决这个问题吗

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

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;
没有在动物身上测试-你会是第一个


共享和享受。

在Oracle 11.2上测试。谢谢谢谢你的提示(Oracle 11.2)谢谢!我也在19世纪工作。
procedure temp is
  v_nt  foo_nt;
begin
  select FOO_OBJ(id ,status)
    bulk collect into v_nt
    from foo;
end temp;