簡體   English   中英

Return Oracle ORDS REST JSON results in a SQL select

[英]Return Oracle ORDS REST JSON results in a SQL select

我想在兩個 11g 數據庫之間使用 Oracle ORDS REST 接口。 根據外部顧問的說法,這比使用數據庫鏈接要快。 然后,接收 11g 數據庫必須通過使用 SQL 的 Oracle Apex 圖表顯示結果。 我還需要加入接收數據庫上的表。 11g 是否具有轉換 ORDS REST JSON 的必要功能,以便使用 SQL 顯示它,這需要什么代碼?

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 的 output 檢索為 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 機制。 通過這種方式,您可以輕松構建 web 服務,以檢索 JSON 格式的數據。

所以在 Oracle 11g 中沒有內置的 JSON 支持。 12c開始在您的情況下,我使用數據庫上的 Java 支持構建它。 There are plenty of Java resources to deal with Json (even with the Java 7 which is the supported JVM on the latest 11gR2 ).

想法是創建一個(流水線)表 function ,該表使用用戶定義的類型為該用例輸出 JSON 結果。

如果有數據庫鏈接,我會先嘗試,因為這些表函數並不總是非常高效。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM