繁体   English   中英

SQL*Plus 中的丑陋格式

[英]Ugly formatting in SQL*Plus

当我在 SQL*Plus 中运行 select 命令时,这真的很烦人,例如:

SELECT * FROM books;

输出格式非常糟糕且无法读取(行单元格不在一行中,而是由换行符等分隔):

在此处输入图片说明

如何配置它以更好的方式显示 SELECT 结果?

编辑:

这是我的 login.sql 文件内容:

SET ECHO OFF
SET SERVEROUTPUT ON SIZE 1000000
SET PAGESIZE 999
SET LINESIZE 132

编辑2:

增加 LINESIZE:

SET LINESIZE 32000

现在看起来像这样:

在此处输入图片说明

增加linesize,例如SET LINESIZE 32000

或使用SET WRAP OFF (但这会截断长值)

SQL Plus 是一个简单的命令行工具。 它并不是真正用于漂亮的报告。 但是,它确实有一些格式化命令,这些命令记录在 SQL Plus 用户指南中。 了解更多

例如,您可能会选择将 TITLE 列格式化为仅显示前 20 个字符,并像这样完整显示概要列:

COLUMN title FORMAT a20 TRUNCATED 
COLUMN summary FORMAT a4o WORD_WRAPPED

这将使您能够更整齐地查看您的查询,而无需在其投影中嵌入格式化命令。

或者,使用 IDE,例如 Quest 的 TOAD 或 Oracle 自己的 SQL Developer。 这些工具包括一个查询浏览器,它会自动以更令人愉悦的网格显示我们的查询结果。 (其他类似工具可用)。

制作一个像下面这样的脚本

#!/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)

有些人可能不喜欢这个建议(我可以想到一些喜欢 SqlPlus 的 DBA),但您可能想要使用像ToadSQL Developer这样的 IDE。 如果您是 Oracle 的新手,sqlplus 会让您感觉自己回到了过去! IMO,花时间学习 Oracle,而不是 SQLPlus。 (哦,在您选择的 IDE 中玩耍时阅读概念指南

只需定义列宽,使其适合列的实际内容

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;

这应该可以帮助你。

这可以使输出更漂亮:

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/

Csv 样式,但干净:

SQL> set markup csv on

这对我有用:

SELECT ISBN, SUBSTR(TITLE, 0, 16), SUBSTR(SUMMARY, 0, 16), DATE_PUBL, PAGE_COUNT FROM books;

除了所有这些答案:

set colsep "&TAB"

当 sqlplus 显示如此多的破折号时,这意味着您的 linesize 过大。 至少比您的控制台大 -> 减小线宽,直到它适合控制台的宽度。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM