Antworten auf deine Fragen:
Neues Thema erstellen

SQL-Frage

Chaya93

Noch nicht viel geschrieben

hallo zusammen!

Ich habe folgendes Problem.

Und zwar habe ich zwei Tabellen, von der eine auf die andere über einen FK referenziert.

Tabelle_A
- A_Id (PK)
- ...
- ...
- ...

Tabelle_B
- B_Id (PK)
- A_Id (FK)
- ...
- ...


Die beiden Tabellen sind wiederum in Partitionen unterteilt.
Mein Ziel ist es nun eine Partition in Tabelle_A vollständig zu löschen, wenn das eingegebene Datum älter ist, als das Enddatum einer Partition (dies soll mittels truncate gelöst werden).
Nun sollen aber auch die Daten in Tabelle_B gelöscht werden, wenn sie als FK die Id eines gelöschten Datensatzes aus Tabelle_A haben.
Mit Delete funktioniert das Ganze.

folgenden Code habe ich schon:

Code:
<<deletePartitionDataLoop>> FOR i IN v_p_to_archive.first .. v_p_to_archive.last --hier werden alle partitionsINHALTE gelöscht
        LOOP 
            select to_char(sysdate, 'YYYY-MM-DD HH24:Mi:SS') into v_curtime from dual;
            dbms_output.put_line(v_curtime || ' - Truncating partiton ' || v_p_to_archive(i));
            BEGIN
                v_sql1 := 'ALTER TABLE TABELLE_A TRUNCATE PARTITION (' || v_p_to_archive(i) || ')';
                EXECUTE IMMEDIATE v_sql1;
                EXCEPTION
                WHEN OTHERS THEN
                    select to_char(sysdate, 'YYYY-MM-DD HH24:Mi:SS') into v_curtime from dual;
                    dbms_output.put_line(v_curtime || 'ERROR while truncating partition ' || v_p_to_archive(i) || ' with statement: ' || v_sql1 ||' - ' || SQLERRM);
                    ROLLBACK;
                RAISE;
            END;
        END LOOP;    
        

    
    <<deletePartitionLoop>> FOR i In v_p_to_archive.first .. v_p_to_archive.last --partitionen selber werden gelöscht 
        LOOP
            select to_char(sysdate, 'YYYY-MM-DD HH24:Mi:SS') into v_curtime from dual;
            dbms_output.put_line(v_curtime || ' - Deleting partiton ' || v_p_to_archive(i));
                BEGIN
                    v_sql2 := 'ALTER TABLE TABELLE_A DROP PARTITION ' || v_p_to_archive(i);
                    EXECUTE IMMEDIATE v_sql2;
                      EXCEPTION
                      WHEN OTHERS THEN
                        select to_char(sysdate, 'YYYY-MM-DD HH24:Mi:SS') into v_curtime from dual;
                        dbms_output.put_line(v_curtime || 'ERROR while dropping partition ' || v_p_to_archive(i) || ' with statement: ' || v_sql2 ||' - ' || SQLERRM);
                        ROLLBACK;
                        RAISE;
                      END;
        END LOOP;
Ich hoffe ihr könnt mir hier helfen!

Danke und Grüße,
Chaya
 

Chaya93

Noch nicht viel geschrieben

AW: SQL-Frage

Ja, im Grunde könnte ich es so lassen, das stimmt schon.
Aber in diesen Tabellen sind ca. 100000 Datensätze gespeichert.
Und meines Wissens geht das löschen mit truncate etwas schneller :)
 
R

resolution

Guest

AW: SQL-Frage

Kannst Du für den FK nicht noch ein ON DELETE CASCADE Constraint hinzufügen?
 
Bilder bitte hier hochladen und danach über das Bild-Icon (Direktlink vorher kopieren) platzieren.
Antworten auf deine Fragen:
Neues Thema erstellen

Willkommen auf PSD-Tutorials.de

In unseren Foren vernetzt du dich mit anderen Personen, um dich rund um die Themen Fotografie, Grafik, Gestaltung, Bildbearbeitung und 3D auszutauschen. Außerdem schalten wir für dich regelmäßig kostenlose Inhalte frei. Liebe Grüße senden dir die PSD-Gründer Stefan und Matthias Petri aus Waren an der Müritz. Hier erfährst du mehr über uns.

Stefan und Matthias Petri von PSD-Tutorials.de

Nächster neuer Gratisinhalt

03
Stunden
:
:
25
Minuten
:
:
19
Sekunden

Flatrate für Tutorials, Assets, Vorlagen

Zurzeit aktive Besucher

Statistik des Forums

Themen
118.615
Beiträge
1.538.352
Mitglieder
67.526
Neuestes Mitglied
Winfriedtesmer
Oben