2012-04-18 21 views
15
create table foo(
    id number, 
    status varchar2(10) 
); 

Tabla creada.ORA-00947 No hay suficientes valores mientras se declara el tipo globalmente

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; 

Ésta es una situación muy extraña, cuando se crea un objeto de texto y tabla anidada de ese tipo a nivel mundial y crear una variable de tipo tabla anidada y mayor recoger en esa variable consigo

ORA-00947: no hay suficiente de error valores

sin embargo, cuando me declaro un tipo de registro y la tabla anidada de ese tipo de registro y a continuación, una variable de la tabla anidada Dentro del paquete, entonces el mayor por encima de coleccionar obras y lo hará no lanzar el error

¿Alguien puede ayudarme con esto?

Respuesta

26

No puede simplemente poner valores en una tabla de objetos; necesita convertir los valores en objetos del tipo apropiado y luego insertar los objetos. Pruebe

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

No probado en animales - ¡usted será el primero!

Comparte y disfruta.

+0

: Gracias por esto, funciona .. –

+0

Probado en Oracle 11.2. ¡Gracias! –

+0

Gracias por la propina (Oracle 11.2) –

Cuestiones relacionadas