j_param json; jl_keys json_list; -- 创建json对象j_param j_param := json(p_in_str); -- 校验param域是否缺少必填参数 jl_keys := json_list(\'["userId","queryId", "tCardNo","cardNo","cardPwd"]\'); if false = json_util_extra.containKeys(j_param, jl_keys) then p_out_str := \'{"resultCode":"30", "resultMsg":"param域Json缺少必填参数"}\'; return; end if;
创建package
create or replace package json_util_extra is function containKeys(p_v1 json, p_v2 json_list, exact boolean default false) return boolean; function containEmptyValues(p_v1 json, p_v2 json_list, exact boolean default false) return boolean; end json_util_extra;
创建 package body
create or replace package body json_util_extra is function containKeys(p_v1 json, p_v2 json_list, exact boolean) return boolean as begin for i in 1 .. p_v2.count loop if (not p_v1.exist(p_v2.get(i).get_string)) then return false; end if; end loop; return true; end; function containEmptyValues(p_v1 json, p_v2 json_list, exact boolean) return boolean as v_key varchar2(1024); begin for i in 1 .. p_v2.count loop v_key := p_v2.get(i).get_string; if (not p_v1.exist(v_key)) then return false; end if; if (p_v1.get(v_key).value_of is null) then return false; end if; end loop; return true; end; begin -- Initialization null; end json_util_extra;
-- 获取字符串类型 json_ext.get_string(j_param, \'queryId\'); -- 获取数字类型 json_ext.get_number(j_param, \'userId\');
-- 生成标准md5 CREATE OR REPLACE FUNCTION MD5(V_INPUT_STRING IN VARCHAR2) RETURN VARCHAR2 IS BEGIN RETURN LOWER(UTL_RAW.CAST_TO_RAW(DBMS_OBFUSCATION_TOOLKIT.MD5(INPUT_STRING => V_INPUT_STRING))); END MD5;
-- select md5(1) from dual
v_sqltext := \'select e.card_type as "cardType", case when e.card_type=to_char(\'\'100\'\') then to_char(\'\'获得卡片\'\') when e.card_type=to_char(\'\'101\'\') then to_char(\'\'购买\'\') when e.card_type=to_char(\'\'102\'\') then to_char(\'\'查看卡密\'\') when e.card_type=to_char(\'\'103\'\') then to_char(\'\'解绑\'\') when e.card_type=to_char(\'\'104\'\') then to_char(\'\'送出\'\') when e.card_type=to_char(\'\'105\'\') then to_char(\'\'取消赠送\'\') when e.card_type=to_char(\'\'106\'\') then to_char(\'\'赠送退回\'\') when e.card_type=to_char(\'\'107\'\') then to_char(\'\'获赠\'\') when e.card_type=to_char(\'\'108\'\') then to_char(\'\'解绑找回\'\') when e.card_type=to_char(\'\'109\'\') then to_char(\'\'提货申请\'\') else to_char(\'\'其它\'\') end "cardTypeName", e.mark as "mark", to_char(e.opt_date,\'\'yyyy-mm-dd hh24:mi:ss\'\') as "optDate" from (select d.*, rownum as rn from (select ubcl.card_type,ubcl.mark,ubcl.opt_date from xshe_user_band_card_log ubcl where ubcl.user_id =\' || v_user_id || \' and ubcl.card_no =\'\'\' ||v_card_no ||\'\'\' and ubcl.status = 1 order by ubcl.opt_date asc,ubcl.id asc ) d where rownum <= \' || v_end_rownum || \') e where rn > \' || v_begin_rownum; -- update huzhiyang 2019-10-14 10:38:47 ,卡号为字符串 -- 执行SQL语句并返回josn_list数据 jl_card_list := json_dyn.executeList(v_sqltext); -- 拼接字符串时注意引号数量
-- 拼接json p_out_str := \'{"resultCode":"\' || v_ret || \'", "resultMsg":"\' || v_des || \'","page":"\' || v_page || \'","pageSize":"\' || v_page_size || \'","totalPage":"\' ||v_total_page || \'","totalCount":"\' ||v_total_count || \'",\' || v_single_info || \'}\';
-- 打印输出错误信息 DBMS_OUTPUT.put_line(\'sqlcode : \' ||sqlcode); DBMS_OUTPUT.put_line(\'sqlerrm : \' ||sqlerrm);
-- 创建数组 type card_no_tab is table of varchar2(2000) index by BINARY_INTEGER; v_card_no_tab_info card_no_tab; v_card_no_tab_info(vv_count) := \'{"cardNo":"\' || r.cardNo || \'","background":"\' ||r.background || \'"}\'; for k in 1 .. vv_count loop if k < vv_count then v_single_info := v_single_info || v_card_no_tab_info(k) || \',\'; else v_single_info := v_single_info || v_card_no_tab_info(k); end if; end loop;