2017-05-05 1 views
0

Erstellen der VARRAY:Shop 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; 
/

Der Versuch, es zu benutzen:

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

Und nun zeigt es diesen Fehler:

DECLARE * ERROR an Zeile 1: ORA-06531: Verweis auf nicht initialisierte Sammlung ORA-06512: bei Zeile 6

+1

Sie versuchen, aus nicht initialisierten Sammlung zu lesen. 'listaCursos1 (1) <- Fehler '. –

+0

Ich initialisierte es im anderen Block, wie kann ich es speichern? – EBG

+0

Wie lange brauchen Sie diese Werte ('listaCursos1')? Nur für diese Einsätze? –

Antwort

1

Paketspezifikation erstellen.

create package test_pkg 
is 
g_listaCursos1 ListaCursos; 
end; 

in dem ersten Block

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

Im zweiten Lese Werten von Paket spec hinzuzufügen.

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

Einschränkung:

  • Paketgrößen sind zugänglich in der gleichen Sitzung
+0

Es hat funktioniert! Vielen Dank! – EBG

0

Wenn Sie einen Typ innerhalb eines PL/SQL-Blocks erstellen, ist er nur innerhalb dieses Blocks verfügbar. So ist die VARRAY, die Sie innerhalb des ersten Blocks erstellen, nur innerhalb dieses Blocks verfügbar. Sie können entweder einen eigenständigen Typ erstellen, der in der Datenbank gespeichert wird, bis Sie ihn löschen, oder Sie können einen Typ innerhalb eines Pakets erstellen und den Typ durch das Paket verweisen. Weitere Informationen finden Sie unter Oracle Docs

+0

Ich habe den ersten Beitrag bearbeitet, aber zeigt den gleichen Fehler. – EBG

+0

Erhalten Sie jetzt Fehler für 'ListaCursos' oder' LISTACURSOS1'? – Nitish

+0

Jetzt, wenn ich versuche, die Werte zu verwenden, zeigt es: Bezeichner 'LISTACURSOS1' muss deklariert werden. Und wenn ich listaCursos1 "listaCursos1 ListaCursos;" Es zeigt: Verweis auf nicht initialisierte Sammlung. Ich werde den ersten Beitrag bearbeiten, um den Code anzuzeigen. – EBG