以下存储过程将数据库表中的clob类型字段(存储的内容为对应Json格式数据)读取出来,对其解析,进行相关业务操作

CREATE OR REPLACE PROCEDURE xq_midso_gen(p_id IN NUMBER) AS

----------------------------------------------------------

--author:xy

--date:20180627

--description:

/*

FOR (查询实际表[订单接口 XQ_MIDSO]中的[是否生成订单]为Y的记录) LOOP

根据接口信息的json信息生成未提交的发货订单。

生成发货订单头表:

单据日期取SYSDATE。

订单类型取新货订单。

发货店仓取总部店仓。

收货店仓取接口中的customer_name对应的经销商下的任一店仓(根据名称匹配)。

鲜桥订单编码取接口中的ordercode。

备注:由鲜桥接口自动生成!

调用存储过程:B_SO_AC。

生成发货订单明细:

条码、款号、ASI取接口中的product_name对应条码的值。

数量取接口中的amount。

调用存储过程:B_SOITEM_ACM。

调用存储过程:B_SO_AM。

END LOOP;

*/

/*

*/

----------------------------------------------------------

v_injson json; --用于将接口信息转换为json格式

v_b_so_id b_so.id%TYPE; --要使用的发货订单ID

v_b_so_docno b_so.docno%TYPE; --发货订单据编号

v_table_id ad_table.id%TYPE; --发货订单m_agtpur表的id

v_ordercode b_so.xq_ordercode%TYPE; --发货订单鲜桥订单编码

v_c_store_id c_store.id%TYPE; --总部店仓ID

v_customer_name c_customer.name%TYPE; --订单头信息中的经销商名称

v_cc_store_id c_store.id%TYPE; --经销商下任一id

v_delivery_time VARCHAR2(20); --配送时间(发货日期)

v_delivery_time1 NUMBER(8); --配送时间(发货日期)

v_delivery_address b_so.dest_address%TYPE; --收货地址

v_amount b_soitem.qty%TYPE; --数量

v_bodylist json_list; --订单明细信息列表

v_onejson json; --用于解析每一个明细数据

v_m_product_id m_product.id%TYPE; --款号

v_m_productalias_name m_product_alias.no%TYPE; --条码名

v_m_productalias_id m_product_alias.id%TYPE; --条码id

v_asi b_soitem.m_attributesetinstance_id%TYPE; --asi

v_b_soitem_id b_soitem.id%TYPE; --发货订单明细id

v_code NUMBER(3);

v_message VARCHAR2(500);

v_clob_varchar2 VARCHAR2(4000);

BEGIN

--查询实际表[订单接口 XQ_MIDSO]中的[是否生成订单]为Y的记录

FOR v_list IN (SELECT xms.id, xms.ad_client_id, xms.ad_org_id,

xms.creationdate, xms.ownerid, xms.errormeg

FROM xq_midso xms

WHERE xms.is_so = 'Y') LOOP

BEGIN

--获取接口信息

SELECT dbms_lob.substr(xms.param)

INTO v_clob_varchar2

FROM xq_midso xms

WHERE xms.id = v_list.id;

v_injson := json(v_clob_varchar2);

--获取headerlist:orderHeader

--v_id := json_ext.get_string(v_injson, 'CallInfo.orderHeader.id');

v_ordercode := json_ext.get_string(v_injson,

'CallInfo.orderHeader.ordercode');

v_customer_name := json_ext.get_string(v_injson,

'CallInfo.orderHeader.customer_name');

v_delivery_time := substr(json_ext.get_string(v_injson,

'CallInfo.orderHeader.delivery_time'),

1, 10);

v_delivery_time1 := to_number(REPLACE(v_delivery_time, '-', ''));

v_delivery_address := json_ext.get_string(v_injson,

'CallInfo.orderHeader.delivery_address');

--获取表b_so的id

SELECT id

INTO v_table_id

FROM ad_table

WHERE NAME = upper('b_so');

--自动生成单据编号

SELECT t.sequencename

INTO v_b_so_docno

FROM ad_column t

WHERE t.ad_table_id = v_table_id

AND t.dbname = 'DOCNO';

v_b_so_docno := get_sequenceno(v_b_so_docno, v_list.ad_client_id);

--获取要使用的发货订单id

v_b_so_id := get_sequences('B_SO');

--获取总部店仓ID

SELECT cs.id

INTO v_c_store_id

FROM c_store cs

WHERE cs.name = '总部仓库'

AND cs.ad_client_id = v_list.ad_client_id;

BEGIN

--获取对应经销商下任一店仓ID:v_cc_store_id

SELECT nvl(cs.id, 0)

