如何在 unix 中使用 sqlplus 以很好的方式显示 select 查询
How to display select query in nice way using sqlplus in unix
我需要 select 大量数据(超过 450 万条记录),当我使用来自 unix 的 sqlplus 执行此操作时,数据以难以阅读的方式呈现:
Columns1
--------------------------------------------------------------------------------
Columns2
--------------------
110345947
107110345947
110345948
107110345948
110345949
107110345949
Columns1
--------------------------------------------------------------------------------
Columns2
--------------------
110345950
107110345950
110345951
107110345951
我想得到的是:
Columns1,Columns2
110345950,107110345950
110345951,107110345951
我的 sql 脚本如下所示:
set long 30000;
set colsep ",";
SELECT Columns1, Columns2 from table;
知道怎么做吗?
如果您无法使用 SQL*另外,最简单的方法就是自己连接值:
SELECT Columns1 ||','|| Columns2 from table;
如果您可以使用 SQLcl 或 SQL 开发人员,那么他们可以自然地输出 CSV:
set sqlformat csv
SELECT Columns1, Columns2 from table;
这将包括用双引号等包裹字符串,以避免嵌入逗号出现问题。
还有几个选项:
使用SET LINESIZE
SQL*Plus 命令并将其放大,以便所有列都适合一行:
SQL> set linesize 30
SQL> select * from dept;
DEPTNO DNAME
---------- --------------
LOC
-------------
10 ACCOUNTING
NEW YORK
20 RESEARCH
DALLAS
30 SALES
CHICAGO
40 OPERATIONS
BOSTON
SQL> set linesize 100
SQL> select * from dept;
DEPTNO DNAME LOC
---------- -------------- -------------
10 ACCOUNTING NEW YORK
20 RESEARCH DALLAS
30 SALES CHICAGO
40 OPERATIONS BOSTON
SQL>
或者,使用 SQL*Plus COLUMN
命令和 "shorten" 太宽的每一列(这有点 无聊 ,虽然):
SQL> create table test (ename varchar2(50), job varchar2(50));
Table created.
SQL> insert into test select ename, job from emp where rownum < 5;
4 rows created.
SQL> set linesize 50
SQL> select * from test;
ENAME
--------------------------------------------------
JOB
--------------------------------------------------
SMITH
CLERK
ALLEN
SALESMAN
WARD
SALESMAN
JONES
MANAGER
SQL> col ename format a12
SQL> col job format a20
SQL> select * from test;
ENAME JOB
------------ --------------------
SMITH CLERK
ALLEN SALESMAN
WARD SALESMAN
JONES MANAGER
SQL>
从SQL*Plus 12.2开始,可以使用
SET MARKUP CSV {ON|OFF} [DELIMI[TER] character] [QUOTE {ON|OFF}]
例如(使用所有默认值)
set markup csv on
或者,如果您的命令行能够启动 Web 浏览器,您可以 set markup html
,保存到文件并在浏览器中打开它。 (我知道你要求 CSV 格式,所以这可能对你没有任何用处,但这是一个巧妙的技巧所以我还是分享它。)
https://uhesse.com/2011/06/30/sqlplus-output-in-nice-html-format/
例如,将以下内容保存为html.sql
(此示例用于Windows,因此您需要replace the start
command with your Linux equivalent):
set termout off feedback off
set markup html on head "<title>SQL*Plus Output &_user@&_connect_identifier &_date</title> -
<style> -
html { -
font-family: consolas, monospace; -
font-size: 9pt; -
background-color: #dce1e9; -
} -
table, td, th { -
text-align: left; -
vertical-align: top; -
border: 1px solid #808090; -
background: white; -
padding: .5em .6em; -
} -
table { -
border-collapse: collapse; -
margin-top: 1.2em; /* space above table itself */ -
margin-bottom: 1.2em; -
border-width: 3px; -
margin-bottom: 1em; -
} -
td { -
margin: .2em; -
font-size: 80%; -
} -
th { -
background: #f0f4fd; -
font-weight: bold; -
font-size: 95%; -
margin: .2em; -
padding-bottom: .4em; -
} -
</style>" -
body "" -
table "align='left' summary='Script output'" -
spool on entmap on preformat off
spool sqlplus_output.html
run
spool off
set markup html off spool off
host start sqlplus_output.html
set termout on feedback on
然后你可以在SQL提示符下输入一个查询(不用运行),然后
@html
结果将显示在您的默认浏览器中。
我需要 select 大量数据(超过 450 万条记录),当我使用来自 unix 的 sqlplus 执行此操作时,数据以难以阅读的方式呈现:
Columns1
--------------------------------------------------------------------------------
Columns2
--------------------
110345947
107110345947
110345948
107110345948
110345949
107110345949
Columns1
--------------------------------------------------------------------------------
Columns2
--------------------
110345950
107110345950
110345951
107110345951
我想得到的是:
Columns1,Columns2
110345950,107110345950
110345951,107110345951
我的 sql 脚本如下所示:
set long 30000;
set colsep ",";
SELECT Columns1, Columns2 from table;
知道怎么做吗?
如果您无法使用 SQL*另外,最简单的方法就是自己连接值:
SELECT Columns1 ||','|| Columns2 from table;
如果您可以使用 SQLcl 或 SQL 开发人员,那么他们可以自然地输出 CSV:
set sqlformat csv
SELECT Columns1, Columns2 from table;
这将包括用双引号等包裹字符串,以避免嵌入逗号出现问题。
还有几个选项:
使用SET LINESIZE
SQL*Plus 命令并将其放大,以便所有列都适合一行:
SQL> set linesize 30
SQL> select * from dept;
DEPTNO DNAME
---------- --------------
LOC
-------------
10 ACCOUNTING
NEW YORK
20 RESEARCH
DALLAS
30 SALES
CHICAGO
40 OPERATIONS
BOSTON
SQL> set linesize 100
SQL> select * from dept;
DEPTNO DNAME LOC
---------- -------------- -------------
10 ACCOUNTING NEW YORK
20 RESEARCH DALLAS
30 SALES CHICAGO
40 OPERATIONS BOSTON
SQL>
或者,使用 SQL*Plus COLUMN
命令和 "shorten" 太宽的每一列(这有点 无聊 ,虽然):
SQL> create table test (ename varchar2(50), job varchar2(50));
Table created.
SQL> insert into test select ename, job from emp where rownum < 5;
4 rows created.
SQL> set linesize 50
SQL> select * from test;
ENAME
--------------------------------------------------
JOB
--------------------------------------------------
SMITH
CLERK
ALLEN
SALESMAN
WARD
SALESMAN
JONES
MANAGER
SQL> col ename format a12
SQL> col job format a20
SQL> select * from test;
ENAME JOB
------------ --------------------
SMITH CLERK
ALLEN SALESMAN
WARD SALESMAN
JONES MANAGER
SQL>
从SQL*Plus 12.2开始,可以使用
SET MARKUP CSV {ON|OFF} [DELIMI[TER] character] [QUOTE {ON|OFF}]
例如(使用所有默认值)
set markup csv on
或者,如果您的命令行能够启动 Web 浏览器,您可以 set markup html
,保存到文件并在浏览器中打开它。 (我知道你要求 CSV 格式,所以这可能对你没有任何用处,但这是一个巧妙的技巧所以我还是分享它。)
https://uhesse.com/2011/06/30/sqlplus-output-in-nice-html-format/
例如,将以下内容保存为html.sql
(此示例用于Windows,因此您需要replace the start
command with your Linux equivalent):
set termout off feedback off
set markup html on head "<title>SQL*Plus Output &_user@&_connect_identifier &_date</title> -
<style> -
html { -
font-family: consolas, monospace; -
font-size: 9pt; -
background-color: #dce1e9; -
} -
table, td, th { -
text-align: left; -
vertical-align: top; -
border: 1px solid #808090; -
background: white; -
padding: .5em .6em; -
} -
table { -
border-collapse: collapse; -
margin-top: 1.2em; /* space above table itself */ -
margin-bottom: 1.2em; -
border-width: 3px; -
margin-bottom: 1em; -
} -
td { -
margin: .2em; -
font-size: 80%; -
} -
th { -
background: #f0f4fd; -
font-weight: bold; -
font-size: 95%; -
margin: .2em; -
padding-bottom: .4em; -
} -
</style>" -
body "" -
table "align='left' summary='Script output'" -
spool on entmap on preformat off
spool sqlplus_output.html
run
spool off
set markup html off spool off
host start sqlplus_output.html
set termout on feedback on
然后你可以在SQL提示符下输入一个查询(不用运行),然后
@html
结果将显示在您的默认浏览器中。