IT评测·应用市场-qidao123.com技术社区

标题: oracle apex post接口 [打印本页]

作者: 飞不高    时间: 2025-2-22 03:12
标题: oracle apex post接口
一样平常记载

利用到了apex_json方式吸收
  1. 、、、1
  2. 首先,接口通过body传递过来,成功接收到, 数据格式为 JSON_OBJECT_T
  3. l_json := JSON_OBJECT_T.parse(:body);  
  4. 这里我用参数接收到
  5. 然后 里面是包含了 "data"
  6. 我用 继续接收到这个
  7. l_data            := l_json.get_object('data');
  8. 、、、2
  9. 但是有个问题,如果是使用系统原始的 get_array('persons')  之类的,始终是报错
  10. 我只能将代码转成clob格式存放到系统的参数中
  11. V_JSON_DATA := l_data.To_Clob;
  12. 、、、3
  13. apex_json.parse(V_JSON_DATA);
  14. apex_json.parse函数来解析JSON字符串
  15. 使用 apex_json.parse(V_JSON_DATA); 将 CLOB 类型的 JSON 数据解析为 APEX 的 JSON 对象。
  16. 然后,尝试使用 apex_json.get_varchar2 函数来访问解析后的 JSON 数据。
  17. apex_json.get_varchar2 函数是线程安全的,这意味着同一时间的多个请求不会互相影响。
  18. 每个 APEX 应用程序实例(即每个用户会话)都有自己的内存空间,
  19. 因此一个会话中的 apex_json.get_varchar2 调用不会影响另一个会话中的调用。
复制代码
代码

  1. DECLARE
  2.   l_json     JSON_OBJECT_T;
  3.   l_data     JSON_OBJECT_T;
  4.   
  5.   V_JSON   JSON_OBJECT_T;
  6.   V_DATA   JSON_OBJECT_T;
  7.   V_JSON_DATA CLOB;
  8.   V_VISITORS  JSON_ARRAY_T;
  9.   V_VISITOR   JSON_OBJECT_T;
  10.   PAR_DATA_NO NUMBER;
  11.   PAR_EXISTS  NUMBER;
  12.   RETURNOBJ JSON_OBJECT_T; -- 返回
  13.   V_SQLCODE VARCHAR2(4000); -- 错误代码
  14.   V_SQLERRM VARCHAR2(4000); -- 错误内容
  15. BEGIN
  16.   
  17.   l_json := JSON_OBJECT_T.parse(:body);
  18.   -- 获取嵌套的data对象
  19.   l_data            := l_json.get_object('data');
  20.   V_JSON_DATA := l_data.To_Clob;
  21.   apex_json.parse(V_JSON_DATA);
  22.   -- 当前流程标题是否存在
  23.   SELECT COUNT(*)
  24.     INTO PAR_EXISTS
  25.     FROM TZ_FREE_TICKETS
  26.    WHERE PROCESS_TITLE = apex_json.get_varchar2('process_title')
  27.      AND DEL_FLAG = 1;
  28.   IF PAR_EXISTS > 0 THEN
  29.   
  30.     -- 获取原有批次号  
  31.     SELECT DATA_NO
  32.       INTO PAR_DATA_NO
  33.       FROM TZ_FREE_TICKETS
  34.      WHERE PROCESS_TITLE = apex_json.get_varchar2('process_title')
  35.        AND DEL_FLAG = 1;
  36.   
  37.     -- 原有数据删除,重新插入
  38.     UPDATE TZ_FREE_TICKETS
  39.        SET DEL_FLAG = 0, UPDATE_TIME = SYSDATE
  40.      WHERE PROCESS_TITLE = apex_json.get_varchar2('process_title')
  41.        AND DEL_FLAG = 1; -- 根据流程单据名称更新
  42.   
  43.   ELSE
  44.     SELECT TZ_FREE_TICKETS_DATA_NO_SEQ.NEXTVAL INTO PAR_DATA_NO FROM DUAL; -- 获取当前批次号      
  45.   END IF;
  46.   -- 插入主表数据
  47.   INSERT INTO TZ_FREE_TICKETS
  48.     (DATA_NO,
  49.      OPEN_INVOICE, -- 是否出票 是/否
  50.      APPLY_TIME, -- 申请日期
  51.      PROCESS_TITLE, -- 流程单据名称
  52.      PROCESS_NUMBER, -- OA流程编号
  53.      APPLY_DEPT, -- 申请部门
  54.      APPLY_BY, -- 申请人
  55.      FREE_TICKET_TYPE, -- 免票类型
  56.      ENTER_GARDEN_CAUSE, -- 入园事由
  57.      ENTER_GARDEN_DATE, -- 入园日期
  58.      TICKET_NAME, -- 票种名称
  59.      TICKET_PRICE, -- 门票单价
  60.      APPLY_NUM, -- 申请入园人数
  61.      FREE_TICKET_PRICE, -- 免票金额
  62.      RECIPIENT_UNIT, -- 领用人/单位
  63.      RECIPIENT_PHONE, --领用人联系电话
  64.      REMARKS, -- 备注
  65.    BUSID -- 景区 莽山221
  66.      )
  67.   VALUES
  68.     (PAR_DATA_NO,
  69.      apex_json.get_varchar2('open_invoice'),
  70.      apex_json.get_varchar2('apply_time'),
  71.      apex_json.get_varchar2('process_title'),
  72.      apex_json.get_varchar2('process_number'),
  73.      apex_json.get_varchar2('apply_dept'),
  74.      apex_json.get_varchar2('apply_by'),
  75.      apex_json.get_varchar2('free_ticket_type'),
  76.      apex_json.get_varchar2('enter_garden_cause'),
  77.      apex_json.get_varchar2('enter_garden_date'),
  78.      apex_json.get_varchar2('ticket_name'),
  79.      apex_json.get_number('ticket_price'),
  80.      apex_json.get_number('apply_num'),
  81.      apex_json.get_number('free_ticket_price'),
  82.      apex_json.get_varchar2('recipient_unit'),
  83.      apex_json.get_varchar2('recipient_phone'),
  84.      apex_json.get_varchar2('remarks'),
  85.      apex_json.get_varchar2('busid')
  86.    );
  87.   -- 插入游客信息表数据
  88.   FOR I IN 1 .. apex_json.get_count('visitors') LOOP
  89.         
  90.     INSERT INTO TZ_FREE_TICKETS_VISITOR
  91.       (DATA_NO,
  92.        VISITOR_NAME, -- 游客姓名
  93.        VISITOR_ID_NUMBER, -- 游客身份证号
  94.        ENTRY_STATUS, -- 入园状态,是 否
  95.        TICKET_ORDER_NO, -- 关联票务订单号
  96.        BUSID
  97.      )
  98.     VALUES
  99.       (PAR_DATA_NO,
  100.        apex_json.get_varchar2('visitors[%d].visitor_name', i),
  101.        apex_json.get_varchar2('visitors[%d].visitor_id_number', i),
  102.        apex_json.get_varchar2('visitors[%d].entry_status', i),
  103.        apex_json.get_varchar2('visitors[%d].ticket_order_number', i),
  104.        apex_json.get_varchar2('busid')
  105.      );
  106.   END LOOP;
  107.   COMMIT;
  108.   -- 设置返回信息
  109.   RETURNOBJ := NEW JSON_OBJECT_T;
  110.   RETURNOBJ.PUT('msg', '成功');
  111.   RETURNOBJ.PUT('code', 200);
  112.   SYS.HTP.PRINT(RETURNOBJ.TO_STRING());
  113. EXCEPTION
  114.   WHEN OTHERS THEN
  115.     V_SQLCODE := SQLCODE;
  116.     V_SQLERRM := SUBSTR(SQLERRM, 1, 2000);
  117.   
  118.     RETURNOBJ := NEW JSON_OBJECT_T;
  119.     RETURNOBJ.PUT('msg', '失败' || V_SQLERRM);
  120.     RETURNOBJ.PUT('code', 500);
  121.     SYS.HTP.PRINT(RETURNOBJ.TO_STRING());
  122. END;
