Hallo an alle,
ich habe schon seit einigen Jahren nicht mehr mit Oracle und PL/SQL gearbeitet und arbeite mich gerade neu ein.
Nun habe ich eine Frage zu varrays:
Wenn ich einen Typ vom Typ varray deklariere und ihn als not null definiere, würde ich erwarten, dass ich den Elementen einer Variablen dieses Typs keine null-Werte zuweisen kann.
Das ist bei der Initialisierung auch der Fall. Wenn ich sie aber mit extend erweitere, enthalten diese erst mal null.
DECLARE
--> Error(3,45): PLS-00567: Kann NULL nicht an einen NOT NULL-eingeschränkten formalen Parameter weitergeben
aber
DECLARE
führt nicht zu einer Fehlermeldung und gibt aus:
1 :##
2 :##
3 :##
Auch wenn ich eines dieser Elemente in die Datenbak werfe und die entsprechende Column mit "where col IS NULL" abfrage, wird die eingefügte Zeile ausgegeben. Also scheint es wirklich null zu sein.
Ist das ein Bug? Oder verstehe ich was nicht?
Und noch eine Frage, da ich mit dem Wust an Dokumentation noch nicht so ganz zurechtkomme:
Wo finde ich eine übersichtliche Definition von varrays incl. sämtlicher zugehöriger Methoden?
Die Online-Suche rödelt sich bei mir tot und in den lokalen Indices des Doku-Downloads habe ich irgendwie nix gefunden.
Ich würde mich über Antworten freuen.
Viele Grüße
Sabine Richter
ich habe schon seit einigen Jahren nicht mehr mit Oracle und PL/SQL gearbeitet und arbeite mich gerade neu ein.
Nun habe ich eine Frage zu varrays:
Wenn ich einen Typ vom Typ varray deklariere und ihn als not null definiere, würde ich erwarten, dass ich den Elementen einer Variablen dieses Typs keine null-Werte zuweisen kann.
Das ist bei der Initialisierung auch der Fall. Wenn ich sie aber mit extend erweitere, enthalten diese erst mal null.
DECLARE
TYPE myint_varray IS VARRAY(3) OF INTEGER NOT NULL;
varray_int MYINT_VARRAY := myint_varray(null, null, null);
BEGINnull;
END;--> Error(3,45): PLS-00567: Kann NULL nicht an einen NOT NULL-eingeschränkten formalen Parameter weitergeben
aber
DECLARE
varray_int MYINT_VARRAY := myint_varray();
BEGIN FOR i IN 1..varray_int.LIMIT
LOOP
varray_int.EXTEND();
dbms_output.put_line(i || ' :#' || varray_int(i) || '#');
END LOOP;
END;führt nicht zu einer Fehlermeldung und gibt aus:
1 :##
2 :##
3 :##
Auch wenn ich eines dieser Elemente in die Datenbak werfe und die entsprechende Column mit "where col IS NULL" abfrage, wird die eingefügte Zeile ausgegeben. Also scheint es wirklich null zu sein.
Ist das ein Bug? Oder verstehe ich was nicht?
Und noch eine Frage, da ich mit dem Wust an Dokumentation noch nicht so ganz zurechtkomme:
Wo finde ich eine übersichtliche Definition von varrays incl. sämtlicher zugehöriger Methoden?
Die Online-Suche rödelt sich bei mir tot und in den lokalen Indices des Doku-Downloads habe ich irgendwie nix gefunden.
Ich würde mich über Antworten freuen.
Viele Grüße
Sabine Richter
Comment