2016-05-18 89 views
0

我想將我的MySQL過程轉換爲使用回滾和提交的pgSQL函數。當我做了我得到像下面的錯誤,帶回滾和提交的PgSQL函數

ERROR: cannot begin/end transactions in PL/pgSQL HINT: Use a BEGIN block with an EXCEPTION clause instead. CONTEXT: PL/pgSQL function fun_profile_update(refcursor,character varying,character varying) line 155 at SQL statement

請幫我。這是我的功能:

+1

不可能的。函數的調用者需要提交或回滾 –

回答

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;