[20180907]insert+with+select.txt

lfree發表於2018-09-08

[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/,如需轉載,請註明出處,否則將追究法律責任。