如何写一个简单的oracle存储过程

有朋友问我oracle存储过程怎么写?游标怎么写?游标如何控制批次,分批次提交?

我稍稍回忆了一下,刚好写博客里,有需要的可以参考了解。直接上代码+注释,仅做参考。
朋友他没装plsql develper,我也没有,哈哈,盲敲盲改,最后总算改好了。连接oracle神器,大家经常用的话,自己装一下,可以清晰标黄提示错误信息等,很方便。

-- 建议大家第一次创建sp的时候用create。后面移交部署用创建并且替换,注意不要和之前的名字重复了。
CREATE OR REPLACE PROCEDURE stored_procedure_name(
    -- 入参名称,当然也可以根据需要加入in out关键字
    in_parameter varchar2
)
is
-- 自定义变量 
page_size int;
now timestamp;
plan_id varchar2(50);
-- 自定义游标
type cursors is ref cursor;
cur cursors;
-- 自定义结果集
type COLLECTION_T_XXX is table of table_name%rowtype;
C_T_SRV_PRICE_PLAN COLLECTION_T_XXX;
BEGIN 
    -- 设置一次fetch多少条数据
    page_size:=1000;
    -- 打开游标
    open cur for SELECT * FROM table_name 
    WHERE CREATE_TIME <TO_TIMESTAMP('2020-12-12 00:00:00','YYYY-MM-DD HH24:MI:SS') AND  ACTIVE ='Y';
    -- 开启外层游标cur循环
    loop
    -- 提前判断游标是否结束
    exit when cur%notfound;
    -- 批量获取游标里面数据,这里设置一次获取1000条
    fetch cur bulk collect into C_T_SRV_PRICE_PLAN limit page_size;
        -- 开启内层隐式游标,循环我们拿到的1000条数据
    	for i in 1..C_T_SRV_PRICE_PLAN.count loop
           -- 这里很简单,但很重要。初始化游标里面需要的变量值,避免拿到上一次的赋值。
    	   plan_id := null;
           -- 下面是业务逻辑,手动打码,根据自己需要填充。
           -- 结束内层隐式游标
    	   end loop;
    	-- 分批次提交
    	commit;
    -- 结束外层游标循环
    end loop;
    -- 关闭外层游标
    close cur;
-- 结束存储过程
END stored_procedure_name;
-- 标准的完整语句要加/,结束标志。
/
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值