对于简单的查询语句,可以分为四种情况。1 n$ [& c n1 G3 B& h* x
/ L1 P: m o! `0 H& r# B* c/ } 1.从本地表中读取数据,并引用本地序列。
2 R, V6 k! M& [5 Y; c0 X; ^
, P( B" X9 D9 D7 l' Y5 r SQL> select seq_on_test4.nextval from test_on_test4;7 Y( q0 Y& V( m( K
" L* F1 q- m0 ~' f
NEXTVAL
) L+ m: `4 _2 B: d% R: Q
$ P3 N# c( q" o" N& l6 P ----------/ B9 Q1 X; U# v7 M! M
! ^* E& I# w( N 11 w# T5 D6 k* k" z! p
! h D1 r) k, @ r 2.从本地表中读取数据,但访问远端序列,这时,需要在序列后面加上数据库链名称。
2 Q. R5 [ {+ P$ E" x
* \) x2 @. F3 g SQL> select seq_on_yangtk.nextval@yangtk from test_on_test4;
# U5 |7 N$ t J& K 4 `# |4 W/ B* s* M2 x
NEXTVAL
5 u5 T5 p% M3 a9 z3 x* O " {# M3 L& r9 F4 M: i' ~& d2 V* N5 {
----------
8 w+ ]* N( M: H, x# J! a+ {
, J5 `, X6 }* r- n1 Y+ Q- } 1
" o" ^- y& B, A( B7 Y 4 s' a% N( `; G( Z1 F: N) @% `
3.读取远端数据表中数据,同时访问远端序列。
+ N8 F: }4 {" j
d1 z) ^9 `3 M; @' j SQL> select seq_on_yangtk.nextval@yangtk from test_on_yangtk@yangtk;/ I4 ?# G& k' y! C, s
& t9 @3 r9 `$ b3 ^. I NEXTVAL' L, ^1 P+ U4 E" d O* o5 p; n: n
% t7 M0 F$ W4 A, s: G
----------8 P e% W0 L: S \; t
$ ^$ P# R$ x# w6 y$ ? 28 e% ~3 C. C; I! z
; Y7 }0 G) Q8 N/ C0 A. C" o, D8 [
4.读取远端数据表中数据,但是访问本地序列。- m* ]* b7 P. l8 U( v- a3 h8 l3 K8 I( G
& Z: E# _9 s1 h2 O SQL> select seq_on_test4.nextval from test_on_yangtk@yangtk;2 w6 T, Q" Y" ]4 o
$ ~6 @4 a" C" v, Z NEXTVAL I8 p \ [7 u- t# |
! v; M0 C" V, o* E2 o ----------* b) b% r8 g$ N" h
4 G- ?3 |. r; ~" Y- z3 r, q% V
2
: z5 G: s, n% c; M$ ~ : f" O8 l1 z. _5 o( W
通过测试,这四种情况工作都很正常。5 m$ U7 [& B# g) k7 g' e
! s: E4 B% _2 Q; d! T# l
下面,考虑分布式事务--以INSERT INTO SELECT为例。
R7 T0 C, X7 _! {7 y6 d
4 Q2 W! h# I% ~) e- N 由于INSERT的表可以是本地表,也可以是远端表,对于每种情况,对应的子查询语句都可能包含上面四种情况,下面就一一进行分析。' B5 b/ Y$ R j8 A) E# C
- L& O+ K z0 v* E
一、插入本地表
9 Z$ u9 D- [' l! `: R' k+ ] . b: s; y- x* g- c0 V6 K+ ]- i
1.从本地表中读取数据,并引用本地序列
1 d. H& m" d, F0 g- _
0 L' w7 a3 l: a. {# ^! y SQL> insert into test_on_test4 select seq_on_test4.nextval from test_on_test4;; F3 A! n' H6 Z+ f+ O* h8 `! W2 y
, J+ X( v. P2 m4 s" [
已创建 1 行。4 \; d8 Z* P: ~9 `" W2 N% z- M
5 R+ o/ k3 x4 |
SQL> rollback;8 U9 V& t, M' H3 \* V2 U$ ~1 p! b
9 T1 _. V( j) Y0 W 回退已完成。
! L9 t1 U0 ]! q2 E
1 I p" I7 H! w2 i4 r$ m 2.从本地表中读取数据,但访问远端序列# X4 {. u% T' ?) _. z. K# K) ]" p( U m
* i5 z1 s4 u* C ]0 ` SQL> insert into test_on_test4 select seq_on_yangtk.nextval@yangtk from test_on_test4;% i) _9 e+ h# j& L7 W) [- i) q T7 P2 b
9 T8 e+ b: z* E- w- B! D
已创建 1 行。
5 J' t) H$ ]' @/ K! f
6 P0 O2 E) d1 V) {+ t) f f8 G; @ SQL> rollback;
- {) {( j i5 J& ~ & i6 l3 P5 X7 H- u; T7 C2 I
回退已完成。) `( ]6 A1 h2 v8 O* ]
7 H& a* z% n9 C9 C4 `) H 3.读取远端数据表中数据,同时访问远端序列。
# B+ X0 Q# t; a. H& A: k
& X7 K# d9 G6 ~8 L/ v6 C9 S SQL> insert into test_on_test4 select seq_on_yangtk.nextval@yangtk from test_on_yangtk@yangtk;7 f w8 ]3 }5 j+ V9 x; f* Z+ V, a
5 l: b" m" f+ f8 F* O3 v 已创建 1 行。$ w' X( n7 Q' X5 M$ `4 n
# B1 p4 z% F* ] SQL> rollback;% H; d9 p3 M' X, ^5 j
* z- t/ k: K" y, f* C
回退已完成。 |