У меня есть функция pl/pgsql для прокрутки таблиц. В HIST_CLEANUP_TBL есть 5 табличных имен. Из 5, 1 имя_таблицы не существует в базе данных.Нужно обрезать таблицы, используя функцию plpgsql
Потребность: Он должен проверить все таблицы. Если таблица не существует, напишите ошибку в таблицу ошибок и усечь оставшуюся таблицу.
Однако, когда когда-либо недоступная таблица приходит в цикл, функция заканчивается.
Как уловить код ошибки и текст в переменной и как продолжить цикл, хотя 1 таблица не существует.
Мы используем PostGreSQL 8,2
BEGIN
for recordvar in
SELECT 'truncate table ' || TABLE_NAME as SQRY FROM HIST_CLEANUP_TBL
loop
QUERY1 := recordvar.SQRY;
RAISE NOTICE 'QUERY: (%)', QUERY1;
BEGIN
execute QUERY1;
RAISE NOTICE 'QUERY EXECUTED SUCCESSFULLY';
EXCEPTION
WHEN others
THEN
--GET STACKED DIAGNOSTICS
ERR_NUM := SQLSTATE;
ERR_MESG := SQLERRM ;
RAISE NOTICE 'ERROR WHILE EXECUTING THE QUERY : %',ERR_NUM;
insert into Refresh_Error_tbl(sqlerr_code,sqlerr_desc,sql_desc, INSERT_DT,refresh_load_id) values(ERR_NUM,ERR_MESG,QUERY1,current_timestamp,'1');
END;
end loop;
END;
Возможно ли ваша статья исключение сама бросает исключение? Например, если вставка идет не так? Если в обработчике исключений есть исключение, то, безусловно, он будет прерван – harmic
. Здесь проблема заключается в том, что он не входит в цикл исключения. – user3145945
HIST_CLEANUP_TBL TABLE_NAME В С Д Е Здесь C таблица МЭ не существует в базе данных. Функция выполняется для таблиц A и B, когда C завершает работу, а таблица D и E не усекаются. Так что это нужно, чтобы написать таблицу C в таблицу ошибок и процесс D и E – user3145945