दो संभावित दृष्टिकोण।
-
यदि आपके पास एक विदेशी कुंजी है, तो इसे ऑन-डिलीट-कैस्केड घोषित करें और 30 दिनों से अधिक पुरानी मूल पंक्तियों को हटा दें। सभी चाइल्ड पंक्तियों को स्वचालित रूप से हटा दिया जाएगा।
-
आपके विवरण के आधार पर, ऐसा लगता है कि आप उन मूल पंक्तियों को जानते हैं जिन्हें आप हटाना चाहते हैं और संबंधित चाइल्ड पंक्तियों को हटाना चाहते हैं। क्या आपने SQL को इस तरह आज़माया है?
delete from child_table where parent_id in ( select parent_id from parent_table where updd_tms != (sysdate-30)
-- अब पैरेंट टेबल रिकॉर्ड हटाएं
delete from parent_table where updd_tms != (sysdate-30);
---- आपकी आवश्यकता के आधार पर, ऐसा लगता है कि आपको PL/SQL का उपयोग करना पड़ सकता है। मैं देखूंगा कि क्या कोई इसके लिए शुद्ध एसक्यूएल समाधान पोस्ट कर सकता है (इस मामले में यह निश्चित रूप से जाने का रास्ता होगा)।
declare
v_sqlcode number;
PRAGMA EXCEPTION_INIT(foreign_key_violated, -02291);
begin
for v_rec in (select parent_id, child id from child_table
where updd_tms != (sysdate-30) ) loop
-- delete the children
delete from child_table where child_id = v_rec.child_id;
-- delete the parent. If we get foreign key violation,
-- stop this step and continue the loop
begin
delete from parent_table
where parent_id = v_rec.parent_id;
exception
when foreign_key_violated
then null;
end;
end loop;
end;
/