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

Я предполагаю, что вы используете составные ключи, но неправильный способ выбора и попытки удаления.

Другие вопросы по тегам