【问题标题】:Oracle Dynamically create script for Updating Partitioned tableOracle 动态创建用于更新分区表的脚本
【发布时间】:2019-03-06 17:16:14
【问题描述】:

我有一个范围分区的 Oracle 表,我想使用分区键对其进行更新。

有没有办法动态创建考虑分区键的更新脚本,如下所示,而不必手动维护这样的脚本

  update table where date between 'a' and 'b'

  update table where date between 'b' and 'c'.

【问题讨论】:

  • 那个表的分区键是什么?如果它是 DATE 列(顺便说一句,这是一个可怕的列名称),那么 Oracle 将自动处理仅更新相应分区中的行。
  • 你说的是更新表中的数据,还是更新表分区定义?
  • @a_horse_with_no_name :表列 = invoice_date。该表有超过 3 亿行。我们无法一次更新所有这些。因此,我们尝试通过在 'Jan 01 2018' 和 'Jan 31 2018' 之间指定 INVOICE_DATE 来一次更新一个分区
  • @MarkStewart - 更新表格。它有超过 3 亿行。
  • 那么分区键是什么?

标签: sql oracle performance sql-update


【解决方案1】:

我认为没有必要在where clause 中指定范围来更新各个分区。您可以动态使用 partition_extension_clause of update

BEGIN
     FOR r IN (
          SELECT partition_name
          FROM user_tab_partitions
          WHERE table_name = 'YOUR_TABLE'
     ) LOOP

    EXECUTE IMMEDIATE 'UPDATE YOUR_TABLE (' || r.partition_name || ')  SET somecol = somevalue where someother_clause';

      COMMIT; --if it's necessary
     END LOOP;
END;
/

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-26
    相关资源
    最近更新 更多