18

任何人都有一套好的 sqlplus 配置指令来帮助将给定的 sql 查询转换为很好的制表符分隔输出,以便拉入电子表格或进一步处理?

4

5 回答 5

9

正如贾斯汀在他的链接中指出的那样,使用set colsep函数 SQLPlus 命令可以节省为每列输入分隔符。

但是对于制表符分隔,set colsep Chr(9)将不起作用。

对于 UNIX 或 LINUX,使用set colsep ' '单引号之间的空格作为键入的制表符。

对于 Windows,请使用以下设置:

col TAB# new_value TAB NOPRINT
select chr(9) TAB# from dual;
set colsep "&TAB"

select * from table;
于 2011-08-15T15:25:08.867 回答
3

我不止一次偷过的一个特定脚本来自 AskTom 线程中关于将数据提取到平面文件中的内容。如果我需要一个快速而肮脏的 SQL*Plus 平面文件。不过,对于任何正在进行的过程,我倾向于更喜欢 Tom 之前在该线程上发布的 DUMP_CSV 函数。

于 2008-09-19T23:49:19.753 回答
1

我有一个愚蠢的解决方案。它工作得很好。

解决方案

SELECT column1 || CHR(9) || column2 || CHR(9) || column3 ... ...
FROM table

背后的原则

实际上,它只是一个字符串连接

CHR(9) -> '\t'

第 1 列 || CHR(9) || column2 -> concat(column1, '\t', column2)

于 2014-12-26T08:02:57.347 回答
0

制表符是不可见的,但是,如果您键入以下内容:-

设置colsep Z

但不是 Z,而是按键盘上的 TAB 键,然后按 Enter,它可以工作。SQLPlus 知道空格(不可见的制表符)之后的下一个字符是 colsep。

我已将所有设置放入名为 /cli.sql 的文件中,所以我只是这样做:-

@/cli.sql

加载它们。

set serveroutput on
SET NEWPAGE NONE
set feedback off
set echo off
set feedback off
set heading off
set colsep  
set pagesize 0 
SET UNDERLINE OFF
set pagesize 50000
set linesize 32767
connect use/password

(注意 - 在行尾的不可见空格之后有一个不可见的选项卡:)

set colsep  

享受!

于 2019-08-09T11:43:17.263 回答
-4

查看 Oracle 文档:

您可以使用选项卡的 ASCII 值 9 和 chr 函数在 Oracle 中生成选项卡:

select chr(9) from dual;
于 2008-09-19T23:31:42.073 回答