复制代码
参数

  1. {
  2.     "data": {
  3.         "open_invoice": "是",
  4.         "apply_time": "2024-05-20",
  5.         "process_title": "测试流程单",
  6.         "process_number": "PR202405200001",
  7.         "apply_dept": "人力资源部",
  8.         "apply_by": "张三",
  9.         "free_ticket_type": "VIP",
  10.         "enter_garden_cause": "商务合作",
  11.         "enter_garden_date": "2024-05-22",
  12.         "ticket_name": "普通门票",
  13.         "ticket_price": 120.00,
  14.         "apply_num": 4,
  15.         "free_ticket_price": 480.00,
  16.         "recipient_unit": "合作伙伴公司",
  17.         "recipient_phone": "13800000000",
  18.         "remarks": "请尽快处理",
  19.         "busid": "221",
  20.         "visitors": [
  21.             {
  22.                 "visitor_name": "张三",
  23.                 "visitor_id_number": "123456789012345678",
  24.                 "entry_status": "是",
  25.                 "ticket_order_number": "T11111111"
  26.             },
  27.             {
  28.                 "visitor_name": "李四",
  29.                 "visitor_id_number": "123456789012345679",
  30.                 "entry_status": "是",
  31.                 "ticket_order_number": "T11111111"
  32.             },
  33.             {
  34.                 "visitor_name": "王五",
  35.                 "visitor_id_number": "123456789012345670",
  36.                 "entry_status": "是",
  37.                 "ticket_order_number": "T11111111"
  38.             },
  39.             {
  40.                 "visitor_name": "赵六",
  41.                 "visitor_id_number": "123456789012345671",
  42.                 "entry_status": "是",
  43.                 "ticket_order_number": "T11111111"
  44.             }
  45.         ]
  46.     }
  47. }
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 IT评测·应用市场-qidao123.com技术社区 (https://dis.qidao123.com/) Powered by Discuz! X3.4