posts - 5, comments - 0, trackbacks - 0, articles - 0
            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

          oracle sql 4則

          Posted on 2011-06-27 00:31 火炎炎 閱讀(189) 評論(0)  編輯  收藏
          • 如果存在就更新,不存在就插入用一個語句實現
          MERGE  INTO  t_mg a
          USING (
          SELECT   ' the code '  code,  ' the name '  NAME  FROM
           dual) b
          ON  (a.code  =
           b.code)
          WHEN  MATCHED  THEN

          UPDATE   SET  a.NAME  =  b.NAME
          WHEN   NOT  MATCHED  THEN

          INSERT  (code, NAME)  VALUES  (b.code, b.NAME);
          • 分頁算法

          SELECT   *
          FROM  ( SELECT  a. * , ROWNUM rn
          FROM  ( SELECT   *   FROM  t_employees  ORDER   BY
           first_name) a
          WHERE  ROWNUM  <=   500
          )
          WHERE  rn  >   480  ;

          • 抽取/刪除重復記錄

          1) 部分字段重復數據的刪除

          delete   from  表名 a 
          where  a.rowid  !=
           
          (
          select   max (b.rowid)  from
           表名 b 
          where  a.字段1  =  b.字段1  and
           
          a.字段2 
          =
           b.字段2 
          )

          上面語句的執行效率是很低的,可以考慮建立臨時表,講需要判斷重復的字段、rowid插入臨時表中,然后刪除的時候在進行比較。

          create   table  臨時表  as  
          select  a.字段1,a.字段2, MAX (a.ROWID) dataid  from  正式表 a  GROUP   BY
           a.字段1,a.字段2;
          delete   from
           表名 a 
          where  a.rowid  !=
           
          (
          select  b.dataid  from
           臨時表 b 
          where  a.字段1  =  b.字段1  and
           
          a.字段2 
          =
           b.字段2 
          )

          2) 完全重復記錄的刪除

          用下面語句獲取到去掉重復數據后的記錄:

          select   distinct   *   from  表名

          可以將查詢的記錄放到臨時表中,然后再將原來的表記錄刪除,最后將臨時表的數據導回原來的表中。如下:

          CREATE   TABLE  臨時表  AS  ( select   distinct   *   from  表名);
          drop   table
           正式表;
          insert   into  正式表 ( select   *   from
           臨時表);
          drop   table  臨時表;

          執行上記SQL語句,可以查尋到數據庫中的鎖的情報.

          SELECT   S.SID SESSION_ID, S.USERNAME, DECODE(LMODE,  0 ' None ' 1 ' Null ' 2 ' Row-S (SS) ' 3 ' Row-X (SX) ' ,   4 ' Share ' 5 ' S/Row-X (SSX) ' ,   6 ' Exclusive ' , TO_CHAR(LMODE)) MODE_HELD, DECODE(REQUEST,  0 ' None ' 1 ' Null ' 2 ' Row-S (SS) ' 3 ' Row-X (SX) ' 4 ' Share ' 5 ' S/Row-X (SSX) ' 6 ' Exclusive ' , TO_CHAR(REQUEST)) MODE_REQUESTED, O.OWNER || ' . ' || O. OBJECT_NAME || '  ( ' || O.OBJECT_TYPE || ' ) ' , S.TYPE LOCK_TYPE, L.ID1 LOCK_ID1, L.ID2 LOCK_ID2 
          FROM
           V$LOCK L, SYS.DBA_OBJECTS O, V$SESSION S 
          WHERE  L.SID  =  S.SID  AND   L.ID1  =  O. OBJECT_ID
          SESSION_ID, USERNAME,  MODE_HELD,  MODE_REQUESTED, OBJECT_NAME, LOCK_TYPE, LOCK_ID
          分別是 擁有鎖的SESSION_ID,擁有鎖的USERNAME,鎖的執行模式MODE_HELD,鎖的請求MODE_REQUESTED,鎖所在的數據庫對象名
          ,鎖的類型,鎖的ID

          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 阳谷县| 乌拉特前旗| 安塞县| 蒙山县| 鲜城| 奈曼旗| 保亭| 庆元县| 邻水| 天津市| 金华市| 恩施市| 舞阳县| 兴业县| 石首市| 曲阜市| 禹州市| 恩施市| 年辖:市辖区| 普宁市| 东平县| 将乐县| 阿鲁科尔沁旗| 新野县| 积石山| 武宣县| 苏州市| 武功县| 孝义市| 柳江县| 广灵县| 梓潼县| 邮箱| 惠州市| 华安县| 双牌县| 通江县| 日土县| 南皮县| 阿尔山市| 罗山县|