hallo zusammen
ich habe einen lkeinen problem mit collection beim delete:
TYPE parent_child_typ IS RECORD(
parent_id INTEGER := 0,
child_id INTEGER := 0);
parent_child parent_child_typ;
TYPE master_table_type IS TABLE OF parent_child_typ;
master_table master_table_type := master_table_type();
bein einfügen ist kein priblem:
master_table.extend;–null am ende einfügen
beim löschen taucht das problem erst beim 2 durchlauf!!
value eroor:ora-06502
die ursachen:
a subscript is null or not convertible to the key type. This exception might occur if the key is defined as a PLS_INTEGER range, and the subscript is outside this range
FOR i IN master_table.FIRST … master_table.LAST
LOOP
if i = null then
null;
else
IF master_table(i).child_id = form_id.id THEN
master_table.delete(i);
END IF;
end if;
END LOOP;
wie soll ich mein schleife ändern damit ich diese fehler vermeide
ich habe das korigiert aber ich bekomme die fehler immer noch?
FOR i IN master_table.FIRST … master_table.LAST
LOOP
if i is not null then
IF master_table(i).child_id = form_id.id THEN
master_table.delete(i);
END IF;
end if;
Der NOT NULL Vergleich ist jetzt schon mal richtig. Zu Deinem anderen Problem habe ich in der Oracle Doku folgendes gefunden:
When it includes deleted elements, the internal size of a nested table differs from the values returned by COUNT and LAST. For instance, if you initialize a nested table with five elements, then delete elements 2 and 5, the internal size is 5, COUNT returns 3, and LAST returns 4. All deleted elements (whether leading, in the middle, or trailing) are treated alike
Im obigen Fall würde also Deine FOR-Schleife im zweiten Durchlauf den Index 2 Verwenden, obwohl das Element dort schon gelöscht wurde. Deshalb auch der Fehler (vermute ich mal). Ich hab es nicht probiert, aber versuch doch mal mit PRIOR() bzw. NEXT() zu arbeiten, das müßte eigentlich gelöschte Elemente übersprigen…
Hallo, du hast recht
ich habe das problem so gelöst:
i := master_table.FIRST; – get subscript of first element
WHILE i IS NOT NULL
LOOP
if master_table(i).child_id = form_id.id then
master_table.delete(i);
end if;
i := master_table.NEXT(i); – get subscript of next element
END LOOP;
ich möchte dass mein array von alle masken in der anwendung(eine runtime module) benutzt wird(irgendwie global).
und für jede andere runtime module soll ein andere array existieren
hast du eine idee wie kann man es realisieren
danke im voraus
ich möchte dass mein array von alle masken in der
anwendung(eine runtime module) benutzt wird(irgendwie global).
und für jede andere runtime module soll ein andere array
existieren
Äääääähmmm… Bahnhof. Beschreib mir bitte mal (wenn Du willst auch per mail) genauer, was denn das Programm so tun soll, wofür die Arrays gedacht sind und vor allem um was für eine Anwendung es sich hier handeln soll (Web, Server-Client, Standalone, whatever…).