Skip to content

Commit 2aafd63

Browse files
Merge pull request #1792 from oracle-devrel/witold-swierzy-patch-4
added missing SQL files
2 parents a6fd048 + 20a314a commit 2aafd63

File tree

9 files changed

+1706
-0
lines changed

9 files changed

+1706
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,140 @@
1+
2+
3+
-------------------------------------------------------------------------------------------------------
4+
----------- SAMPLE Queries using SQL/JSON JSON_VALUE,JSON_EXISTS,JSON_QUERY ------------------------
5+
-------------------------------------------------------------------------------------------------------
6+
-------------------------------------------------------------------------------------------------------
7+
-- dot notation: "_id", "resid", "reference", "requestor"
8+
-------------------------------------------------------------------------------------------------------
9+
SELECT po.DATA."_id" "_id"
10+
, po.resid resid
11+
, po.DATA.Reference reference
12+
, po.DATA.Requestor requestor
13+
FROM PURCHASEORDERS po where rownum < 2;
14+
15+
/*
16+
_id RESID REFERENCE REQUESTOR
17+
_____________________________ _____________________________ ______________________ ___________________
18+
"681778538527e06b8c86e698" 08681778538527E06B8C86E698 "SVOLLMAN-20140523" "Shanta Vollman"
19+
*/
20+
21+
-------------------------------------------------------------------------------------------------------
22+
-- JSON_SERIALIZE, JSON_EXISTS
23+
-------------------------------------------------------------------------------------------------------
24+
25+
SELECT JSON_SERALIZE(DATA PRETTY ORDERED)
26+
FROM PURCHASEORDERS
27+
WHERE JSON_EXISTS(DATA, '$?(@.PONumber == $V1)'
28+
PASSING '25' AS "V1")
29+
;
30+
/* {
31+
"_id" : "6810e62338848c2330102b9a",
32+
"CostCenter" : "A50",
33+
"PONumber" : 25,
34+
"Reference" : "TGATES-20140511",
35+
"Requestor" : "Timothy Gates",
36+
"Special Instructions" : "Priority Overnight",
37+
"User" : "TGATES",
38+
"ShippingInstructions" :
39+
{
40+
"name" : "Timothy Gates",
41+
"Address" :
42+
{
43+
"city" : "South San Francisco",
44+
"country" : "United States of America",
45+
"state" : "CA",
46+
"street" : "200 Sporting Green",
47+
"zipCode" : 99236
48+
....................................
49+
}*/
50+
-------------------------------------------------------------------------------------------------------
51+
-- JSON_EXISTS. Query by "_id"
52+
-------------------------------------------------------------------------------------------------------
53+
SELECT DATA
54+
FROM PURCHASEORDERS
55+
WHERE JSON_EXISTS(DATA, '$?(@._id == $V1)'
56+
PASSING '681778538527e06b8c86e698' AS "V1")
57+
;
58+
59+
-------------------------------------------------------------------------------------------------------
60+
-- JSON_VALUE. Extracting three POs references
61+
-------------------------------------------------------------------------------------------------------
62+
63+
SELECT JSON_VALUE (DATA, '$.Reference') "PO Reference"
64+
FROM PURCHASEORDERS where ROWNUM < 4;
65+
/*
66+
PO Reference
67+
____________________
68+
SVOLLMAN-20140531
69+
TFOX-20140511
70+
GGEONI-20141114
71+
*/
72+
-------------------------------------------------------------------------------------------------------
73+
--JSON_EXISTS. Extracting LineItems with UPCCode = 85391628927
74+
-------------------------------------------------------------------------------------------------------
75+
SELECT JSON_SERIALIZE(DATA pretty) FROM PURCHASEORDERS
76+
WHERE JSON_EXISTS (DATA,'$.LineItems.Part?(@.UPCCode == $V1)'
77+
PASSING '85391628927' AS "V1");
78+
/*
79+
{
80+
"_id" : "68177b1d8527e06b8c873477",
81+
"PONumber" : 9947,
82+
"Reference" : "GHIMURO-20141128",
83+
"Requestor" : "Guy Himuro",
84+
"User" : "GHIMURO",
85+
"CostCenter" : "A30",
86+
"ShippingInstructions" :
87+
{
88+
"name" : "Guy Himuro",
89+
"Address" :
90+
{
91+
"street" : "2004 Blacksmiths Court",
92+
"city" : "Seattle",
93+
"state" : "WA",
94+
"zipCode" : 98199,
95+
...................
96+
97+
*/
98+
-------------------------------------------------------------------------------------------------------
99+
--- Extracting LineItems with unit price less than 19
100+
-------------------------------------------------------------------------------------------------------
101+
SELECT DATA FROM PURCHASEORDERS
102+
WHERE JSON_EXISTS(DATA '$.LineItems.Part?(@.UnitPrice < $V1)'
103+
PASSING '19' AS "V1");
104+
-------------------------------------------------------------------------------------------------------
105+
--- Extracting Purchase Order 25
106+
-------------------------------------------------------------------------------------------------------
107+
SELECT DATA FROM PURCHASEORDERS
108+
WHERE JSON_EXISTS(DATA, '$?(@.PONumber == $V1)'
109+
PASSING '25' AS "V1" );
110+
-------------------------------------------------------------------------------------------------------
111+
-- Extracting Orders allowing Partial Shipments - Boolean DATA type
112+
-------------------------------------------------------------------------------------------------------
113+
SELECT DATA
114+
FROM PURCHASEORDERS
115+
WHERE JSON_VALUE (DATA, '$.AllowPartialShipment'
116+
RETURNING BOOLEAN)
117+
-------------------------------------------------------------------------------------------------------
118+
-- Shipping instructions : state CA
119+
-------------------------------------------------------------------------------------------------------
120+
SELECT DATA FROM PURCHASEORDERS
121+
WHERE JSON_EXISTS(DATA,'$.ShippingInstructions?(@.Address.state == $V1)'
122+
PASSING 'CA' AS "V1");
123+
-------------------------------------------------------------------------------------------------------
124+
-- Shipping instructions : name Timothy Gates
125+
-------------------------------------------------------------------------------------------------------
126+
SELECT DATA FROM PURCHASEORDERS
127+
WHERE JSON_EXISTS( DATA, '$.ShippingInstructions?(@.name == $V1)'
128+
PASSING 'Timothy Gates' AS "V1");
129+
-------------------------------------------------------------------------------------------------------
130+
-- JSON Query
131+
-------------------------------------------------------------------------------------------------------
132+
SELECT JSON_QUERY(DATA,'$.ShippingInstructions')
133+
FROM PURCHASEORDERS
134+
where JSON_VALUE(DATA,'$.PONumber' returning number)=1000;
135+
136+
/*
137+
{"name":"Charles Johnson","Address":{"street":"Magdalen Centre, The Isis Science Park","city":"Oxford","county":"Oxon."
138+
,"postcode":"OX9 9ZB","country":"United Kingdom"},"Phone":[{"type":"Office","number":"66-555-3120"}]}
139+
*/
140+
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,213 @@
1+
2+
3+
-- PURCHASEORDERS - JSON collection table
4+
-- PURCHASEORDER_CV, PURCHASEORDER_TOT_PRC_CV, PURCHASEORDER_AVG_PRC_CV - JSON collection views
5+
6+
7+
---------------------------------------------------------------------------------
8+
---------------------------- JSON RELATIONAL VIEW -------------------------------
9+
---------------------------------------------------------------------------------
10+
CREATE or REPLACE VIEW PURCHASEORDER_V AS
11+
SELECT ponumber, requestor, special, address
12+
FROM PURCHASEORDERS,
13+
json_table (DATA, '$'
14+
COLUMNS (ponumber number PATH '$.PONumber',
15+
requestor varchar2(32) PATH '$.Requestor',
16+
special varchar2(10) PATH '$."Special Instructions"',
17+
address JSON PATH '$.ShippingInstructions.Address')) jt
18+
;
19+
20+
21+
DESC PURCHASEORDER_V
22+
/*
23+
Name Null? Type
24+
25+
--------- ----- ------------
26+
PONUMBER NUMBER
27+
REQUESTOR VARCHAR2(32)
28+
SPECIAL VARCHAR2(10)
29+
ADDRESS JSON
30+
*/
31+
32+
SELECT * FROM PURCHASEORDER_V ORDER BY PONUMBER;
33+
/*
34+
PONUMBER REQUESTOR SPECIAL ADDRESS
35+
___________ _________________ __________ _______________________________________________________________________________________________________________________________________
36+
1 Martha Sullivan {"street":"200 Sporting Green","city":"South San Francisco","state":"CA","zipCode":99236,"country":"United States of America"}
37+
2 Martha Sullivan {"street":"200 Sporting Green","city":"South San Francisco","state":"CA","zipCode":99236,"country":"United States of America"}
38+
...............................................................................................................................
39+
40+
*/
41+
42+
SELECT po_v.ponumber, po_v.REQUESTOR , po_v.SPECIAL, po_v.address.city FROM
43+
PURCHASEORDER_V po_v WHERE ponumber =7;
44+
/*
45+
PONUMBER REQUESTOR SPECIAL CITY
46+
___________ ______________ _____________ ________________________
47+
7 Vance Jones Hand Carry "South San Francisco" */
48+
49+
-- using a CTE (Common Table Expression)
50+
WITH po_cte AS
51+
(SELECT ponumber, requestor, special, address
52+
FROM PURCHASEORDERS,
53+
JSON_TABLE (DATA, '$'
54+
COLUMNS (ponumber number PATH '$.PONumber',
55+
requestor varchar2(32) PATH '$.Requestor',
56+
special varchar2(32) PATH '$."Special Instructions"',
57+
address JSON PATH '$.ShippingInstructions.Address')) jt
58+
)
59+
SELECT ponumber, requestor, special, address FROM po_cte;
60+
61+
---------------------------------------------------------------------------------
62+
---------------------------- JSON COLLECTION VIEW -------------------------------
63+
---------------------------------------------------------------------------------
64+
65+
66+
-- JSON collection view with nested path
67+
CREATE OR REPLACE JSON COLLECTION VIEW PURCHASEORDER_CV AS
68+
SELECT JSON {ponumber, requestor, special, itemnumber,itemdesc,unitprice, upccode, quantity}
69+
FROM PURCHASEORDERS,
70+
JSON_TABLE (DATA, '$'
71+
COLUMNS (ponumber number PATH '$.PONumber',
72+
requestor varchar2(32) PATH '$.Requestor',
73+
special varchar2(30) PATH '$."Special Instructions"',
74+
NESTED PATH '$.LineItems[*]'
75+
COLUMNS
76+
( itemnumber number PATH '$.ItemNumber',
77+
quantity number PATH '$.Quantity',
78+
NESTED PATH '$.Part[*]'
79+
COLUMNS (
80+
itemdesc varchar2(50) PATH '$.Description',
81+
upccode number PATH '$.UPCCode',
82+
unitprice number PATH '$.UnitPrice')
83+
)
84+
))
85+
;
86+
87+
88+
SELECT po.DATA.requestor
89+
,po.DATA.ponumber
90+
,po.DATA.itemnumber
91+
,po.DATA.itemdesc
92+
,po.DATA.unitprice
93+
,po.DATA.quantity
94+
FROM PURCHASEORDER_CV po
95+
WHERE po.DATA.ponumber=25
96+
;
97+
/*
98+
REQUESTOR PONUMBER ITEMNUMBER ITEMDESC UNITPRICE QUANTITY
99+
__________________ ___________ _____________ _________________________________________ ____________ ___________
100+
"Timothy Gates" 25 1 "The Land Before Time: The Big Freeze" 27.95 2
101+
"Timothy Gates" 25 2 "Winning" 19.95 1
102+
"Timothy Gates" 25 3 "Falling Down" 19.95 5
103+
*/
104+
----------------------------------------------------------------------------------------------------------------
105+
----------------JSON COLLECTION VIEW with AGGREGATE functions
106+
----------------------------------------------------------------------------------------------------------------
107+
108+
-- JSON collection view with SUM
109+
CREATE OR REPLACE JSON COLLECTION VIEW PURCHASEORDER_TOT_PRC_CV AS
110+
SELECT JSON {jt.ponumber, jt.requestor, jt.total_price}
111+
FROM (
112+
SELECT ROUND (SUM(unitprice * quantity),2) total_price
113+
, ponumber
114+
, requestor
115+
FROM PURCHASEORDERS,
116+
JSON_TABLE(DATA, '$' error on error null on empty
117+
COLUMNS (ponumber number PATH '$.PONumber',
118+
requestor varchar2(32) PATH '$.Requestor',
119+
special varchar2(30) PATH '$."Special Instructions"',
120+
NESTED PATH '$.LineItems[*]'
121+
COLUMNS
122+
( itemnumber number PATH '$.ItemNumber',
123+
quantity number PATH '$.Quantity',
124+
NESTED PATH '$.Part[*]'
125+
COLUMNS (
126+
itemdesc CLOB PATH '$.Description',
127+
upccode number PATH '$.UPCCode',
128+
unitprice number PATH '$.UnitPrice')
129+
)
130+
))
131+
GROUP BY requestor, ponumber
132+
)jt
133+
;
134+
135+
SELECT po.DATA.ponumber, po.DATA.requestor,po.DATA.total_price
136+
FROM PURCHASEORDER_TOT_PRC_CV po
137+
WHERE po.DATA.ponumber=25;
138+
139+
/*
140+
PONUMBER REQUESTOR TOTAL_PRICE
141+
___________ __________________ ______________
142+
25 "Timothy Gates" 175.6
143+
144+
*/
145+
146+
---------------------------------------------------------------------------------
147+
----------------JSON COLLECTION VIEWS with WINDOW function ----------------------
148+
---------------------------------------------------------------------------------
149+
-- Avgeare of Total items price
150+
151+
152+
CREATE OR REPLACE JSON COLLECTION VIEW PURCHASEORDER_AVG_PRC_CV AS
153+
SELECT JSON {
154+
jt.ponumber,
155+
jt.itemnumber,
156+
jt.itemdesc,
157+
jt.quantity,
158+
jt.unitprice,
159+
jt.total_item_price,
160+
jt.average_total_item_price}
161+
FROM (
162+
SELECT
163+
ponumber,
164+
itemnumber,
165+
itemdesc,
166+
quantity,
167+
unitprice,
168+
ROUND (unitprice * quantity,2) total_item_price,
169+
ROUND (avg(unitprice * quantity) over (partition by ponumber),2) average_total_item_price
170+
FROM PURCHASEORDERS,
171+
JSON_TABLE(DATA, '$' error on error null on empty
172+
COLUMNS (ponumber number PATH '$.PONumber',
173+
requestor varchar2(32) PATH '$.Requestor',
174+
special varchar2(30) PATH '$."Special Instructions"',
175+
NESTED PATH '$.LineItems[*]'
176+
COLUMNS
177+
( itemnumber number PATH '$.ItemNumber',
178+
quantity number PATH '$.Quantity',
179+
NESTED PATH '$.Part[*]'
180+
COLUMNS (
181+
itemdesc CLOB PATH '$.Description',
182+
--itemdesc varchar2(100) PATH '$.Description',
183+
upccode number PATH '$.UPCCode',
184+
unitprice number PATH '$.UnitPrice')
185+
)
186+
)
187+
)
188+
) jt
189+
;
190+
191+
192+
SELECT po.DATA.ponumber,
193+
po.DATA.itemnumber,
194+
po.DATA.itemdesc,
195+
po.DATA.quantity,
196+
po.DATA.unitprice,
197+
po.DATA.total_item_price,
198+
po.DATA.average_total_item_price
199+
FROM PURCHASEORDER_AVG_PRC_CV po
200+
WHERE po.DATA.ponumber=25
201+
;
202+
203+
/*
204+
205+
PONUMBER ITEMNUMBER ITEMDESC QUANTITY UNITPRICE TOTAL_ITEM_PRICE AVERAGE_TOTAL_ITEM_PRICE
206+
___________ _____________ _________________________________________ ___________ ____________ ___________________ ________________________
207+
25 1 "The Land Before Time: The Big Freeze" 2 27.95 55.9 58.53
208+
25 2 "Winning" 1 19.95 19.95 58.53
209+
25 3 "Falling Down" 5 19.95 99.75 58.53
210+
*/
211+
212+
213+

0 commit comments

Comments
 (0)