【问题标题】:Netezza SP throwing 'unexpected transaction command' ErrorNetezza SP 抛出“意外的事务命令”错误
【发布时间】:2014-02-12 15:01:15
【问题描述】:

我在 Netezza 中有一个 SP,可以使用复合键在两个表之间执行 UPSERTS。

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

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

以 1 美元的价格声明用户输入别名; …… 开始 从 MAIN_TABLE 中删除 WHERE TMS_NETWORK_ID||TMS_PROGRAM_ID IN (从 T_F_SPLIT_PROG_SCHEDULE_STG 中选择 TMS_NETWORK_ID||TMS_PROGRAM_ID) AND RUN_ID = 用户输入; 插入主表选择 FROM STAGING_TABLE WHERE RUN_ID = USERINPUT AND DEL_FLAG = 0;

..... 结束;

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

【问题讨论】:

    标签: sql stored-procedures merge upsert netezza


    【解决方案1】:

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

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

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

    从主表中删除 TMS_NETWORK_ID||TMS_PROGRAM_ID 在 (从 T_F_SPLIT_PROG_SCHEDULE_STG 中选择 TMS_NETWORK_ID||TMS_PROGRAM_ID)和 RUN_ID = 用户输入

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-07-13
      • 2019-08-09
      • 1970-01-01
      • 1970-01-01
      • 2019-09-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多