Help Center/ GaussDB/ Centralized_8.x/ Autonomous Transaction/ Anonymous Block Supporting Autonomous Transaction
Updated on 2024-06-03 GMT+08:00

Anonymous Block Supporting Autonomous Transaction

An autonomous transaction can be defined in an anonymous block. The identifier of an autonomous transaction is PRAGMA AUTONOMOUS_TRANSACTION. The syntax of an autonomous transaction is the same as that of creating an anonymous block. For details, see Anonymous Blocks. The following is an example.

gaussdb=# CREATE TABLE t1(a INT ,B TEXT);
CREATE TABLE

gaussdb=# START TRANSACTION;
START TRANSACTION

gaussdb=# DECLARE 
	PRAGMA AUTONOMOUS_TRANSACTION;
BEGIN
	DBE_OUTPUT.PRINT_LINE('JUST USE CALL.');
	INSERT INTO t1 VALUES(1,'YOU ARE SO CUTE,WILL COMMIT!');
END;
/
JUST USE CALL.
ANONYMOUS BLOCK EXECUTE

gaussdb=# INSERT INTO t1 VALUES(1,'YOU WILL ROLLBACK!');
INSERT 0 1
gaussdb=# ROLLBACK;
ROLLBACK

gaussdb=# SELECT * FROM t1;
 a |              b               
---+------------------------------
 1 | YOU ARE SO CUTE,WILL COMMIT!
(1 row)

gaussdb=# DROP TABLE t1;
DROP TABLE

In the preceding example, an anonymous block containing an autonomous transaction is finally executed before a transaction block to be rolled back, which directly illustrates a characteristic of the autonomous transaction, that is, rollback of the primary transaction does not affect content that has been committed by the autonomous transaction.