Raj*_*esh 2 oracle partitioning
我需要将 LONG 数据类型的 high_value 与 DATE 数据类型的 sysdate 进行比较。我需要获取 90 天前的所有分区的分区名称。代码是这样的。
declare
dt date;
time_to_stay number:=1; --CONFIGURE AS PER THE REQUIREMENT
begin
for x in (select partition_name , high_value, partition_position
from user_tab_partitions
where table_name = 'DEMO')
loop
execute immediate 'select '||x.high_value||' from dual' into dt;
if to_date(dt) < sysdate-time_to_stay AND x.partition_position <>'1' then
execute immediate 'ALTER TABLE DEMO DROP PARTITION '|| x.partition_name|| ' UPDATE GLOBAL INDEXES';
Run Code Online (Sandbox Code Playgroud)
此查询会执行但不会删除分区。但是我看到主要问题是将 high_value 的 LONG 数据类型转换为 DATE 以在 high_value 和 sys_date 之间进行比较。
我怎样才能解决这个问题?
小智 7
我认为还有另一种解决方案。
DECLARE
CURSOR c1 IS
SELECT
HIGH_VALUE
FROM
USER_TAB_PARTITIONS
WHERE
TABLE_NAME = 'MYTAB';
ls_sql_statement VARCHAR2(1000);
ld_date_val DATE;
BEGIN
FOR c1rec IN c1 LOOP
ls_sql_statement := 'SELECT '||c1rec.HIGH_VALUE||' FROM DUAL';
EXECUTE IMMEDIATE ls_sql_statement INTO ld_date_val;
--Do more stuff here with ld_date_val
END LOOP;
END;
/
Run Code Online (Sandbox Code Playgroud)