求一存储过程,从一个表根据一字段,导入到另一个表中,该字段有就更新,没有就添加,在算出更新几条,添加几条
本帖最后由 kll329582600 于 2013-09-18 22:34:50 编辑
-- Create table
CREATE TABLE order_info
(
order_code VARCHAR2(10),
item_name VARCHAR2(10),
item_price NUMBER,
operate_name VARCHAR2(10),
operate_date DATE
);
CREATE TABLE order_info_all AS
SELECT order_code, item_name, item_price FROM order_info WHERE 1=0;
BEGIN
INSERT INTO order_info_all
SELECT '001', '铅笔', 10 FROM dual UNION ALL
SELECT '002', '钢笔', 20 FROM dual UNION ALL
SELECT '003', '毛笔', 30 FROM dual;
INSERT INTO order_info
SELECT '003', '毛刷笔', 20, '张三', SYSDATE FROM dual;
END;
/*
根据字段 order_code 判断
结果如下:order_info 表:
001铅笔10导入人导入时间
002钢笔20导入人导入时间
003毛笔30导入人导入时间
新增 2 条,更新 1 条。
*/
[解决办法]
看看merger 函数
[解决办法]
没有环境,就手写一个给你吧,如果有问题,远程给你调试吧,看符合你的需求不
create or replace procedure testInsert(c_return out varchar2)
as
v_order_code varchar2(50);
v_item_name varchar2(50);
v_item_price varchar2(50);
v_flag number;
v_insert number;
v_update number;
cursor c_order_info is select order_code, item_name, item_price FROM order_info;
begin
v_insert:=0;
v_update:=0;
open c_order_info;
loop
fetch c_order_info into v_order_code,v_item_name,v_item_price;
exit when c_order_info%notfound;
select count(1) into v_flag from order_info_all where order_code=v_order_code;
if v_flag>=1 then
update order_info_all set item_name=v_item_name,item_price=v_item_price where order_code=v_order_code;
v_insert:=v_insert+1;
else
insert into order_info_all(order_code,item_name,item_price) values(v_order_code,v_item_name,v_item_price);
v_update:=v_update+1;
end if;
end loop;
close c_order_info;
c_return:='新增 '
[解决办法]
v_insert
[解决办法]
' 条,更新'
[解决办法]
v_update
[解决办法]
'条。';
commit;
exception when others then
rollback;
c_return:=sqlerrm;
end;