需要把一个表A的数据添加到另外一张表B里面
表A是从EXCEL表导入的表头和数据,很没有规律,字段都是不同的,很很多多余的字段,相当于只是一个临时表.
表B是需要用到的表
添加进来的时候需要注意,例如:表A里面有个字段为 人员(varchar2) 对应是表B里面的 userid(integer)
需要把 "人员" 为"张三"的添加到B"userid"换成 "15" (另外有一张专门的人员表,数据要对应的,这个表数据是固定的)
各位用存储过程怎么写啊,刚用ORACLE用的工具是 PL/SQL Developer,也不怎么熟悉,不知道有没自带的工具,各位麻烦帮帮忙,存储过程最好能运行的,我对存储过程也是刚接触.谢谢大家了表基本这样子的
表A
字段 编号 人员 地址 公司 生日
值 01 张三 广州 A公司 1999
02 张三 广州 A公司 1999
03 李四 深圳 B公司 1999
04 王五 深圳 B公司 1999表B
字段 ID userid address company
值 导入的ID+10000 15 广州 101
导入的ID+10000 15 广州 101
导入的ID+10000 16 深圳 102
导入的ID+10000 17 深圳 102
表A是从EXCEL表导入的表头和数据,很没有规律,字段都是不同的,很很多多余的字段,相当于只是一个临时表.
表B是需要用到的表
添加进来的时候需要注意,例如:表A里面有个字段为 人员(varchar2) 对应是表B里面的 userid(integer)
需要把 "人员" 为"张三"的添加到B"userid"换成 "15" (另外有一张专门的人员表,数据要对应的,这个表数据是固定的)
各位用存储过程怎么写啊,刚用ORACLE用的工具是 PL/SQL Developer,也不怎么熟悉,不知道有没自带的工具,各位麻烦帮帮忙,存储过程最好能运行的,我对存储过程也是刚接触.谢谢大家了表基本这样子的
表A
字段 编号 人员 地址 公司 生日
值 01 张三 广州 A公司 1999
02 张三 广州 A公司 1999
03 李四 深圳 B公司 1999
04 王五 深圳 B公司 1999表B
字段 ID userid address company
值 导入的ID+10000 15 广州 101
导入的ID+10000 15 广州 101
导入的ID+10000 16 深圳 102
导入的ID+10000 17 深圳 102
字段 编号 人员 地址 公司 生日 拥有会员卡号
值 01 张三 广州 A公司 1999 11
02 张三 广州 A公司 1999 22
03 李四 深圳 B公司 1999 33
04 王五 深圳 B公司 1999 44表B
字段 ID userid address company cardID
值 导入的ID+10000 15 广州 101 11
导入的ID+10000 15 广州 101 22
导入的ID+10000 16 深圳 102 33
导入的ID+10000 17 深圳 102 44
create or replace procedure sp_import
as
i_count int;
strID varchar2(10); --新的ID
i_userid int; --UserID
strComp varchar2(10); --公司ID
strsql varchar2(4000);
begin
for r in (select * from A) loop
--判断会员卡
select count(*) into i_count from B where cardID = r.拥有会员卡号; if i_count = 0 then
strID := to_char(to_number(r.编号) + 10000);
select userid into i_userid from table where name = r.人员; --这个表你没提供,自己对着改
select company into strComp from tableCompany where name = r.公司; --这个表你也没提供,自己对着改
strsql := 'insert into B(ID,userid,address,company,cardID) ' ||
' values (''' || strID || ''',' || i_userid || ',''' || r.地址 ||
''',' || strComp || ',' || r.拥有会员卡号 || ')';
execute immediate strsql;
end if;
end loop;
commit;
exception
when others then
--异常处理,自己写想要写什么吧
end;
--基本思路就是这样了,自己再调调试试
业务简单的就不用存储过程了WITH TA AS
(SELECT '01' AS 编号,'张三' AS 人员, '广州' AS 地址, 'A公司' AS 公司, '1999' AS 生日, '11' AS 拥有会员卡号 FROM DUAL UNION
SELECT '02', '张三', '广州', 'A公司', ' 1999', '22' FROM DUAL UNION
SELECT '03', '李四', '深圳', 'B公司', ' 1999', '33' FROM DUAL UNION
SELECT '04', '王五', '深圳', 'B公司', ' 1999', '44' FROM DUAL ),
T_USER AS (SELECT 15 AS userid, '张三' AS 人员 FROM DUAL UNION
SELECT 16 AS userid, '李四' AS 人员 FROM DUAL UNION
SELECT 17 AS userid, '王五' AS 人员 FROM DUAL ),
T_company AS (SELECT 101 AS company, 'A公司' AS 公司 FROM DUAL UNION
SELECT 102 AS company, 'B公司' AS 公司 FROM DUAL)
SELECT TA.编号 + 10000 AS ID,
T_USER.userid,
TA.地址 AS address,
T_company.company,
TA.拥有会员卡号 AS cardID
FROM TA
LEFT JOIN T_USER
ON TA.人员 = T_USER.人员
LEFT JOIN T_company
ON TA.公司 = T_company.公司