SQL行和标题中断问题

时间:2017-06-28 14:11:21

标签: sql oracle csv

我有一个包含17列的表格。基于此表,我需要从远程数据库生成本地CSV文件。我定义了一些set语句只显示一次列名,没有sql标题,行数和其他一些。

 "my sql connection"<<EOF>> test_file.csv
 SET TAB OFF ECHO OFF FEEDBACK OFF LINESIZE 5000 SQLPROMPT '' TRIMSPOOL OFF HEADING OFF UNDERLINE OFF PAGESIZE 0
 select * from my_table where ROWNUM <= 50;
 exit
 EOF

简单,对吧?

我面临与记录行和标题中断有关的问题。即使使用LINESIZE 5000,当我打开我的csv文件时,它们都被破坏了我的标题也是

1 个答案:

答案 0 :(得分:0)

我建议采用以下方法(使用17列节省一些时间)。我想你想要&#39;作为分隔符。

首先你可以自己生成命令(我使用查询到USER_TABLES但您可以轻松修改查询以满足您的需求)

set pagesize 0
set linesize 5000
set trimspool on
(select q'!"my sql connection"<<EOF>> test_file.csv
 SET TAB OFF ECHO OFF FEEDBACK OFF LINESIZE 5000 SQLPROMPT '' TRIMSPOOL OFF HEADING OFF UNDERLINE OFF PAGESIZE 0!' from dual)
 union all
(select 
  q'!select '!' ||
  listagg(column_name, ',') within group (order by table_name) 
  || q'!' from dual union all!'
  header
from all_tab_cols where table_name =
-- MODIFY TO YOUR TABLE NAME HERE [1]:
'USER_TABLES'
)
union all
(select 
  'select ' ||
  listagg(column_name, q'! || ',' || !') within group (order by table_name) 
-- REPLACE USER_TABLES TO YOUR TABLE NAME HERE [2]:
|| ' from user_tables where rownum <= 50;'
  cmd
from all_tab_cols where table_name =
-- MODIFY USER_TABLES TO YOUR TABLE HERE [3]:
'USER_TABLES'
)
union all
(select 'exit
 EOF' from dual);

您可以测试此查询,然后在三个位置(在[1],[2],[3]行之后)将USER_TABLES替换为您自己的表名。

之后取SQL * Plus结果,当你运行时,你应该得到预期的结果。

希望它有所帮助。