存储过程中从一个表到另一个表的 Netezza 更新错误

Posted

技术标签:

【中文标题】存储过程中从一个表到另一个表的 Netezza 更新错误【英文标题】:Netezza Update Error from one table to another within a stored procedure 【发布时间】: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

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

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

提前谢谢...

【问题讨论】:

【参考方案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

【讨论】:

以上是关于存储过程中从一个表到另一个表的 Netezza 更新错误的主要内容,如果未能解决你的问题,请参考以下文章

如何复制一个表到另一个数据库中

MySQL 复制表到另一个表

MySQL 复制表到另一个表

Netezza 中数据库中所有表的行数

如何执行存储在 MySQL 中的将 ID 从一个表插入到另一个表的过程?

如何复制MySQL数据库或表到另外一台服务器