我想在两个 11g 数据库之间使用 Oracle ORDS REST 接口。根据外部顾问的说法,这比使用数据库链接要快。然后,接收 11g 数据库必须使用 SQL 通过 Oracle Apex 图表显示结果。我还需要加入接收数据库上的表。11g 是否具有转换 ORDS REST JSON 以使用 SQL 显示它的必要功能,为此需要什么代码?
问问题
577 次
2 回答
3
Oracle 11g 不支持 JSON。这是在 12c 中首次引入的。但是,有一种解决方法。Oracle Application Express 5.1.4 与 11g 兼容,它有自己的 JSON 生成器 (APEX_JSON)。您需要将它安装在您的数据库中。
考虑 Oracle APEX 和 Oracle 数据库之间的矩阵兼容性:
- 对于 APEX 5.0,最低数据库版本为 11.1.0.7
- 对于 APEX 5.1,最低数据库版本为 11.2.0.4
- 对于 APEX 18.1、18.2、19.1,最低数据库版本为 11.2.0.4
即使在 11g 中,您也可以将 APEX_JSON 的输出检索为 json 格式的 CLOB。
例子
1.此过程使用 APEX_JSON 检索 JSON 格式的信息
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/
过去我使用它,因为 Oracle 11g 不处理 JSON,只能通过复杂的 SQL 机制。通过这种方式,您可以轻松构建用于以 JSON 格式检索数据的 Web 服务。
于 2020-07-15T09:56:15.333 回答