Postgreの関数にトランザクションがあるかどうかをテストします
1496 ワード
1、背景
テストpostgreのfunctionはraiseのexceptionの後、テーブルに書き込まれた内容が戻ってくるかどうかをテストします.
2、コード
2.1まずfun 1を作成する
DROP FUNCTION if EXISTS fun_test1();
CREATE OR REPLACE FUNCTION fun_test1()
RETURNS Boolean
AS $$
DECLARE
i integer;
BEGIN
--
INSERT INTO temp_1 VALUES ('7800301210000003245814');
RETURN TRUE;
end;
$$ LANGUAGE plpgsql;
2.2 fun 2の作成
DROP FUNCTION if EXISTS fun_test2();
CREATE OR REPLACE FUNCTION fun_test2()
RETURNS Boolean
AS $$
DECLARE
i integer;
BEGIN
RAISE EXCEPTION 'test_fun2 exception';
RETURN TRUE;
end;
$$ LANGUAGE plpgsql;
2.3試験funの作成
DROP FUNCTION if EXISTS fun_test(para_days integer);
CREATE OR REPLACE FUNCTION fun_test(para_days integer)
RETURNS Boolean
AS $$
DECLARE
r1 BOOLEAN;
r2 BOOLEAN;
BEGIN
SELECT fun_test1() INTO r1;
SELECT fun_test2() INTO r2;
RAISE NOTICE '1 : %',r1;
RAISE NOTICE '2 : %',r2;
RETURN TRUE;
EXCEPTION
WHEN OTHERS THEN
RAISE NOTICE ' :%',SQLERRM;
RETURN FALSE;
end;
$$ LANGUAGE plpgsql;
2.4試験用テーブルの作成
create table temp_1(account_no varchar(22));
3、テストの実行
(1) select fun_test(2);(2) select * from temp_1;temp_が見えます1にデータが挿入されず、postgreの関数にトランザクションが付属していることを示します.関数内のいずれかの操作またはサブ関数がexceptionを放出すると、関数全体の操作がロールバックされます.