[20180907]insert+with+select.txt
[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/,如需轉載,請註明出處,否則將追究法律責任。