我对 Oracle PL/SQL 数据库应用程序的开发非常陌生……我有一个客户要求,我们为他们创建了一个 ETL,删除了前几天的表。该表是使用同义词创建的,创建表需要时间戳,例如:TEST_TEST_todaysdate
现在他们想更改 ETL 并且不想删除前几天的表,而是想保留三天的数据,并在第四天......该过程应该删除最后几天作为循环,以便表保留最后三天!我希望你们能理解我,但它是这样的 - 从星期一到星期三,星期四然后删除星期一,星期五然后删除星期二,等等。
这是一个代码片段:
-- check &&1..&&3._&&2
select count(*)
into v_exist
from all_tables
where owner = upper('&&1')
and table_name = upper('&&3._&&2');
if v_exist > 0 then
for r in (select owner,table_name
from all_tables
where owner = upper('&&1')
and table_name like upper('&&3%') --- exclude MASTER_* tables
and table_name <> upper('&&3') --- just for precaution
这是我的代码:
and table_name = start_day DATE as ((SELECT extract(hour from current_timestamp)) - 4 FROM dual
--and table name =' || previous_days_table ||' -- saving previous days table
and table_name < upper('&&3._&&2')) loop
v_sql := 'DROP TABLE ' || r.owner || '.' || r.table_name || ' CASCADE CONSTRAINTS PURGE';
dbms_output.put_line(v_sql);
execute immediate v_sql;
end loop;
end if;
EXCEPTION
WHEN OTHERS THEN
RAISE;
END;