2014-01-22 40 views
0

我有一個Netezza中的SP做兩個表之間的UPSERTS通過使用複合鍵。Netezza SP拋出'意外事務命令'錯誤

它正確編譯但隨後拋出這個錯誤:

錯誤:意外的交易指令在exec_stmt_execsql() - 不允許在存儲過程中

DECLARE USERINPUT別名$ 1; ...... BEGIN DELETE FROM MAIN_TABLE WHERE 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; INSERT INTO MAIN_TABLE SELECT FROM STAGING_TABLE WHERE RUN_ID = USERINPUT AND DEL_FLAG = 0;

..... END;

看來我嘗試的東西,而不是在Netezza SP的允許,但我不知道是什麼導致了錯誤。請幫忙...??

回答

0

我看見你的SP和注意幾點 -

1)您從主表中刪除行,然後從原材料/登臺表主表中插入,這是不是從文獻的角度最好的方法,因爲它會導致如果有任何並行線程嘗試插入/更新主表中的任何記錄,則會在內存中刪除更多進程並可能導致「序列化錯誤」。

2)我發現在查詢一些錯誤 -

DELETE FROM MAIN_TABLE WHERE 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

我猜你是使用組合鍵,但你現在的樣子選擇並嘗試刪除是錯誤的。