【问题标题】:Netezza Update Error from one table to another within a stored procedure存储过程中从一个表到另一个表的 Netezza 更新错误
【发布时间】:2019-08-20 15:18:55
【问题描述】:

有时通过连接两个表进行更新时,我会收到以下错误:

请在表“X”上发出新郎,已超出最大表版本。

有没有办法避免这个问题?我正在使用存储过程,无法使用新郎...

这是我正在尝试做的一个示例:

UPDATE Table_1 t1
SET Var_1 = (CASE WHEN  t1.Var_1 = 0 THEN 0 ELSE t2.Var_1 END)
FROM Table_2 t2 
WHERE t1.id =t2.id AND t1.Date = LAST_DAY(ADD_MONTHS(t2.Date, -1));

我的两个表的记录不超过 20,000 条。我已经查看了这篇文章:

Netezza UPDATE from one table to another

但它并没有解决我遇到的错误......

知道如何通过使用从一个表更新到另一个表来解决此类问题吗?

提前谢谢...

【问题讨论】:

    标签: sql join sql-update netezza


    【解决方案1】:

    您可以将查询简化为:

    UPDATE Table_1 t1
        SET Var_1 = t2.Var_1 
        FROM Table_2 t2 
        WHERE t1.id = t2.id AND
              t1.Var_1 <> 0 AND
              t1.Var_1 <> t2.Var_1
              t1.Date = LAST_DAY(ADD_MONTHS(t2.Date, -1)) ;
    

    这可能会或可能不会解决资源问题,但应该会导致更新的行数减少。

    【讨论】:

      【解决方案2】:

      错误的原因不是更新语句,而是表已经被 ALTER 多次,现在是时候对表运行 GROOM VERSIONS 语句了。

      查看此“enzee 社区”条目以了解更多详细信息,包括如何识别您需要以这种方式“修复”的所有表格 - 尽早完成!

      https://www.ibm.com/developerworks/community/forums/html/topic?id=9c005573-d620-481c-9c62-490af78de4c9

      【讨论】:

        猜你喜欢
        • 2020-12-14
        • 2019-09-29
        • 1970-01-01
        • 2021-02-10
        • 2010-12-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多