无法使用嵌套表在 PL/SQL 中创建矩阵

Not able to create a matrix in PL/SQL using nested tables

我试图在 PL/SQL 中使用嵌套的 table 创建矩阵:

set serveroutput on;

DECLARE
    TYPE lista_principala_tip IS TABLE OF varchar2(30);
    TYPE lista_liste_tip IS TABLE OF lista_principala_tip;
    lista lista_liste_tip;
BEGIN
    lista := lista_liste_tip();
    lista.extend(20);
    lista(1) := lista_principala_tip('Gorila', 'Babuin', 'Urangutan', 'Cimpanzeu', 'Gibon');
    lista(2) := lista_principala_tip('Labrador', 'Bulldog', 'Bichon', 'Ciobanesc German');
    lista(3) := lista_principala_tip('British Shorthair', 'Siamese', 'Scottish Fold', 'Chartreux');
    for i in lista.first..lista.last loop
        for j in lista(i).first..lista(i).last loop
            DBMS_OUTPUT.PUT_LINE(i||' - '||lista(i)(j));  
        end loop;
    end loop;
END;

我遇到的问题是,当我尝试 运行 这个脚本时,出现以下错误:

Error report - ORA-06531: Reference to uninitialized collection ORA-06512: at line 12

您使用 lista.extend(20); 创建了一个包含 20 个项目的列表,这些项目都将被初始化为 NULL

然后为集合的前 3 个元素设置值。

然后你遍历所有 20 个项目并尝试遍历每个元素中的 sub-list;但是,在前 3 个之后,元素中不包含 sub-list,因为元素是 NULL.

或者:

  • Just lista.EXTEND(3); 因为你只需要数组中的 3 个元素;或者
  • 添加检查列表元素是否为 NULL,如果是,则跳过 sub-list 的循环。

第二个选项可以实现为:

DECLARE
    TYPE lista_principala_tip IS TABLE OF varchar2(30);
    TYPE lista_liste_tip IS TABLE OF lista_principala_tip;
    lista lista_liste_tip;
BEGIN
    lista := lista_liste_tip();
    lista.extend(20);
    lista(1) := lista_principala_tip('Gorila', 'Babuin', 'Urangutan', 'Cimpanzeu', 'Gibon');
    lista(2) := lista_principala_tip('Labrador', 'Bulldog', 'Bichon', 'Ciobanesc German');
    lista(3) := lista_principala_tip('British Shorthair', 'Siamese', 'Scottish Fold', 'Chartreux');
    for i in lista.first..lista.last loop
        IF lista(i) IS NOT NULL THEN
            for j in lista(i).first..lista(i).last loop
                DBMS_OUTPUT.PUT_LINE(i||' - '||lista(i)(j));  
            end loop;
        END IF;
    end loop;
END;
/

db<>fiddle here