当我在SQL * Plus中运行select命令时非常烦人,例如:
SELECT * FROM books;
输出格式错误且不可读(行单元格不在行中,但以换行符等分隔):
如何配置它以更好的方式显示SELECT结果?
编辑:
这是我的login.sql文件内容:
SET ECHO OFF
SET SERVEROUTPUT ON SIZE 1000000
SET PAGESIZE 999
SET LINESIZE 132
EDIT2:
Affer增加LINESIZE:
SET LINESIZE 32000
现在看起来像这样:
答案 0 :(得分:22)
增加线条大小,例如SET LINESIZE 32000
或使用SET WRAP OFF
(但这会截断长值)
答案 1 :(得分:11)
SQL Plus是一个简单的命令行工具。它并不是真正适用于漂亮的报道。但是,它确实有一些格式化命令,这些命令在SQL Plus用户指南中有记录。 Find out more
例如,您可以选择将TITLE列格式化为仅显示前20个字符,并完整显示SUMMARY列,如下所示:
COLUMN title FORMAT a20 TRUNCATED
COLUMN summary FORMAT a4o WORD_WRAPPED
这样,您就可以更加整洁地查看您的查询,而无需在其投影中嵌入格式化命令。
或者,使用Quest的TOAD或Oracle自己的SQL Developer等IDE。这些工具包括一个查询浏览器,可以在更令人愉悦的网格中自动显示我们的查询结果。 (可提供其他类似工具)。
答案 2 :(得分:7)
有些人可能不喜欢这个建议(我可以想到一些喜欢SqlPlus的DBA),但你可能想要使用像Toad或SQL Developer这样的IDE。如果你是Oracle的新手,sqlplus会让你觉得你刚刚跳回来! IMO,花时间学习Oracle,而不是SQLPlus。 (哦,在你选择的IDE中玩游戏时阅读Concepts guide)
答案 3 :(得分:4)
只需定义列宽,使其适合列的实际内容
col column_name1 format a20 -- sets column to be 20 characters wide
col column_name2 format a15 -- sets column to be 15 characters wide
set line 80
select column_name1, column_name2 from books;
这应该会帮助你。
答案 4 :(得分:3)
制作如下脚本
#!/bin/ksh
FILE="/tmp/queryResult.csv"
sqlplus -s /nolog << !EOF!
connect username/password
SET PAGESIZE 50000
SET LINESIZE 250
SET NUMWIDTH 5
SET FEEDBACK OFF
set echo off
set heading on
set headsep off
set wrap off
SET COLSEP ","
column Title format a22
column Summary format a15
SPOOL $FILE
Select * from books;
SPOOL OFF
EXIT
!EOF!
将脚本保存在文件即sqlscript.sql中 设置文件权限
chmode +x sqlscript.sql
运行脚本和管道到less命令
./sqlscript.sql | less -S
如果输出长于终端中设置的列,“S”选项将允许您使用箭头键滚动。
或者,您可以在您选择的文本编辑器中下载并打开FILE =“/ tmp / queryResult.csv”。
根据您的要求调整LINESIZE,NUMWIDTH列字符大小(a22)
答案 5 :(得分:2)
这可以使输出更漂亮:
SET PAGESIZE 0
SET NEWPAGE 0
SET SPACE 0
SET LINESIZE 1000
SET ECHO OFF
SET FEEDBACK OFF
SET VERIFY OFF
SET HEADING OFF
SET MARKUP HTML OFF SPOOL OFF
SET COLSEP ' '
来源:http://larig.wordpress.com/2011/05/29/formatting-oracle-output-in-sqlplus/
答案 6 :(得分:2)
CSV风格,但是干净:
SQL> set markup csv on
答案 7 :(得分:1)
这对我有用:
SELECT ISBN, SUBSTR(TITLE, 0, 16), SUBSTR(SUMMARY, 0, 16), DATE_PUBL, PAGE_COUNT FROM books;
答案 8 :(得分:0)
所有这些答案之外:
set colsep "&TAB"
答案 9 :(得分:0)
当 sqlplus 显示如此多的破折号时,这意味着您的 linesize 过大。至少比您的控制台大 -> 减小线宽,直到它适合控制台的宽度。