在11.2中,Oracle新增了APPEND_VALUES提示,使得INSERT INTO VALUES语句也可以使用直接路径插入。
例子很简单:
SQL> SELECT * FROM V$VERSION;
BANNERITPUB个人空间'{ X7O9xyQN_
--------------------------------------------------------------------------------ITPUB个人空间n$m*[-cG1m&n
Oracle Database11gEnterprise Edition Release11.2.0.1.0 - 64bit Production
~r3l\fJ-[d0PL/SQL Release 11.2.0.1.0 - ProductionITPUB个人空间y+qe%T!\
CORE 11.2.0.1.0 ProductionITPUB个人空间Z-@8l6I+kh R.I
TNS for Linux: Version 11.2.0.1.0 - Production
x/Uc1s]0NLSRTL Version 11.2.0.1.0 - Production
SQL> CREATE TABLE T_APPEND (ID NUMBER, NAME VARCHAR(30));
表已创建。
SQL> INSERT /*+ APPEND(A) */ INTO T_APPEND A
3l$k3D!eFw%tE0 2 VALUES (1, 'ABC');
已创建1行。
SQL> SELECT * FROM T_APPEND;
ID NAMEITPUB个人空间Gp!XKv6Vp\r
---------- ------------------------------
^hX(O5{ R0 1 ABC
SQL> COMMIT;
提交完成。
SQL> INSERT /*+ APPEND(A) */ INTO T_APPEND A
9Up9?)_$UP0 2 SELECT ROWNUM + 1, TNAMEITPUB个人空间A6M6Q2F qNc#S(c
3 FROM TABITPUB个人空间;V4K \+wE
4 WHERE ROWNUM = 1;
已创建1行。
SQL> SELECT * FROM T_APPEND;
Haj+H.]#\'j}0SELECT * FROM T_APPEND
F0\yZ%_8P$qijs4b0y0 *ITPUB个人空间'i5?\Yi3J
第1行出现错误:
MV wL%}#y ]0ORA-12838:无法在并行模式下修改之后读/修改对象
ITPUB个人空间:tM m%D&hg9AG*S
SQL> COMMIT;
提交完成。
对比INSERT INTO VALUES和INSERT INTO SELECT语句后的结果可以清晰的看到,APPEND提示对于INSERT INTO VALUES语句无效,数据仍然采用常规路径插入。
在11.2中使用APPEND_VALUES提示,才使得单条插入语句真正实现了直接路径方式:
SQL> INSERT /*+ APPEND_VALUES(A) */ INTO T_APPEND A
7r#]"Ptc/w.?x!Qu0 2 VALUES (3, 'APPEND_VALUE');
已创建1行。
SQL> SELECT * FROM T_APPEND;ITPUB个人空间:R;nIf6hs
SELECT * FROM T_APPEND
f&|){9owu0*ITPUB个人空间4]s4w@v3Ff%\J
第1行出现错误:ITPUB个人空间N0g8rg5`
ORA-12838:无法在并行模式下修改之后读/修改对象
d:Q~9EAa8hO k0SQL> COMMIT;
提交完成。
SQL> SELECT * FROM T_APPEND;
ID NAMEITPUB个人空间 O.F?:K0G amJ9V\
---------- ------------------------------ITPUB个人空间D(GR$TLybT0D"y
1 ABC
c%n*a7[$w5k0 2 DEMOITPUB个人空间x E6p5xz4o4I0D
3 APPEND_VALUE
http://space.itpub.net/4227/viewspace-626111
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/21601207/viewspace-702102/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/21601207/viewspace-702102/