DECLARE
l_eats json_array_t;
BEGIN
l_eats := json_array_t ('["Stirfry", "Yogurt", "Mosquitos"]');
DBMS_OUTPUT.put_line ('Number of elements in array: ' || l_eats.get_size);
/* Use standard PL/SQL loops to iterate through array elements */
FOR indx IN 0 .. l_eats.get_size - 1
LOOP
DBMS_OUTPUT.put_line (l_eats.get_string (indx));
END LOOP;
END;
Number of elements in array: 3
Stirfry
Yogurt
Mosquitos
DECLARE
l_stuff json_array_t;
l_each_stuff json_array_t;
BEGIN
l_stuff :=
json_array_t ('[
["Stirfry", "Yogurt", "Mosquitos"],
["carpet", "rug", "tiles", "dirt", "concrete"],
["smile", "frown", "grimace", "puzzled"]
]');
DBMS_OUTPUT.put_line (
'Number of elements in array: ' || l_stuff.get_size ());
/* Use standard PL/SQL loops to iterate through array elements */
FOR indx IN 0 .. l_stuff.get_size - 1
LOOP
l_each_stuff := TREAT (l_stuff.get (indx) AS json_array_t);
DBMS_OUTPUT.put_line (l_each_stuff.get_size ());
END LOOP;
END;
Number of elements in array: 3
3
5
4
DECLARE
l_eats json_array_t;
BEGIN
l_eats := json_array_t ('["Stirfry", {"name":"Spider"}, "Mosquitos"]');
DBMS_OUTPUT.put_line ('Number of elements in array: ' || l_eats.get_size);
l_eats.on_error (1);
FOR indx IN 0 .. l_eats.get_size - 1
LOOP
DBMS_OUTPUT.put_line (l_eats.get_string (indx));
END LOOP;
END;
ORA-40566: JSON path expression selected a value of different data type. ORA-06512: at "SYS.JDOM_T", line 412 ORA-06512: at "SYS.JSON_ARRAY_T", line 282 ORA-06512: at line 12 ORA-06512: at "SYS.DBMS_SQL", line 1721More Details: https://docs.oracle.com/error-help/db/ora-40566
DECLARE
l_eats json_array_t;
l_element json_element_t;
l_object json_object_t;
l_array json_array_t;
BEGIN
l_eats :=
json_array_t (
'["Stirfry", {"name":"Spider"}, "Mosquitos", ["finger","toe","nose"]]');
DBMS_OUTPUT.put_line ('Number of elements in array: ' || l_eats.get_size);
l_eats.on_error (1);
FOR indx IN 0 .. l_eats.get_size - 1
LOOP
l_element := l_eats.get (indx);
CASE
WHEN l_element.is_string
THEN
DBMS_OUTPUT.put_line (l_eats.get_string (indx));
WHEN l_element.is_object
THEN
l_object := TREAT (l_element AS json_object_t);
DBMS_OUTPUT.put_line (l_object.stringify);
WHEN l_element.is_array
THEN
l_array := TREAT (l_element AS json_array_t);
DBMS_OUTPUT.put_line (l_array.get_size);
DBMS_OUTPUT.put_line (l_array.stringify);
ELSE
DBMS_OUTPUT.put_line ('no match');
END CASE;
END LOOP;
END;
Number of elements in array: 3
Stirfry
Number of elements in array: 4
Stirfry
{"name":"Spider"}
Mosquitos
3
["finger","toe","nose"]
DECLARE
l_eats json_array_t;
l_object json_object_t;
l_array json_array_t;
BEGIN
l_eats :=
json_array_t (
'["Stirfry", {"name":"Spider"}, "Mosquitos", ["finger","toe","nose"]]');
DBMS_OUTPUT.put_line ('Number of elements in array: ' || l_eats.get_size);
l_eats.on_error (1);
FOR indx IN 0 .. l_eats.get_size - 1
LOOP
CASE
WHEN l_eats.get (indx).is_string
THEN
DBMS_OUTPUT.put_line (l_eats.get_string (indx));
WHEN l_eats.get (indx).is_object
THEN
l_object := TREAT (l_eats.get (indx) AS json_object_t);
DBMS_OUTPUT.put_line (l_object.stringify);
WHEN l_eats.get (indx).is_array
THEN
l_array := TREAT (l_eats.get (indx) AS json_array_t);
DBMS_OUTPUT.put_line (l_array.get_size);
DBMS_OUTPUT.put_line (l_array.stringify);
ELSE
DBMS_OUTPUT.put_line ('no match');
END CASE;
END LOOP;
END;
Number of elements in array: 4
Stirfry
{"name":"Spider"}
Mosquitos
3
["finger","toe","nose"]
DECLARE
l_eats json_array_t := json_array_t (
'["Stirfry", {"name":"Spider"}, "Mosquitos", ["finger","toe","nose"]]');
BEGIN
DBMS_OUTPUT.put_line ('Number of elements in array: ' || l_eats.get_size);
FOR indx IN 0 .. l_eats.get_size - 1
LOOP
/* Dynamic polymorphism! */
DBMS_OUTPUT.put_line (l_eats.get (indx).stringify);
END LOOP;
END;
Number of elements in array: 4
"Stirfry"
{"name":"Spider"}
"Mosquitos"
["finger","toe","nose"]
DECLARE
l_food json_object_t;
l_eats json_array_t := json_array_t ();
BEGIN
l_food := json_object_t ('{"name":"Pudding", "favorite_flavor":"chocolate"}');
l_eats.append (l_food);
DBMS_OUTPUT.put_line (l_eats.stringify ());
/* Skip the object type instance, construct inside append method */
l_eats.append (
json_object_t (
'{"name":"Soup", "temperature_preference":"hot", "best_utensil":"spoon"}'));
DBMS_OUTPUT.put_line (l_eats.stringify ());
/* Put an element between the first two */
l_eats.put (1, 'steven');
DBMS_OUTPUT.put_line (l_eats.stringify ());
/* remove the SECOND element */
l_eats.remove (1);
DBMS_OUTPUT.put_line (l_eats.stringify ());
END;
[{"name":"Pudding","favorite_flavor":"chocolate"}]
[{"name":"Pudding","favorite_flavor":"chocolate"},{"name":"Soup","temperature_preference":"hot","best_utensil":"spoon"}]
[{"name":"Pudding","favorite_flavor":"chocolate"},"steven",{"name":"Soup","temperature_preference":"hot","best_utensil":"spoon"}]
[{"name":"Pudding","favorite_flavor":"chocolate"},{"name":"Soup","temperature_preference":"hot","best_utensil":"spoon"}]
DECLARE
l_nums json_array_t := json_array_t ();
PROCEDURE repl (index_in IN INTEGER, value_in IN NUMBER)
IS
BEGIN
l_nums.remove (index_in);
l_nums.put (index_in, value_in);
END;
BEGIN
FOR indx IN 1 .. 10
LOOP
l_nums.append (indx - 1);
END LOOP;
DBMS_OUTPUT.put_line (l_nums.stringify ());
/* After remove, automatic compression of array */
l_nums.remove (5);
l_nums.remove (6); -- orginally known as 7
l_nums.remove (7); -- orginally known as 9
DBMS_OUTPUT.put_line (l_nums.stringify ());
/* To change an element, must remove and insert */
l_nums.remove (3);
l_nums.put (3, 33);
DBMS_OUTPUT.put_line (l_nums.stringify ());
/* Might want to encapsulate if doing a lot of that! */
repl (4, 44);
DBMS_OUTPUT.put_line (l_nums.stringify ());
END;
[0,1,2,3,4,5,6,7,8,9]
[0,1,2,3,4,6,8]
[0,1,2,33,4,6,8]
[0,1,2,33,44,6,8]