首页 > 数据库 >Using PL/SQL Object Types for JSON

Using PL/SQL Object Types for JSON

时间:2023-07-26 09:48:57浏览次数:44  
标签:OBJECT obj keys Object li JSON po PL

# https://docs.oracle.com/en/database/oracle/oracle-database/12.2/adjsn/using-PLSQL-object-types-for-JSON.html#GUID-F0561593-D0B9-44EA-9C8C-ACB6AA9474EE

DECLARE
  je JSON_ELEMENT_T;
  jo JSON_OBJECT_T;
BEGIN
  je := JSON_ELEMENT_T.parse('{"name":"Radio controlled plane"}');
  IF (je.is_Object) THEN
    jo := treat(je AS JSON_OBJECT_T);
    jo.put('price', 149.99);
  END IF;
  DBMS_OUTPUT.put_line(je.to_string);
END;
/

xxx

DECLARE
  jo          JSON_OBJECT_T;
  ja          JSON_ARRAY_T;
  keys        JSON_KEY_LIST;
  keys_string VARCHAR2(100);
BEGIN
  ja := new JSON_ARRAY_T;
  jo := JSON_OBJECT_T.parse('{"name":"Beda", 
                              "jobTitle":"codmonki", 
                              "projects":["json", "xml"]}');
  keys := jo.get_keys;
  FOR i IN 1..keys.COUNT LOOP
     ja.append(keys(i));
  END LOOP;
  keys_string := ja.to_string;
  DBMS_OUTPUT.put_line(keys_string);
END;
/

xxx

CREATE OR REPLACE FUNCTION add_totals(purchaseOrder IN VARCHAR2) RETURN VARCHAR2 IS
  po_obj        JSON_OBJECT_T;
  li_arr        JSON_ARRAY_T;
  li_item       JSON_ELEMENT_T;
  li_obj        JSON_OBJECT_T;
  unitPrice     NUMBER;
  quantity      NUMBER;
  totalPrice    NUMBER := 0;
  totalQuantity NUMBER := 0;
BEGIN
  po_obj := JSON_OBJECT_T.parse(purchaseOrder);
  li_arr := po_obj.get_Array('LineItems');
  FOR i IN 0 .. li_arr.get_size - 1 LOOP
    li_obj := JSON_OBJECT_T(li_arr.get(i));
    quantity := li_obj.get_Number('Quantity');
    unitPrice := li_obj.get_Object('Part').get_Number('UnitPrice');
    totalPrice := totalPrice + (quantity * unitPrice);
    totalQuantity := totalQuantity + quantity;
  END LOOP;
  po_obj.put('totalQuantity', totalQuantity);
  po_obj.put('totalPrice', totalPrice);
  RETURN po_obj.to_string;
END;
/

UPDATE j_purchaseorder SET (po_document) = add_totals(po_document);

SELECT po_document FROM j_purchaseorder po WHERE po.po_document.PONumber = 1600;

xxx

{"PONumber": 1600,
 "Reference": "ABULL-20140421",
 "Requestor": "Alexis Bull",
 "User": "ABULL",
 "CostCenter": "A50",
 "ShippingInstructions": {"name": "Alexis Bull",
                          "Address": {"street": "200 Sporting Green",
                                      "city": "South San Francisco",
                                      "state": "CA",
                                      "zipCode": 99236,
                                      "country": "United States of America"},
                          "Phone": [{"type": "Office", "number": "909-555-7307"},
                                    {"type": "Mobile", "number": "415-555-1234"}]},
 "Special Instructions": null,
 "AllowPartialShipment": true,
 "LineItems": [{"ItemNumber": 1,
                "Part": {"Description": "One Magic Christmas",
                         "UnitPrice": 19.95,
                         "UPCCode": 13131092899},
                "Quantity": 9.0},
               {"ItemNumber": 2,
                "Part": {"Description": "Lethal Weapon",
                         "UnitPrice": 19.95,
                         "UPCCode": 85391628927},
                "Quantity": 5.0}],
 "totalQuantity": 14,
 "totalPrice": 279.3}



JSON Developer's Guide

