【问题标题】:ORA-00947 Not enough values while declaring type globallyORA-00947 全局声明类型时值不足
【发布时间】:2012-04-30 02:33:22
【问题描述】:
 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: 值不足错误

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

谁能帮我解决这个问题?

【问题讨论】:

    标签: oracle plsql oracle11g ora-00947


    【解决方案1】:

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

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

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

    分享和享受。

    【讨论】:

    • 在 Oracle 11.2 上测试。谢谢!
    • 感谢您的提示(Oracle 11.2)
    • 谢谢!也在 19c 工作过。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-16
    • 1970-01-01
    • 2020-01-25
    • 2019-04-02
    相关资源
    最近更新 更多