Announcement

Collapse
No announcement yet.

not null-varrays + extend

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • not null-varrays + extend

    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
    TYPE myint_varray IS VARRAY(3) OF INTEGER NOT NULL;
    varray_int MYINT_VARRAY := myint_varray(null, null, null);
    BEGIN
    null;
    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

  • #2
    Hallo Sabine,

    ich kann mich nicht so richtig entscheiden, ob ich das Verhalten als Bug oder als Feature bezeichnen soll. Es ist wohl eher eine inkonsequente Implementierung - und damit ein Bug!?
    Bei S.Feuerstein heißt es zu EXTEND[(n[,i])]:
    EXTEND ohne Argumente fügt ein einzelnes NULL-Element an. EXTEND(n) hängt n NULL-Elemente an. EXTEND(n, i) hängt n Elemente an und weist jedem den Wert zu, den das i-te Element hat; diese Variante von EXTEND ist bei Containern mit NOT NULL-Elementen zwingend notwendig.
    Das wiederspricht eigentlich dem von dir geschilderten Verhalten.

    Als gute Dokumentation und Nachschlagewerk kann ich dir nur die Bücher von Feuerstein/Pribyl (Oracle PL/SQL Grundlagen + Erweiterungen) empfehlen.

    Gruß Falk
    Wenn du denkst du hast alle Bugs gefunden, dann ist das ein Bug in deiner Denksoftware.

    Quellcode ohne ein Mindestmaß an Formatierung sehe ich mir nicht an! Ich leiste keinen Privatsupport per Mail oder PN!

    Comment

    Working...
    X