create table dept(
deptno number(2,0),
dname varchar2(30),
loc varchar2(30),
constraint pk_dept primary key (deptno)
)
create table emp(
empno number(4,0),
ename varchar2(10),
job varchar2(20),
mgr number(4,0),
hiredate date,
sal number(7,2),
comm number(7,2),
deptno number(2,0),
constraint pk_emp primary key (empno),
constraint fk_deptno foreign key (deptno) references dept (deptno)
)
insert into DEPT (DEPTNO, DNAME, LOC)
values(10, 'Software Engineering', 'Redwood Shores')
insert into dept
values(20, 'Research', 'Redwood Shores')
insert into dept
values(30, 'Sales', 'San Jose')
insert into dept
values(40, 'Testing', 'Gilroy')
insert into emp
values(
7839, 'King', 'CEO', null,
to_date('17-11-1981','dd-mm-yyyy'),
5000, null, 10
)
insert into emp
values(
7698, 'Blake', 'Manager', 7839,
to_date('1-5-1981','dd-mm-yyyy'),
2850, null, 30
)
insert into emp
values(
7782, 'Clark', 'Manager', 7839,
to_date('9-6-1981','dd-mm-yyyy'),
2450, null, 10
)
insert into emp
values(
7566, 'Jones', 'Manager', 7839,
to_date('2-4-1981','dd-mm-yyyy'),
2975, null, 20
)
insert into emp
values(
7788, 'Scott', 'Programmer', 7566,
to_date('13-JUL-87','dd-mm-rr') - 85,
3000, null, 20
)
insert into emp
values(
7902, 'Ford', 'Programmer', 7566,
to_date('3-12-1981','dd-mm-yyyy'),
3000, null, 20
)
insert into emp
values(
7369, 'Smith', 'Software Architect', 7902,
to_date('17-12-1980','dd-mm-yyyy'),
800, null, 20
)
insert into emp
values(
7499, 'Allen', 'Sales Support', 7698,
to_date('20-2-1981','dd-mm-yyyy'),
1600, 300, 30
)
insert into emp
values(
7521, 'Ward', 'Sales', 7698,
to_date('22-2-1981','dd-mm-yyyy'),
1250, 500, 30
)
insert into emp
values(
7654, 'Martin', 'Sales', 7698,
to_date('28-9-1981','dd-mm-yyyy'),
1250, 1400, 30
)
insert into emp
values(
7844, 'Turner', 'Support', 7698,
to_date('8-9-1981','dd-mm-yyyy'),
1500, 0, 30
)
insert into emp
values(
7876, 'Adams', 'Tester', 7788,
to_date('13-JUL-87', 'dd-mm-rr') - 51,
1100, null, 20
)
insert into emp
values(
7900, 'James', 'Security Tester', 7698,
to_date('3-12-1981','dd-mm-yyyy'),
950, null, 30
)
insert into emp
values(
7934, 'Miller', 'Release Manager', 7782,
to_date('23-1-1982','dd-mm-yyyy'),
1300, null, 10
)
select * from emp
select * from dept
select JSON_OBJECT ('id' VALUE empno,
'name' VALUE ename,
'job' VALUE job,
'hired' VALUE hiredate,
'managerId' value MGR)
from emp
select JSON_ARRAYAGG(
JSON_OBJECT ('id' VALUE empno,
'name' VALUE ename,
'job' VALUE job,
'hired' VALUE hiredate,
'managerId' value MGR)
) from emp
select JSON_OBJECT ('id' VALUE empno,
'name' VALUE ename,
'job' VALUE job,
'managerId' value MGR)
from emp
where empno = 7782
select JSON_OBJECT ('id' VALUE e.empno,
'name' VALUE e.ename,
'job' VALUE e.job,
'managerId' value e.MGR,
'managerName' value m.ename)
from emp e, emp m
where e.mgr = m.empno
select JSON_OBJECT ('id' VALUE e.empno,
'name' VALUE e.ename,
'job' VALUE e.job,
'managerId' value e.MGR,
'managerName' value m.ename,
'numReports' value (select count(*) from emp e2 where e.empno = e2.mgr ))
from emp e, emp m
where e.mgr = m.empno
select JSON_OBJECT ('id' VALUE e.empno,
'name' VALUE e.ename,
'job' VALUE e.job,
'managerId' value e.MGR,
'managerName' value m.ename,
'reports' value (select JSON_ARRAYAGG(e2.ename) from emp e2 where e.empno = e2.mgr ))
from emp e, emp m
where e.mgr = m.empno
select JSON_OBJECT ('id' VALUE e.empno,
'name' VALUE e.ename,
'job' VALUE e.job,
'managerId' value e.MGR,
'managerName' value m.ename,
'reports' value (select JSON_ARRAYAGG(
JSON_OBJECT(
'id' VALUE e2.empno,
'name' VALUE e2.ename,
'job' VALUE e2.job)) from emp e2 where e.empno = e2.mgr
)
)
from emp e, emp m
where e.mgr = m.empno
SELECT JSON_ARRAYAGG(ename)
FROM emp
CONNECT BY PRIOR empno = mgr
START WITH empno = 7839
select JSON_OBJECT ('id' VALUE empno,
'name' VALUE ename,
'job' VALUE job,
'managerId' value MGR,
'department' value dname
)
from emp e, dept d
where e.deptno = d.deptno
select json_objectagg(to_char(deptno) VALUE dname) from dept
select json_objectagg('bla' VALUE dname) from dept
select json_objectagg('bla' VALUE dname with unique keys) from dept
DECLARE
collection SODA_COLLECTION_T;
metadata VARCHAR2(4000) :=
'{"keyColumn" : {"name" : "KEY",
"assignmentMethod": "CLIENT" },
"contentColumn" : { "name" : "PROFILE",
"sqlType": "VARCHAR2" } }';
BEGIN
collection := DBMS_SODA.create_collection('EMP_PROFILES', metadata);
END;
DECLARE
collection SODA_COLLECTION_T;
document SODA_DOCUMENT_T;
status NUMBER;
BEGIN
-- Open the collection
collection := DBMS_SODA.open_collection('EMP_PROFILES');
document := SODA_DOCUMENT_T(key =>7369, v_content =>'{"skills":["java", "c", "pl/sql"]}');
-- Insert a document
status := collection.insert_one(document);
document := SODA_DOCUMENT_T(key =>7788, v_content =>'{"skills":["javascript, python, perl"]}');
status := collection.insert_one(document);
document := SODA_DOCUMENT_T(key =>7900, v_content =>'{"skills":["fuzzy testing"]}');
status := collection.insert_one(document);
END;
select * from emp_profiles
select JSON_OBJECT ('id' VALUE empno,
'name' VALUE ename,
'job' VALUE job,
'managerId' value MGR,
'info' value profile
)
from emp e, emp_profiles p
where e.empno = p.key
create or replace function foo (v in varchar) return varchar2 is
begin
return v;
end;
select JSON_OBJECT ('id' VALUE empno,
'name' VALUE ename,
'job' VALUE job,
'managerId' value MGR,
'info' value foo(profile)
)
from emp e, emp_profiles p
where e.empno = p.key
select JSON_OBJECT ('id' VALUE empno,
'name' VALUE ename,
'job' VALUE job,
'managerId' value MGR,
'info' value foo(profile) FORMAT JSON
)
from emp e, emp_profiles p
where e.empno = p.key
select JSON_OBJECT ('id' VALUE empno,
'name' VALUE ename,
'job' VALUE job,
'managerId' value MGR,
'info' value 'I am not Json' FORMAT JSON
)
from emp e, emp_profiles p
where e.empno = p.key
select JSON_OBJECT ('id' VALUE empno,
'name' VALUE ename,
'job' VALUE job,
'managerId' value MGR,
'info' value 'I am not Json' FORMAT JSON
STRICT)
from emp e, emp_profiles p
where e.empno = p.key
create or replace procedure renameEmp (rec VARCHAR2) is
id number;
newName varchar2(40);
begin
id := json_value(rec, '$.empno');
newName := json_value(rec, '$.newName');
update emp set ename = newName where empno = id;
end;
exec renameEmp('{"empno":7934, "newName":"Patel"}')
create or replace procedure addSkill (rec VARCHAR2) is
id number;
skill varchar2(4000);
profile_v varchar2(4000);
profile_obj JSON_OBJECT_T;
skills_arr JSON_ARRAY_T;
begin
id := json_value(rec, '$.empno');
skill := json_value(rec, '$.newSkill');
select profile into profile_v from emp_profiles where key = id;
profile_obj := JSON_OBJECT_T(profile_v);
skills_arr := profile_obj.get_array('skills');
skills_arr.append(skill);
profile_v := profile_obj.stringify;
update emp_profiles set profile = profile_v where key = id;
end;
exec addSkill('{"empno":7900, "newSkill":"Youtube videos"}')
select JSON_OBJECT ('id' VALUE empno,
'name' VALUE ename,
'job' VALUE job,
'managerId' value MGR,
'info' value profile
)
from emp e, emp_profiles p
where e.empno = p.key
and e.empno = 7900