high_value 到 date 数据类型的转换

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)

  • 老实说,这应该是答案,因为它很简单。 (2认同)