如何在plsql中动态地向数组添加内容

时间:2017-07-24 12:46:09

标签: sql plsql

无法将值存储到'名称' array.Please帮我解决错误。

declare 
type name is varray(50) of varchar2(10);
abc varchar2(50);
names name:=name();
begin
    for i in 0..4
    loop
        select cname into abc from customer where cid=1;
        names(i):=abc;
        dbms_output.put_line(names(i));
    end loop;
end;

我是pl / sql的新手,我正在尝试向我的数组添加元素,但是我收到了一些错误,如下所示。

  

ORA-06532:超出限制的下标

2 个答案:

答案 0 :(得分:2)

PL / SQL中的循环需要从1开始。

此外,在保存值之前,您需要extend记录变量。

此外,您的类型为varray(50) of VARCHAR2(10),而abc的大小为50。

declare 
    type name is varray(50) of varchar2(50);
    abc varchar2(50);
    names name:=name();
begin
    for i in 1..4
    loop
        select cname into abc from customer where cid=1;
        names.extend(1);
        names(i):=abc;
        dbms_output.put_line(names(i));
    end loop;
end;

为什么需要EXTEND - Standard Oracle DOC

答案 1 :(得分:0)

    declare 
    type name is varray(50) of varchar2(10);
    abc varchar2(50);
    names name:=name();
    begin
        for i in 1..4
        loop
            select cname into abc from customer where cid=1;
            names.extend;
            names(i):=abc;
            dbms_output.put_line(names(i));
        end loop;

end;

1)数组从1开始。

2)type name is varray(50) of varchar2(10);表示数组的最大长度为50与初始长度无关。