Netezza SP выбрасывает "неожиданная команда транзакции" Ошибка
У меня есть ИП в Netezza, чтобы делать UPSERTS между двумя таблицами, используя составной ключ.
Он компилируется правильно, но затем выдает эту ошибку:
ОШИБКА: неожиданная команда транзакции в exec_stmt_execsql() - не разрешена в хранимой процедуре
ОБЪЯВЛЯЙТЕ USERINPUT ALIAS ЗА 1 $; ...... НАЧАТЬ УДАЛИТЬ ИЗ MAIN_TABLE, ГДЕ TMS_NETWORK_ID||TMS_PROGRAM_ID IN (ВЫБРАТЬ TMS_NETWORK_ID||TMS_PROGRAM_ID FROM T_F_SPLIT_PROG_SCHEDULE_STG) И RUN_ID = USERINPUT; INSERT INTO MAIN_TABLE ВЫБРАТЬ ИЗ STAGING_TABLE, ГДЕ RUN_ID = USERINPUT И DEL_FLAG = 0;
..... КОНЕЦ;
Кажется, я пытаюсь что-то, что не разрешено в Netezza SP, но я не знаю, что является причиной ошибки. Пожалуйста помоги...??
1 ответ
Я видел ваш SP и отметил несколько моментов -
1) Вы удаляете строки из своей основной таблицы, а затем вставляете из необработанной / промежуточной таблицы в основную таблицу, это не рекомендуется с точки зрения документов, поскольку это приводит к удалению гораздо большего количества процессов в памяти и может вызвать "ошибку сериализации", если таковая имеется Параллельный поток попытается вставить / обновить любую запись в основной таблице.
2) Я нашел несколько ошибок в вашем запросе -
УДАЛИТЬ ИЗ MAIN_TABLE, ГДЕ TMS_NETWORK_ID||TMS_PROGRAM_ID IN (ВЫБЕРИТЕ TMS_NETWORK_ID||TMS_PROGRAM_ID ОТ T_F_SPLIT_PROG_SCHEDULE_STG) И RUN_ID = USERINPUT
Я предполагаю, что вы используете составные ключи, но неправильный способ выбора и попытки удаления.