https://docs.oracle.com/en/database/oracle/oracle-database/12.2/adjsn/lot.html#List-of-Tables

标签:OBJECT,obj,keys,Object,li,JSON,po,PL
From: https://www.cnblogs.com/chenjo/p/17581619.html

相关文章

  • MyBatisPlus
    【狂神说Java】MyBatisPlus最新完整教程通俗易懂:https://www.bilibili.com/video/BV17E411N7KN/快速入门使用第三方组件:1、导入对应的依赖2、研究依赖如何配置3、代码如何编写4、提高扩展技术能力【代码演示】pom.xml<?xmlversion="1.0"encoding="UTF-8"?><projectxm......
  • Selective Experience Replay for Lifelong Learning
    发表时间:2018(AAAI2018)文章要点:这篇文章想解决强化学习在学多个任务时候的遗忘问题。作者提出了一种对通常的experiencereplay增广的方式,就是在保持之前的buffer的同时,再维持一个buffer用来存少部分有代表性的experience作为long-termmemory。作者研究了四种挑选experience的......
  • cookie+session(这里使用redistemplate代替)实现单点登录流程
     user发起资源请求(带上回调的路径方便回调),通过判断是否浏览器的cookie中是否存在登录过的痕迹,比如有人登了,然后存了一个cookie到浏览器如果拿到了cookie是有东西的,则带上这个cookie的内容返回给client,如果没有东西,则继续登录,向session中存入userInfo,并给浏览器设置cookie......
  • ggplot中绘图修改坐标轴的范围
     001、ggplot(mpg,aes(displ,hwy))+geom_point(aes(color=drv))+coord_cartesian(xlim=c(5,7),ylim=c(10,30))##设定x、y轴范围 002、修改x轴范围ggplot(mpg,aes(displ,hwy))+geom_point(aes(color=drv))+coord_cartesian(xlim......
  • ggplot绘图修改坐标轴刻度线的位置
     001、dat<-data.frame(a<-1:20,b<-1:20)p<-ggplot(data=dat,aes(x=a,y=b))+geom_point()p##基础绘图 002、修改x轴刻度位置p+scale_x_continuous(breaks=seq(0,20,by=2))##修改x轴刻度位置 。 ......
  • matplotlib绘图与子图
    matplotlib绘图与子图目录matplotlib绘图与子图绘图基础plt.figurefig.subplotsfig.add_subplotfig.add_axes缺省和就近原则总结绘图基础画布figure,代表了整幅图,通过包括底图、axes对象以及其它图元素的方式,囊括了全部图元素。axes对象(图形区)总是从属于.figure类对象,......
  • Pyplot基本绘图
    Pyplot基本绘图目录Pyplot基本绘图折线图标记大小与颜色标题与标签的定位网格线文字说明柱形图直方图圆饼图散点图颜色表参考资料Pyplot是常用的绘图模块,能很方便让用户绘制2D图表。Pyplot包含一系列绘图函数的相关函数,每个函数会对当前的图像进行一些修改plot():用于绘制......
  • xpath丶BeautifulSoup丶pyquery丶jsonpath 解析html与json串
    XPath与jsonpath1importjson2fromlxmlimportetree3fromjsonpathimportjsonpath45defjson_test():6str1='{"name":"埃里克森"}'7#将字符串转为Pythondict对象8js_obj=json.loads(str1)9print(typ......
  • R语言ggplot绘图调整刻度线标签文件的角度
     001、dat<-data.frame(a=1:5,b=1:5)datlibrary(ggplot2)p<-ggplot(data=dat,aes(x=a,y=b))+geom_point()##默认绘图p 002、调整y轴刻度线标签的角度p+theme(axis.text.y=element_text(angle=90,face="bold"))##y轴调整为90度......
  • python如何将object转换为数值
    项目方案:将图像转换为数值的应用1.项目背景和介绍在现代科技领域中,图像处理和分析是一个非常重要的领域。图像数据通常以像素的形式呈现,而如何将这些像素转换为数值数据是实现图像处理和分析的关键步骤之一。Python是一种功能强大的编程语言,具有丰富的库和工具,可以帮助我们将图......