问题描述
{
"orderId": "s","fulfillerId": "qaqj8fkbmb","orderDetailsUrl": "asd","items": [
{
"dTe": "laseIn","itemDescription": "Tetesting","itemId": "item_1","manufacturingUrl": "https://uploads_1.documents.press","skuCode": "1223","productName": "Tesing","quantity": 225,"taskId": "task_ID_1"
},{
"dTe": "laseIn","itemDescription": "Test Sku for Oracle testing","itemId": "item_2","manufacturingUrl": "https://uploads_2.documents.press","skuCode": "123","productName": "Test Sku for Oracle testing","taskId": "task_ID_2"
}
]
}
实现
->获取orderId / fulfillerId / orderDetailsUrl的值,并对项目数组对象执行迭代,以获取所需值作为其相似对象的数组
->存储在变量中
->然后执行插入操作
不知何故
所需的输出:
项目表
-
itemId
-
fullfillerId
-
orderId
-
skuCode
++项目表中JSON中的所有剩余数据
ItemDetails表
-
itemId
-
orderDetailsUrl
-
taskId
-
数量
我尝试了各种jsonb格式,但是解析后无法获得准确的输出,我无法从JSON中选择值并使用插入查询
解决方法
这是一个plpgsql块,用于说明如何执行。 raise notice
将被相关命令替换,例如insert
。
do language plpgsql
$$
declare
j constant json default $json$
{
"orderId": "s","fulfillerId": "qaqj8fkbmb","orderDetailsUrl": "asd","items": [
{
"dTe": "laseIn","itemDescription": "Tetesting","itemId": "item_1","manufacturingUrl": "https://uploads_1.documents.press","skuCode": "1223","productName": "Tesing","quantity": 225,"taskId": "task_ID_1"
},{
"dTe": "laseIn","itemDescription": "Test Sku for Oracle testing","itemId": "item_2","manufacturingUrl": "https://uploads_2.documents.press","skuCode": "123","productName": "Test Sku for Oracle testing","taskId": "task_ID_2"
}
]
}
$json$;
r record;
begin
-- Item
for r in select j->>'fulfillerId' fullfillerid,j->>'orderId' orderid,t->>'itemId' itemid,t->>'skuCode' skucode
from json_array_elements(j -> 'items') t loop
raise notice '% % % %',r.fullfillerid,r.orderid,r.itemid,r.skucode;
end loop;
--ItemDetails
for r in select j->>'orderDetailsUrl' orderdetailsurl,t->>'taskId' taskid,(t->>'quantity')::numeric quantity
from json_array_elements(j -> 'items') t loop
raise notice '% % % %',r.orderdetailsurl,r.taskid,r.quantity;
end loop;
end;
$$;
插入将变得更简单,而无需循环:
insert into target_table ( list - of - columns )
select
j->>'orderDetailsUrl' orderdetailsurl,(t->>'quantity')::numeric quantity
-- other expressions maybe
from json_array_elements(j -> 'items') t;
作为插入item
表和itemietails
表中的函数:
create or replace function json_items(raw_data json)
returns void language plpgsql as
$$
begin
insert into itemdetails(itemid,orderdetailsurl,taskid,quantity)
select
t->>'itemId',raw_data->>'orderDetailsUrl',t->>'taskId',(t->>'quantity')::numeric
from json_array_elements(raw_data -> 'items') t;
insert into item(itemid,fullfillerid,orderid,skucode,dte,itemdescription)
select
t->>'itemId',raw_data->>'fullfillerId',raw_data->>'orderId',t->>'skuCode',t->>'dte',t->>'itemDescription'
from json_array_elements(raw_data -> 'items') t;
end;
$$;