create or replace procedure foo (j varchar2) is
o json_object_t;
begin
o := json_object_t(j);
o.put('newKey', 'newValue');
dbms_output.put_line(o.to_string);
end;
exec foo('{}')
exec foo('{a:1}')
exec foo('[]')
create or replace procedure foo (j varchar2) is
a json_array_t;
begin
a := json_array_t(j);
a.append('newValue');
dbms_output.put_line(a.to_string);
end;
exec foo('[]')
create or replace procedure bar (j varchar2) is
e json_element_t;
begin
e := json_element_t.parse(j);
dbms_output.put_line(e.to_string);
if (e.is_object) then
dbms_output.put_line('I am an object');
elsif (e.is_array) then
dbms_output.put_line('I am an array');
end if;
end;
exec bar('{a:1}')
exec bar('[1,2,3]')
exec bar('x')
create or replace procedure value_info (e json_element_t) is
o json_object_t;
a json_array_t;
s json_scalar_t;
begin
if (e.is_object) then
o := TREAT (e as json_object_t);
elsif (e.is_array) then
a := TREAT (e as json_array_t);
else
s := TREAT (e as json_scalar_t);
end if;
end;
create or replace procedure array_info (a json_array_t) is
e json_element_t;
begin
for i in 0 .. (a.get_size - 1) loop
e := a.get(i);
dbms_output.put_line('Array position ' || i || ' has value ' || e.to_string);
end loop;
end;
create or replace procedure scalar_info (s json_scalar_t) is
e json_element_t;
begin
if (s.is_number) then
dbms_output.put_line('Scalar of type number with value ' || s.to_number);
elsif (s.is_string) then
dbms_output.put_line('Scalar of type string with value ' || s.to_string);
elsif (s.is_boolean) then
dbms_output.put_line('Scalar of type boolean with value ' || s.to_string);
end if;
end;
create or replace procedure object_info (o json_object_t) is
e json_element_t;
keys json_key_list;
key varchar2(256);
begin
keys := o.get_keys;
for i in 1 .. keys.count loop
key := keys(i);
e := o.get(key);
dbms_output.put_line('key ' || key || ' has value ' || e.to_string);
end loop;
end;
create or replace procedure json_info (j varchar2) is
e json_element_t;
begin
e := JSON_ELEMENT_T.parse(j);
if (e.is_object) then
object_info(TREAT (e as json_object_t));
elsif (e.is_array) then
array_info(TREAT (e as json_array_t));
else
scalar_info(TREAT (e as json_scalar_t));
end if;
end;
exec json_info('[1,2,{a:1}, true]')
exec json_info('{a:1, b:false}')
declare
o json_object_t;
a json_array_t;
b boolean;
begin
o := new json_object_t;
a := new json_array_t;
o.put('key', 'value1');
o.put('key', 'value2');
dbms_output.put_line(o.to_string);
a.append(true);
a.append('true');
a.append(123);
a.put(2, 456);
dbms_output.put_line(a.to_string);
a.append(o);
dbms_output.put_line(a.to_string);
o.put('nestedArr', a);
dbms_output.put_line(o.to_string);
end;
declare
o json_object_t;
d date;
e json_element_t;
begin
o := new json_object_t;
o.put('date', SYSDATE);
dbms_output.put_line(o.to_string);
d := o.get_date('date');
dbms_output.put_line(d);
o.put('date_as_string', '2019-07-09T15:18:41');
e := o.get('date_as_string');
dbms_output.put_line('ts:' || e.to_timestamp);
o.put('date_as_string', '2019-07-09T15:18:41_XXXX');
e := o.get('date_as_string');
dbms_output.put_line('ts:' || e.to_timestamp);
end;
declare
o json_object_t;
d date;
e json_element_t;
begin
o := new json_object_t;
o.put('date_as_string', '2019-07-09T15:18:41_XXXX');
e := o.get('date_as_string');
e.on_error(1);
dbms_output.put_line('ts:' || e.to_timestamp);
end;
declare
customer json_object_t;
address json_object_t;
begin
customer := json_object_t('{name:"Tom", address:{city:"Paris"}}');
address := customer.get_object('address');
dbms_output.put_line(address.to_string);
dbms_output.put_line(customer.to_string);
address.put('city', 'Marseille');
dbms_output.put_line(address.to_string);
dbms_output.put_line(customer.to_string);
end;
declare
customer json_object_t;
address json_object_t;
begin
customer := json_object_t('{name:"Tom", address:{city:"Paris"}}');
address := customer.get_object('address').clone;
dbms_output.put_line(address.to_string);
dbms_output.put_line(customer.to_string);
address.put('city', 'Marseille');
dbms_output.put_line(address.to_string);
dbms_output.put_line(customer.to_string);
end;
declare
customer json_object_t;
address json_object_t;
begin
customer := json_object_t('{name:"Tom"}');
address := json_object_t('{city:"Paris"}');
customer.put('address', address);
dbms_output.put_line(customer.to_string);
address.put('city', 'Marseille');
dbms_output.put_line(address.to_string);
dbms_output.put_line(customer.to_string);
end;
create table t (col json_object_t)
select 'comments' from dual;