我在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中不允许的东西,但我不知道导致错误的原因。请帮忙...??
答案 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
我猜您使用的是复合键,但您选择和尝试删除的方式是错误的。