根据要求,让我向您展示如何使用嵌入在类型中的集合来创建 json 并通过 Web REST 服务交付它
假设我有一个表中的员工数据,我想通过使用 JSON 的 Web 服务检索它们。在这种情况下,我使用 ORDS、APEX 5.1.4 和 Oracle 12c
1.此过程使用 APEX_JSON 检索 JSON 格式的信息。我认为 APEX_JSON 非常适合 Oracle 12c 中的 JSON 生成,因为在 12c 中有很多与 JSON 相关的 bug。
CREATE OR REPLACE PROCEDURE get_emp_json (p_empno IN emp.empno%TYPE DEFAULT NULL) AS
l_cursor SYS_REFCURSOR;
BEGIN
OPEN l_cursor FOR
SELECT e.empno AS "empno",
e.ename AS "employee_name",
e.job AS "job",
e.mgr AS "mgr",
TO_CHAR(e.hiredate,'YYYY-MM-DD') AS "hiredate",
e.sal AS "sal",
e.comm AS "comm",
e.deptno AS "deptno"
FROM emp e
WHERE e.empno = DECODE(p_empno, NULL, e.empno, p_empno);
APEX_JSON.open_object;
APEX_JSON.write('employees', l_cursor);
APEX_JSON.close_object;
END;
/
2.构建 ORDS REST 模块(在您自己的架构中)
BEGIN
ORDS.define_module(
p_module_name => 'rest-v4',
p_base_path => 'rest-v4/',
p_items_per_page => 0);
ORDS.define_template(
p_module_name => 'rest-v4',
p_pattern => 'employees/');
ORDS.define_handler(
p_module_name => 'rest-v4',
p_pattern => 'employees/',
p_method => 'GET',
p_source_type => ORDS.source_type_plsql,
p_source => 'BEGIN get_emp_json; END;',
p_items_per_page => 0);
ORDS.define_template(
p_module_name => 'rest-v4',
p_pattern => 'employees/:empno');
ORDS.define_handler(
p_module_name => 'rest-v4',
p_pattern => 'employees/:empno',
p_method => 'GET',
p_source_type => ORDS.source_type_plsql,
p_source => 'BEGIN get_emp_json(:empno); END;',
p_items_per_page => 0);
COMMIT;
END;
/
3.调用 REST WEB SERVICE
http://yourhost:yourport/ords/hr/rest-v4/employees/
结论
ORDS 是一个很棒的工具,可以使用 REST 从数据库中检索 JSON 格式的数据来创建 Web 服务。根据您自己的需要进行调整。通常,集合可以从表或类型派生。在我的示例中,我使用 SYS_REFCURSOR 对象来检索 JSON 数据。
以下文章提供了很好的示例和逐步指导
https://oracle-base.com/articles/misc/oracle-rest-data-services-ords-create-basic-rest-web-services-using-plsql#create-get-web-services
https://oracle-base.com/articles/misc/oracle-rest-data-services-ords-restful-web-services-handling-complex-json-payloads