我已經寫了一個pl/pgsql函數來trucate表。 HIST_CLEANUP_TBL有5個table_name。 5箇中,1個table_name在數據庫中不存在。需要使用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 甲 乙 Ç d Ë 這裏,C表能源部不存在於數據庫中。當C到達終止函數並且表D和E不被截斷時,函數正在爲表A和B運行。 因此需要將表C寫入錯誤表和進程D和E – user3145945