返回sql select中的oracle ords rest json结果

vngu2lb8  于 2021-07-26  发布在  Java
关注(0)|答案(2)|浏览(413)

我想在两个11g数据库之间使用oracle ords rest接口。据外部顾问称,这比使用数据库链接要快。然后,接收11g的数据库必须使用sql通过oracle apex图表显示结果。我还需要连接接收数据库上的表。11g是否具备必要的功能来转换ords rest json,以便使用sql显示它?为此需要什么代码?

kuhbmx9i

kuhbmx9i1#

oracle 11g不支持json。这是12世纪第一次出现。但是,有一个解决方法。oracleapplicationexpress5.1.4与11g兼容,它有自己的json生成器(apex\ujson)。您需要在数据库中安装它。
考虑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中,您也可以以json格式将apex\u json的输出检索为clob。
例子
1.此过程使用apexïu 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服务

http://yourhost:yourport/ords/hr/rest-v4/employees/

早在我使用它的时候,oracle11g并没有处理json,只是通过复杂的sql机制。通过这种方式,您可以轻松构建用于检索json格式数据的web服务。

mwkjh3gx

mwkjh3gx2#

所以在oracle11g中没有内置的json支持。从12c开始,在你的例子中,我用数据库上的java支持构建了它。有大量的java资源可以处理json(即使是Java7,它是最新11gr2上支持的jvm)。
其想法是为该用例创建一个(流水线)表函数,该函数使用用户定义的类型输出json结果。
如果有一个数据库链接,我会先尝试一下,因为那些表函数并不总是很有性能。

相关问题