डेटा डिक्शनरी से हटकर डायनेमिक SQL का उपयोग करें।
begin
for trec in ( select table_name
from user_tables
where table_name like 'PREFIX\_%' escape `\' )
loop
dbms_output.put_line('dropping table ' || trec.table_name);
execute immediate 'drop table '||trec.table_name;
end loop;
end;
LIKE क्लॉज के साथ सटीक होना एक अच्छा विचार है; escape
. का उपयोग करके कीवर्ड को यह सुनिश्चित करने के लिए कि अंडरस्कोर को वाइल्डकार्ड के रूप में नहीं माना जाता है। वैकल्पिक रूप से उपयोग करें substr(table_name, 1, 7) = 'PREFIX_'
.
गलत तालिका को छोड़ना कोई आपदा नहीं है बशर्ते आप 10g या बाद के संस्करण पर काम कर रहे हों और रीसायकल बिन सक्षम है , लेकिन यह अभी भी बेहतर नहीं है। जाहिर है आप उत्पादन में इस तरह कोड नहीं चलाएंगे, लेकिन आप ड्रॉप स्टेटमेंट की स्क्रिप्ट बनाने के लिए सिद्धांत का उपयोग करेंगे।
उपरोक्त कोड निर्भरताओं को संभाल नहीं करता है। यदि आपके पास उपसर्ग वाली तालिकाओं को संदर्भित करने वाली विदेशी कुंजियाँ हैं और आप तालिकाओं को छोड़ने के लिए बाध्य करना चाहते हैं तो इस अतिरिक्त तर्क का उपयोग करें:
execute immediate 'drop table '|| trec.table_name ||' cascade constraint';
यह विदेशी कुंजी बाधाओं को छोड़ देता है लेकिन (पूर्व में) निर्भर तालिकाओं को छोड़ देता है।