Postgresql

錯誤:“END”處或附近的語法錯誤

  • October 5, 2021

我正在嘗試使用觸發器,並在網上找到了一些我之前幾乎複製過的範例,除了更改了表名和行數。但不知何故,我不斷收到語法錯誤並且函式不存在。

我認為它必須與模式有關,因為您可以在表下方看到該表的模式名稱為 public,因此我在創建和引發check_number_of_row()但仍然出現錯誤時添加了 public。我已經從程式碼中刪除了模式public,因為它也無濟於事。

CREATE OR REPLACE FUNCTION check_number_of_row()
RETURNS trigger
  LANGUAGE plpgsql AS
$$BEGIN

   IF (SELECT count(*) FROM public.comment) > 3
   THEN 
       RAISE EXCEPTION 'INSERT statement exceeding maximum number of rows for this table' 
  END IF;
END;$$;  -- this is the syntax END error happened


CREATE TRIGGER tr_check_number_of_row 
BEFORE INSERT ON public.comment
FOR EACH ROW EXECUTE PROCEDURE check_number_of_row();  -- this is where it says function does not exist
psql --version
psql (PostgreSQL) 13.4

提前感謝您的任何幫助和建議。

返回的確切錯誤是:

ERROR:  syntax error at or near "END"
LINE 9:    END IF;
          ^

您的RAISE EXCEPTION語句需要以分號結尾:

CREATE OR REPLACE FUNCTION check_number_of_row()
RETURNS trigger
  LANGUAGE plpgsql AS
$$BEGIN

   IF (SELECT count(*) FROM public.comment) > 3
   THEN 
       RAISE EXCEPTION 'INSERT statement exceeding maximum number of rows for this table';
  END IF;
END;$$;

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