当前位置: 代码迷 >> Oracle技术 >> 请问一个procedure的写法
  详细解决方案

请问一个procedure的写法

热度:76   发布时间:2016-04-24 08:39:40.0
请教一个procedure的写法
小弟正在研究procedure,有一个问题需要解决

create table TableA (
  A_id number ,
  name varchar2(1024) ,
  uuid varchar2(36) ,
  version varchar2(50), 
  MMMM varchar2(40),
  NNNN varchar2(50),
  B_id number , // 新加的字段,全部为空
  primary key (A_id)
);

create table TableB (
  B_id number , 
  name varchar2(1024) , 
  uuid varchar2(36),
  version varchar2(50),  
  primary key (B_id)
);

TableA 是一张已经存在的表,里面有约 10 万条数据。 现在建一张新表 TableB, 表之间的关系是这样的。B_id将作为 TableA 的外键。
TableA 的数据中 uuid + version 的配对有很多是重复的,现在要把 重复的数据 提取到 TableB 里面。 
现在需要写一个 procedure ,首先扫描 TableA, 将 unique( uuid + version ) 的数据写到 TableB 里面,然后在回过来将 B_id 填入到 TableA 中。

希望各位大虾帮忙。

------解决方案--------------------
SQL code
--创建表create table TableA (  A_id number ,  name varchar2(1024) ,  uuid varchar2(36) ,  version varchar2(50),    MMMM varchar2(40),  NNNN varchar2(50),  B_id number , --新加的字段,全部为空  primary key (A_id));--插入数据insert into TableA(a_id, uuid, name, version) values(1, 'uid1', 'abc', 'version_1');insert into TableA(a_id, uuid, name, version) values(2, 'uid1', 'abc', 'version_1');insert into TableA(a_id, uuid, name, version) values(3, 'uid1', 'abc', 'version_1');insert into TableA(a_id, uuid, name, version) values(4, 'uid1', 'abc', 'version_1');insert into TableA(a_id, uuid, name, version) values(5, 'uid1', 'abc', 'version_1');insert into TableA(a_id, uuid, name, version) values(6, 'uid2', 'abcd', 'version_2');commit;--数据更新merge into TableA ausing (select t.*, rownum as b_id         from (select uuid, version from TableA                group by uuid, name, version) t) b   on (a.uuid = b.uuid and a.version = b.version) when matched thenupdate set a.b_id = b.b_id;commit;--数据查询select * from TableA;      A_ID NAME           UUID         VERSION        MMMM           NNNN                 B_ID---------- -------------- ------------ -------------- -------------- -------------- ----------         1 abc            uid1         version_1                                             1         2 abc            uid1         version_1                                             1         3 abc            uid1         version_1                                             1         4 abc            uid1         version_1                                             1         5 abc            uid1         version_1                                             1         6 abcd           uid2         version_2                                             2
------解决方案--------------------
由于没有数据库工具,大概写了下,可能有错误,只是个思路,你可以试试

SQL code
create or replace procedure A asbegininsert into TableB (B_id, name, uuid, version)select rownum as  B_id, name, uuid, version from(select distinct d.name, d.uuid, d.version from TableA);update TableA set B_id = (select B_id from TableB where TableB.uuid = TableA.uuid and TableB.version = TableA.version);end;
  相关解决方案