马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
x
一样平常记载
利用到了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"
- }
- ]
- }
- }
复制代码 免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |