Postgresql

在 for 循環中使用異常時的語法錯誤

  • April 12, 2019

我正在嘗試在 postgresql 上創建以下過程

CREATE PROCEDURE run_all_scheduled_tasks()
LANGUAGE plpgsql
AS
$$
DECLARE
   rec record;
BEGIN
   FOR rec IN SELECT * FROM some_table LOOP
       -- Statement 1..2..3..4
       EXCEPTION
           WHEN others THEN
               RAISE NOTICE 'Error Occured! Code: %, Messege:%', sqlstate, sqlerrm;
               ROLLBACK;       
       COMMIT;     
   END LOOP;

END;
$$;

我收到以下錯誤:

錯誤:“異常”處或附近的語法錯誤第

12 行:異常

如果我將異常塊移到 for 循環之外,它可以正常工作。

我想要實現的是,對於循環的一次迭代,要麼執行 1..4 中的所有語句,要麼不執行任何語句。如果發生錯誤,我仍然希望保留上一次迭代之前所做的更改,然後通過簡單地發出錯誤通知來繼續下一次迭代。

是什麼導致了這個錯誤?

如評論中所述,我缺少的是另一個BEGIN包含異常的內容。

更新程式碼:

CREATE PROCEDURE run_all_scheduled_tasks()
LANGUAGE plpgsql
AS
$$
DECLARE
   rec record;
BEGIN
   FOR rec IN SELECT * FROM some_table LOOP
       BEGIN
       -- Statement 1..2..3..4
       EXCEPTION
           WHEN others THEN
               RAISE NOTICE 'Error Occured! Code: %, Messege:%', sqlstate, sqlerrm;
               ROLLBACK;
       END; 
       COMMIT;     
   END LOOP;

END;
$$;

引用自:https://dba.stackexchange.com/questions/234657