PgSQL具有回滚和提交功能

时间:2016-05-18 12:02:34

标签: postgresql

我正在尝试将我的MySQL过程转换为使用回滚和提交的pgSQL函数。当我这样做时,我收到如下错误,

  

错误:无法在PL / pgSQL中开始/结束事务   提示:使用带有EXCEPTION子句的BEGIN块。   语境:PL语句中的PL / pgSQL函数fun_profile_update(refcursor,字符变化,字符变化)第155行

请帮帮我。这是我的功能:

1 个答案:

答案 0 :(得分:1)

虽然开始/结束事务不能在PL / pgSQL过程中使用,但您可以抛出异常并处理它。

样品:

CREATE TABLE public.test
(
  id serial,
  description character(255)
)
WITH (
  OIDS=FALSE
);

CREATE OR REPLACE FUNCTION insert_test(IN _description text, IN _rollback boolean DEFAULT false, OUT result integer) RETURNS integer AS $$
BEGIN
  INSERT INTO public.test(description) SELECT _description;
  IF _rollback THEN
    RAISE EXCEPTION 'rollback' USING errcode = '40000'; --code for transaction_rollback
  END IF;
  result := 1;
EXCEPTION
  WHEN transaction_rollback THEN
    result := 0;
END;
$$
LANGUAGE PLPGSQL;