Netezza SP抛出'意外事务命令'错误

时间:2014-01-22 13:55:25

标签: sql stored-procedures merge upsert netezza

我在Netezza中有一个SP,通过使用复合键在两个表之间进行UPSERTS。

它正确编译但随后抛出此错误:

错误:exec_stmt_execsql()中的意外事务命令 - 存储过程中不允许

以1美元的价格宣布用户名为ALIAS; ...... 开始 从MAIN_TABLE删除         在哪里TMS_NETWORK_ID || TMS_PROGRAM_ID IN         (SELECT TMS_NETWORK_ID || TMS_PROGRAM_ID FROM T_F_SPLIT_PROG_SCHEDULE_STG)         AND RUN_ID = USERINPUT; 插入MAIN_TABLE SELECT             来自STAGING_TABLE             WHERE RUN_ID = USERINPUT和DEL_FLAG = 0;

..... END;

似乎我正在尝试Netezza SP中不允许的东西,但我不知道导致错误的原因。请帮忙...??

1 个答案:

答案 0 :(得分:0)

我看到你的SP并注意到几点 -

1)您正在从主表中删除行,然后从raw / staging表插入到主表,从文档的角度来看,这是不可取的,因为它会导致内存中的更多进程被删除并导致“序列化错误” “如果任何并行线程将尝试插入/更新主表中的任何记录。

2)我在您的查询中发现了一些错误 -

  

从MAIN_TABLE删除 TMS_NETWORK_ID || TMS_PROGRAM_ID IN       (SELECT TMS_NETWORK_ID || TMS_PROGRAM_ID FROM T_F_SPLIT_PROG_SCHEDULE_STG)AND       RUN_ID = USERINPUT

我猜您使用的是复合键,但您选择和尝试删除的方式是错误的。