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: недостаточно значений ошибки

Однако, когда я объявляю тип записи и вложенную таблицу этого типа записи, а затем переменную вложенной таблицы внутри пакета, вышеуказанный массовый сбор работает, и он не выдаст ошибку

Кто-нибудь может мне помочь с этим?

1 ответ

Решение

Вы не можете просто поместить значения в таблицу объектов - вам нужно преобразовать значения в объекты соответствующего типа, а затем вставить объекты. Пытаться

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

Не проверен на животных - вы будете первым!

Поделитесь и наслаждайтесь.

Другие вопросы по тегам