Oracle PL - kann jemand einem Anfänger helfen?

FischeFr

Grünschnabel
Hallo zusammen!

Ich bräuchte behelfsmäßig ein kleines Skript, bekomme es aber nicht zum laufen.
Eine Abfrage liefert mir eine Menge von ids, die in für ein insert-Statement benötige.
Das Insert-Statement soll für jede dieser Ids 1x ausgeführt werden und die ids in der liste sind die Werte einer Spalte der Insert-Statements. In einer weiteren Spalte brauche ich eine fortlaufende Nummer. Folgendes habe ich versucht und würde euch bitten, das quasi korrektur zu lesen bzw. nachzubessern -momentan scheint nicht mal die typdefiniton zu passen:

DECLARE

firstParamId number;
TYPE ra_ids IS TABLE OF number;

begin
firstParamId := 35035;

select id collect into ra_ids from regel_aktion where regel_aktion_name_id in (
select id from regel_aktion_name where name = 'Regel.AktionsAusfuehrer.Umdisponierung'
);

FOR i IN ra_ids.FIRST .. ra_ids.LAST LOOP

insert into regel_aktion_param((firstParamId + i.rownum - 1), ra_id ,'Regel.AktionsParam.UmdispoArt', 'U', 'Combo_UmdispoArt', 0, 3, 'N');

end loop;
update sequence set seq_count=(select max(id) from regel_aktion_param) where seq_name='SEQ_REGEL_AKTION_PARAM';
end;

Danke schon mal im vorraus!
 
Ich habs mittlerweile nochmal überarbeitet - geht aber immer noch nicht!

DECLARE
TYPE ra_ids_type IS TABLE OF number INDEX BY BINARY_INTEGER;
ra_ids ra_ids_type;
raParamId number;
BEGIN
select max(id) into raParamId from regel_aktion_param;
select id collect into ra_ids from regel_aktion where regel_aktion_name_id in (
select id from regel_aktion_name where name = 'Regel.AktionsAusfuehrer.Umdisponierung'
);
ra_id := ra_ids.FIRST;
while ra_id is not NULL loop
raParamId := raParamId + 1;
insert into regel_aktion_param values (raParamId, ra_id ,'Regel.AktionsParam.UmdispoArt', 'U', 'Combo_UmdispoArt', 0, 3, 'N');
ra_id := ra_ids.next (ra_id);
END LOOP;
update sequence set seq_count=(select max(id) from regel_aktion_param) where seq_name='SEQ_REGEL_AKTION_PARAM';
END;

Die Meldung beim Ausführen lautet:
Error starting at line 1 in command:
DECLARE
TYPE ra_ids_type IS TABLE OF number INDEX BY BINARY_INTEGER;
ra_ids ra_ids_type;
raParamId number;
BEGIN
select max(id) into raParamId from regel_aktion_param;
select id collect into ra_ids from regel_aktion where regel_aktion_name_id in (
select id from regel_aktion_name where name = 'Regel.AktionsAusfuehrer.Umdisponierung'
);
ra_id := ra_ids.FIRST;
while ra_id is not NULL loop
raParamId := raParamId + 1;
insert into regel_aktion_param values (raParamId, ra_id ,'Regel.AktionsParam.UmdispoArt', 'U', 'Combo_UmdispoArt', 0, 3, 'N');
ra_id := ra_ids.next (ra_id);
END LOOP;
update sequence set seq_count=(select max(id) from regel_aktion_param) where seq_name='SEQ_REGEL_AKTION_PARAM';
END;
Error report:
ORA-06550: Zeile 7, Spalte 24:
PLS-00597: Ausdruck 'RA_IDS' in der INTO-Liste weist falschen Typ auf
ORA-06550: Zeile 7, Spalte 31:
PL/SQL: ORA-00904: : ungültiger Bezeichner
ORA-06550: Zeile 7, Spalte 1:
PL/SQL: SQL Statement ignored
ORA-06550: Zeile 10, Spalte 1:
PLS-00201: Bezeichner 'RA_ID' muss deklariert werden
ORA-06550: Zeile 10, Spalte 1:
PL/SQL: Statement ignored
ORA-06550: Zeile 11, Spalte 7:
PLS-00201: Bezeichner 'RA_ID' muss deklariert werden
ORA-06550: Zeile 11, Spalte 1:
PL/SQL: Statement ignored
06550. 00000 - "line %s, column %s:\n%s"
*Cause: Usually a PL/SQL compilation error.
*Action:
 
Zurück