Daij Geschrieben 18. Februar 2010 Teilen Geschrieben 18. Februar 2010 Hallo zusammen, wie einige vielleicht noch wissen, bin ich noch recht neu in der Materie - und stecke grade wieder mal fest mein Freund google konnte mir auch nicht wirklich weiterhelfen, und ich hoffe jetzt das ihr mir ein paar schubser in die richtige Richtung geben könnt. Ich muss Datensätze kopieren, habe das ganze in einer Loop verarbeitet und habe jetzt das problem: Declare TYPE sr_id_tab_type IS VARRAY(99) OF NUMBER ; v_sr_id sr_id_tab_type; SR NUMBER :=0; begin for rec blabla ( select ... from lala where etc ) 65 LOOP 66 67 SR := SR+1; 68 SELECT seq_systemrole.nextval INTO v_sr_id(SR) FROM dual; 69 dbms_output.put_line('NEUE SR_ID: ' || v_sr_id(SR) || ' SR steht auf: ' || SR); Wenn ich das ganze bei Zeile 67 anhalte, kann ich in der ausgabe auslesen, das der Wert von SR 1 ist, also 0 + 1, passt also. Wenn ich es dann weiterlaufen lasse krieg ich folgende Fehlermeldung: $Oracle.EXCEPTION_ORA_6533: ORA-06533: Subscript beyond count ORA-06512: at "lala.COPY_TEMPLATES", line 66 ORA-06512: at line 2 Ich kann damit leider nichts anfangen - bzw nicht identifizieren wo ich etwas falsch gemacht habe. Vielleicht weiß ja einer von euch was es damit auf sich hat ?! Grüße Daij Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
dr.dimitri Geschrieben 18. Februar 2010 Teilen Geschrieben 18. Februar 2010 Ich muss Datensätze kopieren, habe das ganze in einer Loop verarbeitet und habe jetzt das problem: Wenn Du Daten kopieren möchtest, dann genügt genau ein Statement: insert into ziel select col1,col2,... from quelle; Fertig. Ok ein commit brauchst noch. Zu deinem anderen Problem: Du hast zwar einen Typ erzeugt und eine Variable dieses typs angelegt aber die Collection wurde nie initialisiert - sprich sie hat keinen ihr zugewiesenen Speicher. Dim Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Daij Geschrieben 18. Februar 2010 Autor Teilen Geschrieben 18. Februar 2010 (bearbeitet) Ich muss die Daten in die selbe Tabelle kopieren, quasi duplizieren, außerdem geht es da dann noch um untergeordnete Tabelle zu der dann Foreign Keys gegeben werden müssen, und ich will auch nicht für jede ID n eigenes insert statement schreiben. deshalb die Loop und die Variablen. Aber das hat ja nichts zur Frage an sich getan deshalb hab ich das weggelassen. Wie würde die Initialisierung der collection dann aussehen ? Wäre das einfach nur ein v_sr_id := 0; ? Oder hab ich da was falsch verstanden ? Bearbeitet 18. Februar 2010 von Daij Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
dr.dimitri Geschrieben 18. Februar 2010 Teilen Geschrieben 18. Februar 2010 Wäre das einfach nur ein v_sr_id := 0; ? Nein, das ist eine Zuweisung. So reservierst Du in deinem Fall Speicher: v_sr_id.extend(99); Ich muss die Daten in die selbe Tabelle kopieren, quasi duplizieren insert into tab select * from tab Ggf. noch Spalten im SELECT durch eigene Werte anpassen und mittels WHERE Bedingung einschränken. außerdem geht es da dann noch um untergeordnete Tabelle zu der dann Foreign Keys gegeben werden müssen, und ich will auch nicht für jede ID n eigenes insert statement schreiben. Das müsste man sich genauer ansehen, denn meistens kann man auch das mittels SQL lösen. Dim Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Daij Geschrieben 19. Februar 2010 Autor Teilen Geschrieben 19. Februar 2010 Hi, danke die Lösung hat fast so funktioniert die Initialisierung geht anscheinend nur mit table of number, mit den varrays hat er gemeckert. Nja das ganze war schon etwas komplexer, das lies sich mit sql nicht schön machen, ansonsten hätte ich knapp 200 verschiedene insert into tippen müssen. Außerdem war das Ziel ein leicht erweiterbares Konstrukt. Was es jetzt ist Gutes Gefühl wenn die Procedur / das Skript tut was es soll ;-) Auf jeden Fall danke für die Hilfe Grüße Daij Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.