Oracle vs PostgreSQL,研發注意事項(6)- 事務處理

husthxd發表於2018-09-10

本節介紹了Oracle和PG在事務處理上面的部分不同點。
Oracle
Oracle資料庫,在同一個事務中的多個語句,如某個語句執行出錯,該語句不影響其他語句的執行,如事務提交,則執行成功語句會持久化到DB中。
測試指令碼:

TEST-orcl@server4>drop table tbl3;

Table dropped.

TEST-orcl@server4>create table tbl3(var varchar(2),fixed char(2));

Table created.

TEST-orcl@server4>
TEST-orcl@server4>insert into tbl3 values('1','1');

1 row created.

TEST-orcl@server4>insert into tbl3 values('2','2');

1 row created.

TEST-orcl@server4>insert into tbl3 values('測試x3','測試x3');
insert into tbl3 values('測試x3','測試x3')
                        *
ERROR at line 1:
ORA-12899: value too large for column "TEST"."TBL3"."VAR" (actual: 6, maximum:
2)


TEST-orcl@server4>insert into tbl3 values('4','4');

1 row created.

TEST-orcl@server4>
TEST-orcl@server4>commit;

Commit complete.

TEST-orcl@server4>
TEST-orcl@server4>select * from tbl3;

VA FI
-- --
1  1
2  2
4  4

TEST-orcl@server4>

PG
PG資料庫,在同一個事務中的多個語句,如某個SQL語句執行出錯,則就算在其後執行commit,事務也會回滾。如在該出錯語句之後執行其他DML語句,則會報錯。

testdb=# drop table if exists tbl3;
 tbl3;DROP TABLE
testdb=# create table tbl3(var varchar(2),fixed char(2));
CREATE TABLE
testdb=# 
testdb=# begin;
BEGIN
testdb=# 
testdb=# insert into tbl3 values('1','1');
INSERT 0 1
testdb=# insert into tbl3 values('2','2');
INSERT 0 1
testdb=# insert into tbl3 values('測試3','測試3');
ERROR:  value too long for type character varying(2)
testdb=# insert into tbl3 values('4','4');
ERROR:  current transaction is aborted, commands ignored until end of transaction block
testdb=# 
testdb=# commit;
ROLLBACK
testdb=# 
testdb=# select * from tbl3;
 var | fixed 
-----+-------
(0 rows)

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/6906/viewspace-2374873/,如需轉載,請註明出處,否則將追究法律責任。

相關文章