openGauss SQL参考—事务管理(2)

示例

  • 示例1:支持在PLSQL的存储过程内使用COMMIT/ROLLBACK。

    CREATE TABLE EXAMPLE1(COL1 INT);
    
    CREATE OR REPLACE PROCEDURE TRANSACTION_EXAMPLE()
    AS
    BEGIN
        FOR i IN 0..20 LOOP
            INSERT INTO EXAMPLE1(COL1) VALUES (i);
            IF i % 2 = 0 THEN
                COMMIT;
            ELSE
                ROLLBACK;
            END IF;
        END LOOP;
    END;
    /
    
  • 示例2:

    支持含有EXCEPTION的存储过程使用COMMIT/ROLLBACK。

    支持在存储过程的EXCEPTION语句内使用COMMIT/ROLLBACK。

    支持DDL在COMMIT/ROLLBACK后的提交/回滚。

    CREATE OR REPLACE PROCEDURE TEST_COMMIT_INSERT_EXCEPTION_ROLLBACK()
    AS
    BEGIN
    	DROP TABLE IF EXISTS TEST_COMMIT; 
    	CREATE TABLE TEST_COMMIT(A INT, B INT);
    	INSERT INTO TEST_COMMIT SELECT 1, 1;
    	COMMIT;
            CREATE TABLE TEST_ROLLBACK(A INT, B INT);
    	RAISE EXCEPTION 'RAISE EXCEPTION AFTER COMMIT';
    EXCEPTION
        WHEN OTHERS THEN
    	INSERT INTO TEST_COMMIT SELECT 2, 2;
    	ROLLBACK;
    END;
    /
    
  • 示例3:支持在事务块里调用含有COMMIT/ROLLBACK的存储过程,即通过/BEGIN/START/END等开启控制的外部事务。

    BEGIN;
        CALL TEST_COMMIT_INSERT_EXCEPTION_ROLLBACK();
    END;
    
  • 示例4:支持多数PLSQL的上下文和语句内调用COMMIT/ROLLBACK,包括常用的IF/FOR/CURSOR LOOP/WHILE。

    CREATE OR REPLACE PROCEDURE TEST_COMMIT2()
    IS
    BEGIN
        DROP TABLE IF EXISTS TEST_COMMIT;
        CREATE TABLE TEST_COMMIT(A INT);
        FOR I IN REVERSE 3..0 LOOP
    	INSERT INTO TEST_COMMIT SELECT I;
    	COMMIT;
        END LOOP;
        FOR I IN REVERSE 2..4 LOOP
    	UPDATE TEST_COMMIT SET A=I;
    	COMMIT;
        END LOOP;
    EXCEPTION
    WHEN OTHERS THEN   
    	INSERT INTO TEST_COMMIT SELECT 4;
        COMMIT;
    END;
    /
    
  • 示例5:支持存储过程返回值与简单表达式计算。

    
    CREATE OR REPLACE PROCEDURE exec_func3(RET_NUM OUT INT) 
    AS 
    BEGIN 
        RET_NUM := 1+1; 
    COMMIT; 
    END; 
    / 
    CREATE OR REPLACE PROCEDURE exec_func4(ADD_NUM IN INT) 
    AS 
    SUM_NUM INT; 
    BEGIN 
    SUM_NUM := ADD_NUM + exec_func3(); 
    COMMIT; 
    END; 
    /
    
posted @ 2024-08-08 09:29  openGauss-bot  阅读(14)  评论(0)    收藏  举报