总共只有5个事务控制语句:commit、savepoint、rollback、set transaction、set constraints。
创建表:
CREATE TABLE TB_USER
(
ID INTEGER PRIMARY KEY,
USER_NAME VARCHAR2(20) NOT NULL,
USER_AGE INTEGER NOT NULL
);
CREATE SEQUENCE SEQ_USER
INCREMENT BY 1
START WITH 1
NOMAXVALUE
NOCYCLE
CACHE 10;
CREATE OR REPLACE TRIGGER TR_USER BEFORE INSERT ON TB_USER FOR EACH ROW
BEGIN
SELECT SEQ_USER.NEXTVAL INTO :NEW.ID FROM DUAL;
END;
测试
SQL> SELECT * FROM TB_USER;
未选定行
SQL> INSERT INTO TB_USER(USER_NAME, USER_AGE) VALUES ('user1', 21);
已创建 1 行。
SQL> SELECT * FROM TB_USER;
ID USER_NAME USER_AGE
---------- -------------------- ----------
628 user1 21
SQL> SAVEPOINT P1;
保存点已创建。
SQL> INSERT INTO TB_USER(USER_NAME, USER_AGE) VALUES ('user2', 22);
已创建 1 行。
SQL> SELECT * FROM TB_USER;
ID USER_NAME USER_AGE
---------- -------------------- ----------
628 user1 21
629 user2 22
SQL> ROLLBACK TO SAVEPOINT P1;
回退已完成。
SQL> SELECT * FROM TB_USER;
ID USER_NAME USER_AGE
---------- -------------------- ----------
628 user1 21
SQL> INSERT INTO TB_USER(USER_NAME, USER_AGE) VALUES ('user3', 23);
已创建 1 行。
SQL> SELECT * FROM TB_USER;
ID USER_NAME USER_AGE
---------- -------------------- ----------
628 user1 21
630 user3 23
SQL> SAVEPOINT P2;
保存点已创建。
SQL> COMMIT;
提交完成。
SQL> ROLLBACK TO SAVEPOINT P2;
ROLLBACK TO SAVEPOINT P2
*
第 1 行出现错误:
ORA-01086: 从未创建保存点 'P2'
SQL>
可以看到COMMIT之后,SAVEPOINT就没有了。