oracle apex post接口

news2025/2/23 6:43:07

日常记录

使用到了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"
            }
        ]
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2303796.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

百度云DeepSeek一体机:百舸、千帆和一见介绍及区别对比

百度智能云DeepSeek一体机百舸、千帆和一见,搭载昆仑芯等国产自研算力芯片,可支持在单机环境下一键部署DeepSeek R1/V3全系列模型。百度云服务器网bdyfwq.com分享百度智能云官方发布的百舸DeepSeek一体机、千帆DeepSeek一体机和一见DeepSeek一体机配置介…

【算法】直接插入排序、折半插入排序、希尔排序

1 直接插入排序 时间复杂度:O(N^2) 空间复杂度:O(1) 稳定性:稳定 元素集合越接近有序,直接插入排序算法的时间效率越高 1.1直接插入排序思想 把待排序的记录按其关键码值的大小逐个插入到一个已经排好序的有序序列中&#xff…

使用API有效率地管理Dynadot域名,为域名部署DNS安全拓展(DNSSEC)

关于Dynadot Dynadot是通过ICANN认证的域名注册商,自2002年成立以来,服务于全球108个国家和地区的客户,为数以万计的客户提供简洁,优惠,安全的域名注册以及管理服务。 Dynadot平台操作教程索引(包括域名邮…

【排版教程】如何在Word/WPS中优雅的插入参考文献

材料展示 随便选取一段综述内容,以及对应的参考文献,如下图所示: 1 参考文献编辑 首先对参考文献部分进行编辑,将其设置自动编号 在段落中,选择悬挂缩进 在编号中,设置自定义编号,然后按照…

神经形态视觉的实时动态避障系统:突破传统SLAM的响应延迟瓶颈

引言:机器人感知的实时性挑战 斯坦福机器人实验室采用异步脉冲神经网络处理DVS事件相机数据后,动态障碍物响应延迟从34ms降至0.9ms。在20m复杂场景避障测试中,基于神经形态芯片的路径规划系统将SLAM更新频率提升至10kHz,较传统GP…

Linux操作系统4-进程间通信5(共享内存实现两个进程通信)

上篇文章:Linux操作系统4-进程间通信4(共享内存原理,创建,查看,命令)-CSDN博客 本篇Gitee仓库:myLerningCode/l24 橘子真甜/Linux操作系统与网络编程学习 - 码云 - 开源中国 (gitee.com) 本篇重…

RFID测温技术:电力设备安全监测的新利器

在当今高度依赖电力的现代化社会中,稳定且可靠的电力供应是社会运转的基石。电力设备作为电力系统的关键核心,其运行状态直接关乎电力供应的品质。然而,电力设备长期运行过程中,受到诸如过载、接触不良以及环境因素等多重影响&…

(一)趣学设计模式 之 单例模式!

目录 一、啥是单例模式?二、为什么要用单例模式?三、单例模式怎么实现?1. 饿汉式:先下手为强! 😈2. 懒汉式:用的时候再创建! 😴3. 枚举:最简单最安全的单例&a…

自动化办公|xlwings生成图表

在日常的数据分析和报告生成中,Excel图表是一个非常重要的工具。它能够帮助我们直观地展示数据,发现数据中的规律和趋势。然而,手动创建和调整图表往往耗时且容易出错。幸运的是,借助Python的xlwings库,我们可以自动化…

Docker基于Ollama本地部署大语言模型

一、Ollama介绍 Ollama 是一个开源的大型语言模型(LLM)平台,旨在简化大型语言模型在本地环境中的运行、管理和交互。通过Ollama,用户可以轻松加载和使用各种预训练的语言模型,执行诸如文本生成、翻译、代码编写、问答…

centos9安装k8s集群

以下是基于CentOS Stream 9的Kubernetes 1.28.2完整安装流程(containerd版): 一、系统初始化(所有节点执行) # 关闭防火墙 systemctl disable --now firewalld# 关闭SELinux sed -i "s/SELINUXenforcing/SELINU…

pytest下allure

import pytestdef test_case01():用例01~print(用例01)class Test_mokuai01:def test_case02(self):用例02~print(用例02)if __name____main__:#pytest.main([-vs,test_sample-2.py])pytest.main([-vs,test_sample-2.py,--allure-dir,./result2])#生成allure报告,参…

JVM预热

阿里电商平台每年的各种大促活动,对于Java技术来说,其中重要一个操作环节就是预热操作。 目录 预热是什么?为什么要预热? java 程序不预热和预热的调用对比 预热是什么? 预热是指,在 JVM 启动后&#xff0…

【JavaWeb12】数据交换与异步请求:JSON与Ajax的绝妙搭配是否塑造了Web的交互革命?

文章目录 🌍一. 数据交换--JSON❄️1. JSON介绍❄️2. JSON 快速入门❄️3. JSON 对象和字符串对象转换❄️4. JSON 在 java 中使用❄️5. 代码演示 🌍二. 异步请求--Ajax❄️1. 基本介绍❄️2. JavaScript 原生 Ajax 请求❄️3. JQuery 的 Ajax 请求 &a…

网页制作06-html,css,javascript初认识のhtml如何建立超链接

超链接有外部链接、电子邮件链接、锚点链接、空链接、脚本链接 一、内部链接 与自身网站页面有关的链接被称为内部链接 1、创建内部链接 1&#xff09;语法&#xff1a; <a href"链接地址"> …… </a> 2&#xff09;举例应用&#xff1a; 3&#xf…

代码讲解系列-CV(七)——前沿论文复现

文章目录 一、论文速览1.1 确定baseline1.2 DepthMaster: Taming Diffusion Models for Monocular Depth Estimation 二、数据环境搭建2.1 环境搭建2.2 数据权重 三、推理debug3.1 单图推理3.2 数据集验证 四、模型训练4.1 数据读取4.2 训练流程 五、作业 一、论文速览 1.1 确…

数据库面试知识点总结

目录 1. MySQL 基础题1.1 执行⼀条 select / update 语句&#xff0c;在 MySQL 中发生了什么&#xff1f;1.2 MySQL 一行记录是怎么存储的&#xff1f; 2. 三大范式3. 数据库引擎3.1 Innodb3.2 MyISAM 4. 数据库索引4.1 索引分类4.2 索引优缺点4.3 索引使用场景4.4 优化索引方法…

1.25作业

1easytornado SSTI——tornado模板 hints.txt&#xff1a;在/fllllllllllllag里&#xff1b;计算filehash的方法&#xff08;需要cookie_secret,对filename进行md5拼接再第二次md5&#xff09; ?filename/hints.txt&filehash{ {2*3}}&#xff0c;跳转到另一个页面 存在且…

Power Query M函数

文章目录 三、PQ高阶技能&#xff1a;M函数3.1 M函数基本概念3.1.1 表达式和值3.1.2 计算3.1.3 运算符3.1.4 函数3.1.5 元数据3.1.6 Let 表达式3.1.6 If 表达式3.1.7 Error 3.2 自定义M函数3.2.1 语法3.2.2 调用定义好的自定义函数3.2.3 直接调用自定义函数3.2.4 自定义函数&am…

python argparse 解析命令行参数

可选参数 带 - 或者 -- 的参数都是可选参数&#xff0c;如果命令行不输入&#xff0c;得到的结果是 None 参数名只能使用下划线&#xff0c;不能使用中划线 default&#xff1a; 设置默认值 action&#xff1a; 默认是 store 方法&#xff0c;常用的是 store_true 命令行出…