Plsql 存储Varray[PL/SQL]

Plsql 存储Varray[PL/SQL],plsql,Plsql,创建varray: CREATE OR REPLACE TYPE ListaCursos IS VARRAY(10) OF Cursos; DECLARE listaCursos1 ListaCursos; c1 Cursos; c2 Cursos; p_ref REF Profesor; p_ref2 REF Profesor; BEGIN SELECT REF(p) INTO p_ref FROM Profesorado p WHERE p.

创建varray:

CREATE OR REPLACE TYPE ListaCursos IS VARRAY(10) OF Cursos;

DECLARE
    listaCursos1 ListaCursos;
    c1 Cursos;
    c2 Cursos;
    p_ref REF Profesor;
    p_ref2 REF Profesor;
BEGIN
    SELECT REF(p) INTO p_ref FROM Profesorado p WHERE p.codigo = 3;
    c1 := NEW Cursos(1, 'Curso 1', p_ref, 20, '01/06/2011', '01/07/2011', 30);
    SELECT REF(p) INTO p_ref2 FROM Profesorado p WHERE p.dni='51083099F';
    c2 := NEW Cursos(2, 'Curso 2', p_ref2, 20, '01/06/2011', '01/07/2011', 30);
    listaCursos1 := ListaCursos(c1, c2);
END;
/
尝试使用它:

CREATE TABLE Alumnado OF Alumno;

DECLARE
    a1 Alumno;
    a2 Alumno;
    listaCursos1 ListaCursos;
BEGIN
    a1 := NEW Alumno(100, '76401092Z', 'MANUEL', 'SUAREZ IBAÑEZ', 'M', '30/6/1990', listaCursos1(1));
    a2 := NEW Alumno(102, '6915588V', 'MILAGROSA', 'DIAZ PEREZ', 'F', '28/10/1984', listaCursos1(2));
    INSERT INTO Alumnado VALUES (a1);
    INSERT INTO Alumnado VALUES (a2);
END;
/
现在它显示了这个错误:

申报 * 第1行错误: ORA-06531:对未初始化集合的引用
ORA-06512:在第6行

如果您在PL/SQL块中创建了一个类型,它将仅在该块中可用。因此,在第一个块内创建的VARRAY仅在该块内可用。您可以创建一个独立类型,该类型将存储在数据库中,直到您删除它,或者您可以在包中创建一个类型,并通过包引用该类型。有关更多信息,请阅读《创建软件包规范》

create package  test_pkg 
is 
 g_listaCursos1 ListaCursos; 
end; 
在第一块中添加

   test_pkg.g_listaCursos1  := ListaCursos(c1, c2);
在第二次读取包规范中的值

test_pkg.g_listacuros11,test_pkg.g_listacuros12

限制:

包变量可在同一会话中访问
现在ListaCursos或LISTACURSOS1是否出现错误?现在,当我尝试使用它显示的值时:必须声明标识符“LISTACURSOS1”。如果我宣布listaCursos1 listaCursos1 ListaCursos;它显示:对未初始化集合的引用。我将编辑第一篇文章以显示代码。您正在尝试读取未初始化的集合。listaCursos11我在另一个块中初始化了它,我如何存储它?这个值listaCursos1需要多长时间?仅针对这些插入?我需要在其他块中使用它们。我已经添加了答案,但我建议重新设计代码并简化它。