任何人都有一套好的 sqlplus 配置指令来帮助将给定的 sql 查询转换为很好的制表符分隔输出,以便拉入电子表格或进一步处理?
5 回答
正如贾斯汀在他的链接中指出的那样,使用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;
我不止一次偷过的一个特定脚本来自 AskTom 线程中关于将数据提取到平面文件中的内容。如果我需要一个快速而肮脏的 SQL*Plus 平面文件。不过,对于任何正在进行的过程,我倾向于更喜欢 Tom 之前在该线程上发布的 DUMP_CSV 函数。
我有一个愚蠢的解决方案。它工作得很好。
解决方案
SELECT column1 || CHR(9) || column2 || CHR(9) || column3 ... ...
FROM table
背后的原则
实际上,它只是一个字符串连接。
CHR(9) -> '\t'
第 1 列 || CHR(9) || column2 -> concat(column1, '\t', column2)
制表符是不可见的,但是,如果您键入以下内容:-
设置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
享受!
查看 Oracle 文档:
您可以使用选项卡的 ASCII 值 9 和 chr 函数在 Oracle 中生成选项卡:
select chr(9) from dual;