2016-05-18 8 views
0

私のMySQLプロシージャを、ロールバックとコミットを使用するpgSQL関数に変換しようとしています。以下のようなエラーが表示されます。ロールバックとコミットを使用するPgSQL関数

私を助けてください。ここに私の関数です:

+1

不可。関数の呼び出し側は、コミットまたはロールバックする必要があります –

答えて

1

begin/endトランザクションは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; 
関連する問題