从Oracle数据库产生CSV和JSON输出

CSV功能,是12.2新支持的功能,在SQL*Plus中运行Help命令时无意发现的:

SQL> help

 HELP
 ----

 Accesses this command line help system. Enter HELP INDEX or ? INDEX
 for a list of topics.

 You can view SQL*Plus resources at
     http://www.oracle.com/technology/documentation/

 ******************************************************************************
 **  Top 12.2 features:                                                      **
 **    - Fast retrieval of data as CSV for use in applications like          **
 **      SQL*Loader. Use SQLPLUS -M "CSV ON" or SET MARKUP CSV ON            **
 **    - Improved defaults and optimizations for reports. Use SQLPLUS -F     **
 **    - Command recall. Use SET HISTORY ON and HISTORY to list previous     **
 **      commands.                                                           **
 ******************************************************************************

 HELP|? [topic]


SQL> set markup csv on
SQL> select * from v$version;

"BANNER","BANNER_FULL","BANNER_LEGACY","CON_ID"
"Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production","Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.3.0.0.0","Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production",0

分隔符是可定制的,可以输出JSON格式,参见文章:Fast Generation of CSV and JSON from Oracle Database
照着这个文档做了一遍:

SQL> set feedback off
-- feedback关闭后不会输出行数
SQL> select department_id, department_name from departments where department_id < 110;

DEPARTMENT_ID DEPARTMENT_NAME
------------- ------------------------------
           10 Administration
           20 Marketing
           30 Purchasing
           40 Human Resources
           50 Shipping
           60 IT
           70 Public Relations
           80 Sales
           90 Executive
          100 Finance
SQL> set markup csv on
SQL> select department_id, department_name from departments where department_id < 110;

"DEPARTMENT_ID","DEPARTMENT_NAME"
10,"Administration"
20,"Marketing"
30,"Purchasing"
40,"Human Resources"
50,"Shipping"
60,"IT"
70,"Public Relations"
80,"Sales"
90,"Executive"
100,"Finance"

SQL> select department_id, department_name from departments where department_id < 110;

DEPARTMENT_ID|DEPARTMENT_NAME
10|Administration
20|Marketing
30|Purchasing
40|Human Resources
50|Shipping
60|IT
70|Public Relations
80|Sales
90|Executive
100|Finance

查看SQL*Plus的帮助,可知也支持HTML输出:

$ sqlplus --help
...
    -M "<options>" Sets automatic HTML or CSV markup of output.  The options
                   have the form:
                   {HTML html_options|CSV csv_options}
                   See SQL*Plus User's Guide for detailed HTML and CSV options.
...

所以也可以设置HTML如下:

set markup html on

输出如下:
在这里插入图片描述
JSON的简单示例如下:

SQL> set heading off
SQL> set feedback off
select json_object ('deptId' is d.department_id,
         'name' is d.department_name) department
  from departments d
  4    where department_id < 110;

{"deptId":10,"name":"Administration"}
{"deptId":20,"name":"Marketing"}
{"deptId":30,"name":"Purchasing"}
{"deptId":40,"name":"Human Resources"}
{"deptId":50,"name":"Shipping"}
{"deptId":60,"name":"IT"}
{"deptId":70,"name":"Public Relations"}
{"deptId":80,"name":"Sales"}
{"deptId":90,"name":"Executive"}
{"deptId":100,"name":"Finance"}

发布了342 篇原创文章 · 获赞 42 · 访问量 54万+

猜你喜欢

转载自blog.csdn.net/stevensxiao/article/details/103567033