设为首页 收藏本站
查看: 474|回复: 0

[经验分享] oracle存储过程带游标例子

[复制链接]

尚未签到

发表于 2016-8-10 07:13:02 | 显示全部楼层 |阅读模式
create or replace procedure sum_storage
is
plant  g_containerinv.plant%type;
sloc   g_containerinv.sloc%type;
part   g_containerinv.partno%type;
qty    g_containerinv.qty%type;
cursor c_sumqty
is
select plantid,whid,partno,sum(qtyperuom) as totalqty from g_container group by plantid,whid,partno;
vr_intoqty   c_sumqty%rowtype;            
begin
open c_sumqty;
loop
fetch c_sumqty   into vr_intoqty;
exit when c_sumqty%notfound;
plant:  = vr_intoqty.plantid;
sloc:  = vr_intoqty.whid;
part:  = vr_intoqty.partno;
qty:  = vr_intoqty.totalqty;
insert into g_containerinv(timekey, plant, sloc, partno, qty, editdate, operater)
values (to_char(sysdate,'yyyymmddhh24miss'),plant,sloc,part,qty,sysdate,'wms');
end loop;
close c_sumqty;
commit;
end sum_storage;
/
---------

CREATE OR REPLACE PROCEDURE add_sup_temp IS
v_group_id  sup_temp.group_id % TYPE;
v_item_id   sup_temp.item_id % TYPE;
v_item_name sup_temp.item_name % TYPE;
v_cnt_group NUMBER(4);
CURSOR c_product_group IS
SELECT group_id, item_id, lang, item_name, classify_id, parent_item
FROM viewA;
CURSOR c_groupCursor(p_group_id sup_acl_product_group.group_id % TYPE) IS
SELECT group_id FROM tableB;
BEGIN
DELETE FROM sup_acl_product_group;
OPEN c_product_group;
LOOP
FETCH c_product_group
INTO v_group_id, v_item_id, v_item_name;
EXIT WHEN c_product_group%NOTFOUND;
OPEN c_groupCursor(v_group_id);
LOOP
FETCH c_groupCursor
INTO v_c_group_id;
EXIT WHEN c_groupCursor%NOTFOUND;
SELECT COUNT(group_id)
INTO v_cnt_group
FROM sup_acl_product_group pg
WHERE pg.group_id = v_c_group_id
AND pg.item_id = v_item_id;
IF v_cnt_group <> 0 THEN
UPDATE sup_acl_product_group pg SET pg.last_update_time = sysdate;
ELSE
INSERT INTO sup_acl_product_group
(group_id, item_id, item_name, last_update_time)
VALUES
(v_c_group_id, v_item_id, v_item_name, sysdate);
END IF;
END LOOP;
CLOSE c_groupCursor;
END LOOP;
CLOSE c_product_group;
COMMIT;
END;



create or replace procedure p_tmp
begin
declare
cursor c_cur is
select  st.business_id            as business_id,
st.userid       as userid,
st.end_date        as end_date,
st.creation_date  as creation_date
from tableH st
where 1=1;
v_row                c_cur%rowtype;
v_business_id_t      varchar2(200);
begin
open c_cur;
loop
fetch c_cur
into v_row;
exit when c_cur%notfound;
select count(n.business_id)
into v_business_id_t
from tableM n
where n.business_id = v_row.business_id
and n.userid = v_row.userid;
if v_business_id_t = 0 then
insert into tableN
(business_id, userid, end_date, creation_date)
values
(v_row.business_id,
v_row.userid,
v_row.end_date,
v_row.creation_date);
end if;
if v_business_id_t > 0 then
update tableN t
set t.end_date = v_row.end_date
where t.business_id = v_row.business_id
and t.userid = v_row.userid;
end if;
end loop;
close c_cur;
commit;
end;
exception
when others
then
rollback;
dbms_output.put_line('异常啦');
end;

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-255574-1-1.html 上篇帖子: ORACLE DBMS_SCHEDULER -- 好贴收藏 下篇帖子: Oracle inner join和where区别
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表