oracle 查找某个日期之前的分区

7tofc5zh  于 2023-08-03  发布在  Oracle
关注(0)|答案(1)|浏览(150)

我被要求在某个日期之前找到一个表的所有分区,脚本将每天重新运行并删除60天前创建的所有分区。我已经想出了这个脚本,它试图找到要删除的分区的数量,并将其保存在属性表中供以后使用。

DECLARE
  numero_di_partizioni NUMBER;
BEGIN
  SELECT COUNT(*) INTO numero_di_partizioni
  FROM ALL_TAB_PARTITIONS
  WHERE TABLE_NAME = 'CA_LG_SATELLITI_IMEL'
    AND PARTITION_NAME LIKE 'SYS%'
    AND TO_DATE(SUBSTR(HIGH_VALUE, INSTR(HIGH_VALUE, '''')+2, 19), 'YYYY-MM-DD HH24:MI:SS') < sysdate - 60 ;

  BEGIN
    INSERT INTO IML_PA_PROPERTY (PR_KEY, PR_VALUE)
    VALUES ('DROP_PART_TO_CA_LG_SATELLITI_IMEL', numero_di_partizioni);
  EXCEPTION
    WHEN DUP_VAL_ON_INDEX THEN
      UPDATE IML_PA_PROPERTY
      SET PR_VALUE = numero_di_partizioni
      WHERE PR_KEY = 'DROP_PART_TO_CA_LG_SATELLITI_IMEL';
  END;
END;
/

字符串
该表存在并且几乎是空的,所以它在60天前没有分区。
这个脚本继续给予我一个错误 * unconsistent data types expected char got long*。正是这个错误是在第一个查询,我也试图转换为长,但不建议,我没有实现这一点。

iugsix8n

iugsix8n1#

*_TAB_PARTITIONS.HIGH_VALUE是一个长整型,使用起来极其困难。在SQL中,您无法对其执行任何操作。幸运的是,PL/SQL有一个内置的功能,只需通过赋值就可以将其转换为varchar 2。

DECLARE
  var_high_value_string varchar2(32767);
  var_high_value_date date;
BEGIN
  FOR rec_partition IN (SELECT partition_name,partition_position,high_value
                          FROM ALL_TAB_PARTITIONS
                         WHERE TABLE_NAME = 'CA_LG_SATELLITI_IMEL'
                           AND PARTITION_NAME LIKE 'SYS%'
                         ORDER BY partition_position)
  LOOP
     /* convert long to varchar2 by assignment */
     var_high_value_string := rec_partition.high_value;

     IF var_high_value_string != 'MAXVALUE'
     THEN
       /* evaluate string into a date with dynamic SQL */
       EXECUTE IMMEDIATE 'SELECT '||var_high_value_string||' FROM dual' INTO var_high_value_date;

       /* now check the date to see if it's old enough */

       IF var_high_value_date < SYSDATE - 60
       THEN
         -- do something.
       END IF;
     END IF;
  END LOOP;
END;

字符串
这将适用于单个日期列上的范围分区表。如果您有LIST分区,或者数据类型不是日期,或者分区键是多个列,那么所有这些都可以得到支持,但是需要更多的编码来解决每种情况,并确保您分配给正确类型的变量。

相关问题