首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在oracle 12c中以JSON形式返回sql查询的结果

在oracle 12c中以JSON形式返回sql查询的结果
EN

Stack Overflow用户
提问于 2014-05-09 17:24:05
回答 9查看 99.7K关注 0票数 26

背景

我需要从Oracle获取几千行,并将它们转换为JSON以便在SlickGrid中使用。目前,我正在用PHP获取行,使用iconv将其从ISO转换为UTF-8,然后使用json_encode将其导出为json。整个操作在DB端大约需要1秒,生成JSON大约需要5秒。这太长了。

question

我读到过Oracle12c支持JSON,但我找不到我真正需要的。

有没有办法以json格式返回标准sql查询的结果?

假设我想发出一个类似以下内容的查询:

代码语言:javascript
复制
SELECT * from table AS JSON

并接收如下所示的有效json:

代码语言:javascript
复制
[{"col1": "value1", "col2": 2}, {"col1": "valueOfRow2", "col2": 3}]

重要的是,我需要对unicode序列进行转义,因为我在客户端使用ISO-8859-2字符集,并且JSON必须采用UTF-8格式或者对序列进行转义。

EN

回答 9

Stack Overflow用户

回答已采纳

发布于 2014-11-11 17:30:52

Oracle12c版本12.1.0.2 (截至2014年11月11日的最新版本)添加了JSON支持:https://docs.oracle.com/database/121/NEWFT/chapter12102.htm#BGBGADCC

它从10月17日起就可以使用了。https://blogs.oracle.com/db/entry/oracle_database_12c_release_1

如果您无法修补/使用该版本,有一个由Lewis Cunningham和Jonas Krogsboell编写的优秀包: PL/JSON * http://pljson.sourceforge.net/

这是一个很好的包(我已经在许多数据库安装中使用过它)。

包含的示例很好,涵盖了大多数场景。

代码语言:javascript
复制
declare 
  ret json;
begin
  ret := json_dyn.executeObject('select * from tab');
  ret.print;
end;
/
票数 17
EN

Stack Overflow用户

发布于 2017-01-06 05:55:13

12cR2 (在Oracle云中提供)本机支持此功能。

代码语言:javascript
复制
SQL> select JSON_ARRAY(EMPLOYEE_ID, FIRST_NAME,LAST_NAME) from HR.EMPLOYEES;

JSON_ARRAY(EMPLOYEE_ID,FIRST_NAME,LAST_NAME)
--------------------------------------------------------------------------------
[100,"Steven","King"]
[101,"Neena","Kochhar"]

代码语言:javascript
复制
SQL> select JSON_OBJECT('ID' is EMPLOYEE_ID , 'FirstName' is FIRST_NAME,'LastName' is LAST_NAME) from HR.EMPLOYEES;

JSON_OBJECT('ID'ISEMPLOYEE_ID,'FIRSTNAME'ISFIRST_NAME,'LASTNAME'ISLAST_NAME)
----------------------------------------------------------------------------
{"ID":100,"FirstName":"Steven","LastName":"King"}
{"ID":101,"FirstName":"Neena","LastName":"Kochhar"}
票数 15
EN

Stack Overflow用户

发布于 2014-11-11 16:40:48

您可以使用xmltype将SQL的结果转换为XML和JSON。有关适用于Oracle版本9及以后版本的解决方案,请参阅以下文章。您还可以下载itstar_xml_util包:

http://stefan-armbruster.com/index.php/12-it/pl-sql/12-oracle-xml-and-json-goodies

emp表的一个简单示例:

代码语言:javascript
复制
declare
  l_sql_string varchar2(2000);
  l_xml        xmltype;
  l_json       xmltype;
begin
  l_sql_string := 'select a.empno, a.ename, a.job from emp a';

  -- Create the XML from SQL
  l_xml := itstar_xml_util.sql2xml(l_sql_string);

  -- Display the XML
  dbms_output.put_line(l_xml.getclobval());

  l_json := itstar_xml_util.xml2json(l_xml);
  -- Display the JSON
  dbms_output.put_line(l_json.getclobval());  
end;

结果如下所示:

代码语言:javascript
复制
{"ROWSET": [
    {
      "EMPNO": 7839,
      "ENAME": "KING",
      "JOB": "PRESIDENT"
    },
    {
      "EMPNO": 7698,
      "ENAME": "BLAKE",
      "JOB": "MANAGER"
    },
[...]
    {
      "EMPNO": 7934,
      "ENAME": "MILLER",
      "JOB": "CLERK"
    }
  ]}
票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23560996

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档