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

Bảng được tạo.ORA-00947 Không đủ giá trị trong khi tuyên bố loại trên toàn cầu

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; 

Đây là một tình huống rất kỳ quặc, khi tôi tạo một đối tượng loại và bảng lồng nhau của các kiểu đó toàn cầu và tạo ra một biến kiểu bảng lồng nhau và số lượng lớn thu vào biến mà tôi nhận được

ORA-00947: không đủ lỗi giá trị

Tuy nhiên, khi tôi khai báo một loại bảng lồng nhau Bên trong gói, sau đó là số lượng lớn công việc thu thập ở trên và không ném lỗi

Có ai có thể giúp tôi với điều này không?

Trả lời

26

Bạn không thể chỉ đặt giá trị vào một bảng đối tượng - bạn cần phải chuyển đổi các giá trị thành các đối tượng thuộc loại thích hợp và sau đó chèn các đối tượng. Hãy thử

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

Không được thử nghiệm trên động vật - bạn sẽ là người đầu tiên!

Chia sẻ và thưởng thức.

+0

: Cảm ơn vì điều này, nó hoạt động .. –

+0

Thử nghiệm trên Oracle 11.2. Cảm ơn! –

+0

Cảm ơn lời khuyên (Oracle 11.2) –

Các vấn đề liên quan