2017-05-05 85 views
0

創建VARRAY:商店VARRAY [PL/SQL]

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; 
/

現在它顯示了這個錯誤:

DECLARE * 錯誤的第1行: ORA-06531:引用未初始化的集合 ORA-06512:在第6行

+1

正試圖從集合初始化讀取訪問。 'listaCursos1(1)< - error'。 –

+0

我在另一個塊中初始化它,我如何存儲它? – EBG

+0

你需要多長時間('listaCursos1')?僅限於這些插入? –

回答

1

創建包規範。

create package test_pkg 
is 
g_listaCursos1 ListaCursos; 
end; 

在第一塊添加

test_pkg.g_listaCursos1 := ListaCursos(c1, c2); 

在第二讀出的值從包裝規格。

test_pkg.g_listaCursos1(1) , test_pkg.g_listaCursos1(2)

限制:

  • 包變量是在同一個會話
+0

它的工作!謝謝! – EBG

0

如果您在PL/SQL塊中創建一個類型,它將僅在該塊內部可用。因此,您在第一個塊內創建的VARRAY僅在該塊內可用。您可以創建一個獨立的類型,將其存儲在數據庫中,直到您將其刪除,或者您可以在包中創建類型並通過包引用該類型。欲瞭解更多信息,你可以閱讀Oracle Docs

+0

我編輯了第一篇文章,但顯示了相同的錯誤。 – EBG

+0

你現在是否收到'ListaCursos'或'LISTACURSOS1'的錯誤? – Nitish

+0

現在,當我嘗試使用它顯示的值:identifier'LISTACURSOS1'必須聲明。如果我聲明listaCursos1「listaCursos1 ListaCursos;」它顯示:引用未初始化的集合。我將編輯第一篇文章以顯示代碼。 – EBG