业务需求:
今天领导要求后天批量插入修改数据,将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;
就是如此简单的存储过程就能搞定批量处理,若是遇到一条条查询插入,就可以考虑用存储过程游标。
收工!