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

Utworzono tabelę.ORA-00947 Niewystarczające wartości podczas deklarowania typu globalnie

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; 

Jest to bardzo dziwne sytuacja, kiedy utworzyć obiekt typu i tabela zagnieżdżonej tego typu na całym świecie i stworzyć zmienną zagnieżdżonego typu tabeli i luzem zebrać do tej zmiennej uzyskać

ORA-00947: nie tyle błąd wartości

jednak, kiedy zadeklarować typ rekordu i tabela zagnieżdżonej tego typu rekordu, a następnie zmienna tabeli zagnieżdżonej wewnątrz opakowania, to powyższe luzem zebrać prace i będzie nie wyświetlaj błędu

Czy ktoś może mi w tym pomóc?

Odpowiedz

26

Nie można po prostu wstawić wartości do tabeli obiektów - należy przekonwertować wartości na obiekty odpowiedniego typu, a następnie wstawić obiekty. Wypróbuj

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

Nie testowany na zwierzętach - będziesz pierwszy!

Udostępnij i ciesz się.

+0

: Dzięki za to, działa .. –

+0

Testowane w Oracle 11.2. Dzięki! –

+0

Dzięki za wskazówkę (Oracle 11.2) –

Powiązane problemy