Skip to Main Content

SQL & PL/SQL

Announcement

For appeals, questions and feedback about Oracle Forums, please email oracle-forums-moderators_us@oracle.com. Technical questions should be asked in the appropriate category. Thank you!

Deleting from multiple tables where few tables have same column name

866972Jun 6 2011 — edited Jun 7 2011
Hi,

I am new to PL/SQL and need some help. I need to delete data older then X years from some 35 odd tables in my schema and out of those tables 25 tables have same column name on which i can have my "where" clause and rest 10 table have different table names. I am doing something like this :

declare
table_list UTL_FILE.FILE_TYPE;
string_line VARCHAR2(1000);
tables_count number:=0;
table_name VARCHAR2(400);
column_name VARCHAR2(400);
BEGIN
table_list := UTL_FILE.FOPEN('ORALOAD','test7.txt','R');
DBMS_OUTPUT.PUT_LINE(table_list);

LOOP
UTL_FILE.GET_LINE(table_list,string_line);

table_name := substr(string_line,1, instr(string_line,'|')-1);
column_name := substr(string_line, instr(string_line,'|')+1);
DBMS_OUTPUT.PUT_LINE(table_name);
DBMS_OUTPUT.PUT_LINE(column_name);
IF column_name = 'SUBMISSION_TIME' THEN
delete from :table_name where to_date(:column_name)<(sysdate-(365*7));
ELSE
delete from || table_name || where ( || to_date(column_name) || ) <(sysdate-(365*7));
END IF;
END LOOP;
EXCEPTION
WHEN NO_DATA_FOUND THEN
UTL_FILE.FCLOSE(table_list);
DBMS_OUTPUT.PUT_LINE('Number of Tables processed is : ' || tables_count);
UTL_FILE.FCLOSE(table_list);

END;

WHERE the text file "text7.txt" contains list of table name and column names separated by a pipe line. But when I execute the above proc it gives error "invalid table name".

Can something like this be done or is there any other way to execute this task of deletion from 35 tables.

Thanks.
Comments
Locked Post
New comments cannot be posted to this locked post.
Post Details
Locked on Jul 5 2011
Added on Jun 6 2011
12 comments
462 views