web-dev-qa-db-ja.com

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:値が足りませんエラー

ただし、レコードタイプとそのレコードタイプのネストされたテーブルを宣言し、次にネストされたテーブルの変数をパッケージ内で宣言すると、上記の一括収集が機能し、エラーはスローされません

誰かがこれで私を助けることができますか?

15
Gaurav Soni

オブジェクトのテーブルに値を入れるだけでは不十分です。値を適切なタイプのオブジェクトに変換してから、オブジェクトを挿入する必要があります。試してみてください

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

動物でテストされていません-あなたが最初になります!

共有してお楽しみください。

29
Bob Jarvis