INTO v_cc_store_id

FROM c_store cs

JOIN c_customer ccu

ON (cs.c_customer_id = ccu.id AND ccu.name = v_customer_name)

WHERE rownum <= 1;

EXCEPTION

WHEN no_data_found THEN

v_cc_store_id := NULL;

END;

/*

生成发货订单头表:

单据日期取SYSDATE。

订单类型取新货订单。

发货店仓取总部店仓。

收货店仓取接口中的customer_name对应的经销商下的任一店仓(根据名称匹配)。

鲜桥订单编码取接口中的ordercode。

备注:由鲜桥接口自动生成!

调用存储过程:B_SO_AC。

*/

--dbms_output.put_line('xuyang123:v_b_so_docno:' || v_b_so_docno);

BEGIN

INSERT INTO b_so

(id, billdate, docno, doctype, c_store_id, c_dest_id,

xq_ordercode, predateout, dest_address, description,

ad_client_id, ad_org_id, ownerid, creationdate, status,

isactive)

VALUES

(v_b_so_id, to_number(to_char(SYSDATE, 'yyyymmdd')),

v_b_so_docno, 'FWD', v_c_store_id, v_cc_store_id,

v_ordercode, v_delivery_time1, v_delivery_address,

'由鲜桥接口自动生成!', v_list.ad_client_id, v_list.ad_org_id,

v_list.ownerid, SYSDATE, 1, 'Y');

EXCEPTION

WHEN OTHERS THEN

dbms_output.put_line('(debug)订单接口记录id:' || v_list.id ||

',生成发货订单发生异常:' || SQLERRM);

CONTINUE;

END;

--调用存储过程:B_SO_AC。

BEGIN

b_so_ac(v_b_so_id);

EXCEPTION

WHEN OTHERS THEN

dbms_output.put_line('发货订单记录id:' || v_b_so_id ||

',调用发货订单ac程序b_so_ac发生异常:' || SQLERRM);

END;

/*获取明细数据,插入到发货订单明细表*/

/*

生成发货订单明细:

条码、款号、ASI取接口中的product_name对应条码的值。

数量取接口中的amount。

调用存储过程:B_SOITEM_ACM。

调用存储过程:B_SO_AM。

*/

v_bodylist := json_list();

v_onejson := json();

--获取body:orderBody

v_bodylist := json_ext.get_json_list(v_injson, 'CallInfo.orderBody');

--循环获取明细数据,并插入数据库中

FOR idx IN 1 .. v_bodylist.count LOOP

--读取每个明细信息

v_onejson := json(v_bodylist.get_elem(idx));

v_m_productalias_name := json_ext.get_string(v_onejson,

'product_name');

v_amount := to_number(json_ext.get_string(v_onejson, 'amount'));

--获取品名对应的款号,条码,asi

BEGIN

SELECT mpa.id, mpa.m_product_id,

mpa.m_attributesetinstance_id

INTO v_m_productalias_id, v_m_product_id, v_asi

FROM m_product_alias mpa

WHERE mpa.no = v_m_productalias_name;

EXCEPTION

WHEN no_data_found THEN

dbms_output.put_line('条码:' || v_m_productalias_name ||

',在条码档案中不存在!');

CONTINUE;

END;

--获取即将使用的发货订单明细记录id

v_b_soitem_id := get_sequences('bo_soitem');

--插入发货订单明细表

INSERT INTO b_soitem

(id, b_so_id, m_productalias_id, m_product_id,

m_attributesetinstance_id, qty)

VALUES

(v_b_soitem_id, v_b_so_id, v_m_productalias_id,

v_m_product_id, v_asi, v_amount);

--调用存储过程:B_SOITEM_ACM

BEGIN

b_soitem_acm(v_b_soitem_id);

EXCEPTION

WHEN OTHERS THEN

dbms_output.put_line('发货订单明细记录id:' || v_b_soitem_id ||

',调用发货订单明细acm程序b_soitem_acm发生异常:' ||

SQLERRM);

END;

--调用存储过程:B_SO_AM

BEGIN

b_so_am(v_b_so_id, v_code, v_message);

EXCEPTION

WHEN OTHERS THEN

dbms_output.put_line('发货订单记录id:' || v_b_so_id ||

',调用发货订单am程序B_SO_AM发生异常:' ||

SQLERRM);

END;

END LOOP;

--生成发货订单后,更新订单接口xq_midso当前记录is_so为‘N’

UPDATE xq_midso xms

SET xms.is_so = 'N'

WHERE xms.id = v_list.id;

COMMIT;

EXCEPTION

WHEN OTHERS THEN

