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"}