[20180907]insert+with+select.txt
--//开发写一条批量插入语句效率太低,我看了一下,要访问视图gv$session,真不知道要现实某些特殊功能,需要这样操作.
--//无法理解的是应用代码去访问gv$session视图,不理解!!我个人反对应用程序访问这些视图,可以还需要授权.
--//我同事竟然为了规避授权,在sys下建立存储过程,通过job定时调度.
--//在where条件里面存在条件:
exists (select 1
from gv$session
where abs(logon_time - a.dlsj) <= 1 / 1440
and a.jsjm = TERMINAL
and upper(PROGRAM) = 'XXXX.EXE');
--//我想一下,也许改成with 先获得图gv$session需要的结果集合,然后在处理也许效率高一些.
--//因为前面这样每次都要探察gv$session效率很低,这个批量插入1次不到200条,需要接近2秒完成.
--//自己先测试insert,with,select这样模式是否可行.
1.环境:
SCOTT@test01p> @ ver1
PORT_STRING VERSION BANNER CON_ID
--------------------- ---------- -------------------------------------------------------------------------------- ----------
IBMPC/WIN_NT64-9.1.0 12.1.0.1.0 Oracle Database 12c Enterprise Edition Release 12.1.0.1.0 - 64bit Production 0
create table empx as select * from emp where 1=2;
2.插入:
SCOTT@test01p> insert into empx with a as (select * from emp where deptno=10) select * from a;
3 rows created.
SCOTT@test01p> commit ;
Commit complete.
SCOTT@test01p> select * from empx;
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
---------- ---------- --------- ---------- ------------------- ---------- ---------- ----------
7782 CLARK MANAGER 7839 1981-06-09 00:00:00 2450 10
7839 KING PRESIDENT 1981-11-17 00:00:00 5000 10
7934 MILLER CLERK 7782 1982-01-23 00:00:00 1300 10
--//看来我多虑了是支持这样的写法的.
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/267265/viewspace-2213823/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/267265/viewspace-2213823/