回答

收藏

Oracle合并与选择然后插入或更新

技术问答 技术问答 377 人阅读 | 0 人回复 | 2023-09-14

什么更快?
. S$ B" p3 K0 e8 E0 g3 x合并语句+ H% m2 ^+ n9 U$ U, K+ u3 m, S4 X
    MERGE INTO table_name
% F' u; y0 {/ I; Q     USING dual
8 [8 R' k  p. ?/ S% N; w     ON (row_id = 'some_id')
' G' ]8 _% Y2 O4 s7 ~* |    WHEN MATCHED THEN
1 ~, ~! ~5 g: V2 |- v; V2 R+ P     UPDATE SET col_name = 'some_val'
( \: K: C8 x& M4 y    WHEN NOT MATCHED THEN: d+ \: Q* c* G7 g: N; f
     INSERT (row_id, col_name)
0 G0 O5 K, n8 j2 H+ @8 D4 p     VALUES ('some_id', 'some_val')
! g/ W0 \+ q- w1 G' M或者) \. X8 I" q7 w# p; ~3 F/ `- O& I
查询选择语句,然后使用更新或插入语句。
! ~& ]6 C) q# ^0 r    SELECT * FROM table_name where row_id = 'some_id'2 b. o* i, T4 j. F
如果rowCount == 0" s5 l& W, c1 \
    INSERT INTO table_name (row_id,col_name) VALUES ('some_id','some_val')3 H4 y  d3 j7 v, v7 O
别的
/ D$ X8 B% |0 y7 o3 P6 U! m    UPDATE table_name SET col_name='some_val' WHERE row_id='some_id'' ]4 I( f3 Q& m3 I8 R( m
                * W; V( e* @) `3 q1 M8 Y
解决方案:" W) _/ q) [" B. C$ A. x) e
                ) H6 M9 l' x& k

; |! n8 m1 O. i$ b. Q  s0 q7 J$ X" z* M8 d
                的 经验法则 是,如果你可以在一个SQL做到这一点,它会比通常在多个SQL语句,这样做有更好的表现。
) \, p. N# b/ [7 s' q* {如果可以,我会选择MERGE。6 S9 r" i% V2 }7 h3 f- o
另外-另一个建议:您可以避免在语句中重复数据,例如:
+ Q* _, B9 m8 u/ {. QMERGE INTO table
- G% H4 a1 ]5 x! ~3 W' O USING (SELECT 'some_id' AS newid,; ~9 X0 L2 Z* V7 s+ A
               'some_val' AS newval
/ U) j( @+ E0 Q4 m& y/ B        FROM dual); F/ Q8 r, v8 ]$ \
ON (rowid = newid)( g+ g& Z3 z) U' F0 i7 `4 n
WHEN MATCHED THEN  z% H: R" E% S, p: ~0 M
UPDATE SET colname = newval
: p$ |8 I2 T) b' `& W7 NWHEN NOT MATCHED THEN
4 ?) }- C1 I2 V INSERT (rowid, colname)
# l- ~! @  y/ n. g' o6 i  ^' e VALUES (newid, newval)
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则