在实际应用场景中,需要通过存储过程解决批量录入,数据处理,批量返回的操作,且业务是实时的,即一次批量数据是一次性的。
针对这个场景,考虑过以下方法:使用临时缓存表,将数据处理后存入,需要使用时读取并删除;从其他业务上环节批量录入或批量返回的压力
而后确定批量一次数据量在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