【问题标题】:How to make Oracle ALTER TABLE MODIFY script be idempotent?如何使 Oracle ALTER TABLE MODIFY 脚本具有幂等性?
【发布时间】:2020-05-08 17:42:57
【问题描述】:

我有这个迁移脚本;

ALTER TABLE table_name MODIFY (column_name NULL);

如何使它具有幂等性?

【问题讨论】:

标签: oracle database-migration ddl idempotent


【解决方案1】:

您可以使用异常处理程序:

DECLARE
    CANNOT_MODIFIY_TO_NULL EXCEPTION;
    PRAGMA EXCEPTION_INIT(CANNOT_MODIFIY_TO_NULL, -1451);
BEGIN

    EXECUTE IMMEDIATE 'ALTER TABLE TABLE_NAME MODIFY (column_name  NULL)';
exception
    when CANNOT_MODIFIY_TO_NULL then
        NULL;
END;

或在视图USER_TAB_COLUMNS中查看NULLABLE:

DECLARE

    CURSOR Cols IS
    SELECT COLUMN_NAME 
    FROM USER_TAB_COLUMNS 
    WHERE TABLE_NAME = 'TABLE_NAME' 
        AND NULLABLE = 'N' 
        AND COLUMN_NAME = 'COLUMN_NAME';

BEGIN
    FOR aCol IN Cols LOOP
        EXECUTE IMMEDIATE 'ALTER TABLE TABLE_NAME MODIFY ('||aCol.COLUMN_NAME||' NULL)';
    END LOOP;
END;

【讨论】:

  • 只是想补充一点,如果它是在 SQL*Plus 中运行的迁移脚本,您还可以在命令前使用WHENEVER SQLERROR CONTINUE 作为基本的异常处理程序。
  • @kfinity 是的,但是它会忽略任何错误,包括您可能希望看到的错误。这就是我没有使用exception when OTHERS then null;的原因
猜你喜欢
  • 2021-12-21
  • 1970-01-01
  • 2017-04-21
  • 2017-02-18
  • 2011-02-05
  • 1970-01-01
  • 2014-05-16
  • 2016-06-04
  • 2023-03-26
相关资源
最近更新 更多