存储过程中从一个表到另一个表的 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 更新错误的主要内容,如果未能解决你的问题,请参考以下文章