dbms_output.put_line('订单接口记录id:' || v_list.id ||

',生成发货订单发生异常:' || SQLERRM);

END;

END LOOP;

END;

sql解析json oracle,oracle 11g plsql解析json数据示例1相关推荐

  1. oracle 实例多一些的书,Oracle+Database+11g+PLSQL编程实战(书+源码)

    [实例简介] Oracle+Database+11g+PLSQL编程实战(书+源码) [实例截图] [核心代码] OracleDatabase11gPLSQL编程实战(书源码) ├── Oracle ...

  2. oracle database 11g plsql 程序设计,oracle-database-11g-plsql-编程实战笔记

    Chap1 DML语句是select .insert.update.delete和merge DDL语句是create.alter.drop.rename.truncate.comment DCL语句 ...

  3. oracle 051考试,OCP/OCA认证考试指南全册Oracle Database 11g(1Z0-051,1Z0-052,1Z0-053)练习与知识点...

    第一章 Oracle Database 11g体系结构概述 本章学习内容 解释内存结构 描述进程结构 讲述存储结构 练习1-1 研究所在环境的DRMS 确定自己所在的环境使用的应用程序.应用服务器和数 ...

  4. Oracle 11g+PLSQL Developer+SQL Developer+JDK 详细安装教程

    转载请注明出处:Oracle 11g+PLSQL Developer+SQL Developer+JDK 详细安装教程 Oracle Database 11g Release2 for Windows ...

  5. Oracle Database 11g : ocp之SQL 基础

    Oracle Database 11g : SQL 基础 第一章:使用SQL SELECT 语句检索数据 使用的表 1.空值 2:列别名 1:定义列别名 2:使用列别名 select FIRST_NA ...

  6. oracle 搭建dg步骤解析

    如果搭建dg 先安装主库database 并建库,同时建备库database 软件,不需要建库. 1 主库打开归档功能 启动到mount状态下,打开归档功能alter database archive ...

  7. Oracle I/O问题解析

    Oracle IO问题解析 数据库的作用就是实现对数据的管理和查询.任何一个数据库系统,必然存在对数据的大量读或者写或者两中操作都大量存在.IO问题也往往是导致数据库性能问题的重要原因.在这篇文章中, ...

  8. PL/SQL Developer连接本地Oracle 11g 64位数据库和快捷键设置

    1.登录PL/SQL Developer 这里省略Oracle数据库和PL/SQL Developer的安装步骤,注意在安装PL/SQL Developer软件时,不要安装在Program Files ...

  9. win7 64位操作系统中Oracle 11g + plsql安装教程详解(图解)

    这篇文章主要介绍了win7 64位操作系统中Oracle 11g + plsql安装教程详解(图解),详细的介绍了Oracle 11g 安装的步骤,有兴趣的可以了解一下. 先去网上把下面列表里的文件下 ...

最新文章

  1. java中的文件_JAVA中文件的操作
  2. 计算机仿真实训操作开车步骤,仿真实训系统解决方案
  3. es6删除数组某一项_javascript基础系列:数组常用方法解析
  4. C#中使用资源文件保存图片和皮肤文件的使用
  5. 前端经典面试题 不经典不要star!
  6. DVWA File Inclusion——Writeup
  7. Android ProgressBar手动控制开始和停止
  8. 幸福的源泉:Life is about choices 幸福可以选择
  9. The word 'localhost' is not correctly spelled 这个问题怎么解决
  10. Google搜索技巧终极收集
  11. 黑马python在线培训
  12. windows server 2016云主机如何挂载云硬盘
  13. fnl数据下载之requests,urllib等安装
  14. html仿微信评论输入框,简单仿微信朋友圈评论功能
  15. python智力问答游戏_Python语言编写智力问答小游戏功能
  16. 一位经贸学姐从点工到测试主管的心路历程(一)
  17. adwords与adsence
  18. 微信小程序--开发者工具
  19. 韩国 naver web网页版第三方登录 naver网页登录
  20. 华为OD机试 - 相对开音节(C 语言解题)【独家】

热门文章

  1. App设计灵感之十二组精美的外卖App设计案例
  2. 2013\National _C_C++_A\1.填算式
  3. Matrix工作室人事管理规章
  4. python核心编程:web服务器日志分析简单脚本
  5. Python创建单例模式的5种方法
  6. 11.1 JavaScript介绍
  7. 并发编程——线程——理论知识
  8. 智宇科技 ZYARJX-1机械臂智能小车 —— 手机端蓝牙控制程序
  9. 机器学习——01、机器学习的数学基础1 - 数学分析
  10. Ubuntu14.04 ROS Indigo安装教程,以及卸载方法