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:
Ich hoffe ihr könnt mir hier helfen!
Danke und Grüße,
Chaya
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;
Danke und Grüße,
Chaya