1. 程式人生 > >Oracle 儲存過程小結 遊標 ,隨機生成UUID(32位)

Oracle 儲存過程小結 遊標 ,隨機生成UUID(32位)

 

 

業務需求:

           今天領導要求後天批量插入修改資料,將A表中的資料一條條的插入到B表中,中間還夾雜這業務邏輯。

 技術需求:

           若考慮到一條一條 插入,就想到了Oracle 儲存過程遊標這一功能

 

技術實現: 

第一步: 建立函式,自動生成UUID 32位

CREATE OR REPLACE  -- 建立一個函式function,返回UUID
FUNCTION get_uuid
RETURN VARCHAR
IS
guid VARCHAR (50);
BEGIN
guid := upper(RAWTOHEX(sys_guid()));
RETURN
substr(guid,1,8)||substr(guid,9,4)||substr(guid,13,4)||substr(guid,17,4)||substr(guid,21,12);
END get_uuid;
SELECT GET_UUID FROM DUAL; --測試SQL,非常實用
   create or replace procedure PLCL is    --建立儲存過程,批量處理PLCL

          cursor swjgdm_1 is     -- 建立遊標,這個就是一個結果集,就是類似於for迴圈中的length
            SELECT t.swjg_dm FROM dm_gy_swjg t;

        begin
          for A in swjgdm_1 loop   --開始遊標遍歷,迴圈插入,
                                   --此時可以用結果集中的資料 如A.swjgdm
          
            begin
              insert into QX_SWJG_GW
                (GWXH,
                 GW_DM,
                 SWJG_DM,
                 LRRQ,
                 LRR_DM,
                 XGRQ,
                 XGR_DM,
                 YXBZ,
                 XSXH,
                 SJLY,
                 SJGL_TBSJ)
              values
                (GET_UUID,
                 '241000000001212', -- 崗位程式碼 需要填入新生成的崗位程式碼 
                 A.swjg_dm,
                 to_date('05-05-2015 05:05:05', 'dd-mm-yyyy hh24:mi:ss'),
                 '24104900020',
                 null,
                 '',
                 'Y',
                 '1',
                 '02',
                 '17-2月 -17 06.18.35.064002 下午');
            
            end;
          end loop;
        end PLCL;

   就是如此簡單的儲存過程就能搞定批量處理,若是遇到一條條查詢插入,就可以考慮用儲存過程遊標。

   收工!