Netezza SP выдает ошибку «неожиданная команда транзакции»

У меня есть SP в Netezza для выполнения UPSERTS между двумя таблицами с использованием составного ключа.

Он компилируется правильно, но затем выдает эту ошибку:

ОШИБКА: непредвиденная команда транзакции в exec_stmt_execsql() - не разрешена в хранимой процедуре

DECLARE USERINPUT ALIAS FOR $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 SELECT FROM STAGING_TABLE WHERE RUN_ID = USERINPUT AND DEL_FLAG = 0;

..... КОНЕЦ;

Кажется, я пытаюсь сделать что-то, что не разрешено в Netezza SP, но я не знаю, что вызывает ошибку. Пожалуйста помоги...??


person Arpan J    schedule 22.01.2014    source источник


Ответы (1)


Я видел ваш SP и отметил несколько моментов -

1) Вы удаляете строки из своей основной таблицы, а затем вставляете из необработанной/промежуточной таблицы в основную таблицу, это не рекомендуется с точки зрения документов, поскольку это приводит к удалению гораздо большего количества процессов в памяти и может вызвать «ошибку сериализации», если таковая имеется параллельный поток попытается вставить/обновить любую запись в основной таблице.

2) Я нашел несколько ошибок в вашем запросе -

УДАЛИТЬ ИЗ MAIN_TABLE, ГДЕ TMS_NETWORK_ID||TMS_PROGRAM_ID В (ВЫБРАТЬ TMS_NETWORK_ID||TMS_PROGRAM_ID ИЗ T_F_SPLIT_PROG_SCHEDULE_STG) И RUN_ID = USERINPUT

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

person Varun Bajaj    schedule 24.01.2014