Oracle存储过程 自定义类型,集合读取

emp.ename%type表示声明变量v_ename与emp表中的ename字段类型相同https://my.oschina.net/lujianing/blog/207482
摘要由CSDN通过智能技术生成

在实际应用场景中,需要通过存储过程解决批量录入,数据处理,批量返回的操作,且业务是实时的,即一次批量数据是一次性的。

针对这个场景,考虑过以下方法:使用临时缓存表,将数据处理后存入,需要使用时读取并删除;从其他业务上环节批量录入或批量返回的压力

而后确定批量一次数据量在200条内,此存储的调用比较频繁,存在被多处调用的情况。

考虑实际,如果使用临时表频繁读写删数据,可能会出现锁数据的情况;在业务上通过其他环节来找补也是下策。

最后确定了使用自定义数据类型和类型集合缓存处理好的数据,整体方案:将录入的格式约定成字符串,数据处理后缓存在集合,最后游标遍历集合返回数据。


自定义数据格式类型

-- 定义需要的数据类型,类似编程中的类
create or replace Type Check_Record
Is Object(P_Id NUMBER,V_Code Varchar2(2),V_Message NVARCHAR2(50))

-- 定义类型的集合,类似编程中的列表
create or replace Type PrescriptionCheck_Table  
Is Table Of PrescriptionCheck_Record

使用自定义类型,并通过游标返回类型列表信息

create or replace PROCEDURE p_check_refund_state (
    in_str   VARCHAR2, --输入字符串,格式:类型,ID;类型,ID...
    scur     OUT SYS_REFCURSOR -- 返回值
) IS
    --临时变量
    v_tempStr           VARCHAR(1000); -- 缓存解析字符串
    v_temp_in_str       VARCHAR(1000); -- 缓存输入字符串
    v_count_begin       int; -- 临时计数
    v_count_end         int
  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值