主页 > 电脑硬件  > 

oracleapexpost接口

oracleapexpost接口
日常记录

使用到了apex_json方式接收

、、、1 首先,接口通过body传递过来,成功接收到, 数据格式为 JSON_OBJECT_T l_json := JSON_OBJECT_T.parse(:body); 这里我用参数接收到 然后 里面是包含了 "data" 我用 继续接收到这个 l_data := l_json.get_object('data'); 、、、2 但是有个问题,如果是使用系统原始的 get_array('persons') 之类的,始终是报错 我只能将代码转成clob格式存放到系统的参数中 V_JSON_DATA := l_data.To_Clob; 、、、3 apex_json.parse(V_JSON_DATA); apex_json.parse函数来解析JSON字符串 使用 apex_json.parse(V_JSON_DATA); 将 CLOB 类型的 JSON 数据解析为 APEX 的 JSON 对象。 然后,尝试使用 apex_json.get_varchar2 函数来访问解析后的 JSON 数据。 apex_json.get_varchar2 函数是线程安全的,这意味着同一时间的多个请求不会互相影响。 每个 APEX 应用程序实例(即每个用户会话)都有自己的内存空间, 因此一个会话中的 apex_json.get_varchar2 调用不会影响另一个会话中的调用。 代码 DECLARE l_json JSON_OBJECT_T; l_data JSON_OBJECT_T; V_JSON JSON_OBJECT_T; V_DATA JSON_OBJECT_T; V_JSON_DATA CLOB; V_VISITORS JSON_ARRAY_T; V_VISITOR JSON_OBJECT_T; PAR_DATA_NO NUMBER; PAR_EXISTS NUMBER; RETURNOBJ JSON_OBJECT_T; -- 返回 V_SQLCODE VARCHAR2(4000); -- 错误代码 V_SQLERRM VARCHAR2(4000); -- 错误内容 BEGIN l_json := JSON_OBJECT_T.parse(:body); -- 获取嵌套的data对象 l_data := l_json.get_object('data'); V_JSON_DATA := l_data.To_Clob; apex_json.parse(V_JSON_DATA); -- 当前流程标题是否存在 SELECT COUNT(*) INTO PAR_EXISTS FROM TZ_FREE_TICKETS WHERE PROCESS_TITLE = apex_json.get_varchar2('process_title') AND DEL_FLAG = 1; IF PAR_EXISTS > 0 THEN -- 获取原有批次号 SELECT DATA_NO INTO PAR_DATA_NO FROM TZ_FREE_TICKETS WHERE PROCESS_TITLE = apex_json.get_varchar2('process_title') AND DEL_FLAG = 1; -- 原有数据删除,重新插入 UPDATE TZ_FREE_TICKETS SET DEL_FLAG = 0, UPDATE_TIME = SYSDATE WHERE PROCESS_TITLE = apex_json.get_varchar2('process_title') AND DEL_FLAG = 1; -- 根据流程单据名称更新 ELSE SELECT TZ_FREE_TICKETS_DATA_NO_SEQ.NEXTVAL INTO PAR_DATA_NO FROM DUAL; -- 获取当前批次号 END IF; -- 插入主表数据 INSERT INTO TZ_FREE_TICKETS (DATA_NO, OPEN_INVOICE, -- 是否出票 是/否 APPLY_TIME, -- 申请日期 PROCESS_TITLE, -- 流程单据名称 PROCESS_NUMBER, -- OA流程编号 APPLY_DEPT, -- 申请部门 APPLY_BY, -- 申请人 FREE_TICKET_TYPE, -- 免票类型 ENTER_GARDEN_CAUSE, -- 入园事由 ENTER_GARDEN_DATE, -- 入园日期 TICKET_NAME, -- 票种名称 TICKET_PRICE, -- 门票单价 APPLY_NUM, -- 申请入园人数 FREE_TICKET_PRICE, -- 免票金额 RECIPIENT_UNIT, -- 领用人/单位 RECIPIENT_PHONE, --领用人联系电话 REMARKS, -- 备注 BUSID -- 景区 莽山221 ) VALUES (PAR_DATA_NO, apex_json.get_varchar2('open_invoice'), apex_json.get_varchar2('apply_time'), apex_json.get_varchar2('process_title'), apex_json.get_varchar2('process_number'), apex_json.get_varchar2('apply_dept'), apex_json.get_varchar2('apply_by'), apex_json.get_varchar2('free_ticket_type'), apex_json.get_varchar2('enter_garden_cause'), apex_json.get_varchar2('enter_garden_date'), apex_json.get_varchar2('ticket_name'), apex_json.get_number('ticket_price'), apex_json.get_number('apply_num'), apex_json.get_number('free_ticket_price'), apex_json.get_varchar2('recipient_unit'), apex_json.get_varchar2('recipient_phone'), apex_json.get_varchar2('remarks'), apex_json.get_varchar2('busid') ); -- 插入游客信息表数据 FOR I IN 1 .. apex_json.get_count('visitors') LOOP INSERT INTO TZ_FREE_TICKETS_VISITOR (DATA_NO, VISITOR_NAME, -- 游客姓名 VISITOR_ID_NUMBER, -- 游客身份证号 ENTRY_STATUS, -- 入园状态,是 否 TICKET_ORDER_NO, -- 关联票务订单号 BUSID ) VALUES (PAR_DATA_NO, apex_json.get_varchar2('visitors[%d].visitor_name', i), apex_json.get_varchar2('visitors[%d].visitor_id_number', i), apex_json.get_varchar2('visitors[%d].entry_status', i), apex_json.get_varchar2('visitors[%d].ticket_order_number', i), apex_json.get_varchar2('busid') ); END LOOP; COMMIT; -- 设置返回信息 RETURNOBJ := NEW JSON_OBJECT_T; RETURNOBJ.PUT('msg', '成功'); RETURNOBJ.PUT('code', 200); SYS.HTP.PRINT(RETURNOBJ.TO_STRING()); EXCEPTION WHEN OTHERS THEN V_SQLCODE := SQLCODE; V_SQLERRM := SUBSTR(SQLERRM, 1, 2000); RETURNOBJ := NEW JSON_OBJECT_T; RETURNOBJ.PUT('msg', '失败' || V_SQLERRM); RETURNOBJ.PUT('code', 500); SYS.HTP.PRINT(RETURNOBJ.TO_STRING()); END; 参数 { "data": { "open_invoice": "是", "apply_time": "2024-05-20", "process_title": "测试流程单", "process_number": "PR202405200001", "apply_dept": "人力资源部", "apply_by": "张三", "free_ticket_type": "VIP", "enter_garden_cause": "商务合作", "enter_garden_date": "2024-05-22", "ticket_name": "普通门票", "ticket_price": 120.00, "apply_num": 4, "free_ticket_price": 480.00, "recipient_unit": "合作伙伴公司", "recipient_phone": "13800000000", "remarks": "请尽快处理", "busid": "221", "visitors": [ { "visitor_name": "张三", "visitor_id_number": "123456789012345678", "entry_status": "是", "ticket_order_number": "T11111111" }, { "visitor_name": "李四", "visitor_id_number": "123456789012345679", "entry_status": "是", "ticket_order_number": "T11111111" }, { "visitor_name": "王五", "visitor_id_number": "123456789012345670", "entry_status": "是", "ticket_order_number": "T11111111" }, { "visitor_name": "赵六", "visitor_id_number": "123456789012345671", "entry_status": "是", "ticket_order_number": "T11111111" } ] } }
标签:

oracleapexpost接口由讯客互联电脑硬件栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“oracleapexpost接口