从Sql问题导出.txt

时间:2017-01-05 15:27:01

标签: sql oracle

我想从sql脚本导出.txt文件。我不想要任何标题。我也不希望任何逗号(,)划分我的字段,我希望它们保持“围绕我的表中的每个值。我的代码运行但包括标题,从每个字段中删除”并插入一个,。 我的代码

set echo off
set verify off
set termout on
set heading off
set pages 50000
set feedback off
set newpage none
set linesize 1000
set serveroutput off



spool New_Members.txt

SELECT   'Unique_ID, Name, Alt_Name, Entity_Type, Party_Type,   Reference_#, Addr1, Addr2, Addr3, Town, County, Postcode, 
      Country,ALT_ADDRESS1,ALT_ADDRESS2,ALT_ADDRESS3,ALT_TOWN,ALT_COUNTY,ALT_POST_CODE,ALT_COUNTRY,NATIONALITY,
      DOB,INDIVIDUAL_ID,INDIVIDUAL_ID_TYPE,COUNTRY_OF_REGISTRATION,COMPANY_ID,COMPANY_ID_TYPE,SOURCE_COUNTRY,SOURCE_SYSTEM,TRANSACTION_TYPE' 
from     dual;
/

select   Unique_ID||','||Name||','||Alt_Name||','|| Entity_Type||','||Party_Type||','||Reference_#||','||Addr1||','||Addr2||','||
     Addr3||','||Town||','||County||','||Postcode||','||Country||','||ALT_ADDRESS1||','||ALT_ADDRESS2||','||
     ALT_ADDRESS3||','||ALT_TOWN||','||ALT_COUNTY||','||ALT_POST_CODE||','||ALT_COUNTRY||','||NATIONALITY||','||
     DOB||','||INDIVIDUAL_ID||','||INDIVIDUAL_ID_TYPE||','||COUNTRY_OF_REGISTRATION||','||COMPANY_ID||','||COMPANY_ID_TYPE||','||
     SOURCE_COUNTRY||','||SOURCE_SYSTEM||','||TRANSACTION_TYPE
from     dbo.Temp_Weekly_Export_File;
/


spool off;

exit

1 个答案:

答案 0 :(得分:1)

您已经拥有set header off,因此您不会看到任何Oracle生成的列标题。将pagesize设置为零也会抑制标题。您可能会发现set trimout onset trimspool on也很有帮助。

您似乎看到的是您使用第一个查询显式生成的CSV标头。如果您不想看到该标题行,只需将其从脚本中删除即可。

如果保留该标题,请删除额外的空格,尤其是换行符,因为它们会导致标题在导入Excel等时被视为多行。如果您试图阻止该行过长脚本,您可以连接多个较短的字符串:

select 'Unique_ID,Name,Alt_Name,Entity_Type,Party_Type,Reference_#,'
  || 'Addr1,Addr2,Addr3,Town,County,Postcode,Country,ALT_ADDRESS1,'
  || 'ALT_ADDRESS2,ALT_ADDRESS3,ALT_TOWN,ALT_COUNTY,ALT_POST_CODE,'
  || 'ALT_COUNTRY,NATIONALITY,DOB,INDIVIDUAL_ID,INDIVIDUAL_ID_TYPE,'
  || 'COUNTRY_OF_REGISTRATION,COMPANY_ID,COMPANY_ID_TYPE,'
  || 'SOURCE_COUNTRY,SOURCE_SYSTEM,TRANSACTION_TYPE' 
from dual;

您正在运行两次查询,因为每个查询都以分号(;)终止submits that statement;然后是a slash (/),后面重新执行当前命令缓冲区。你只需要一个或那个,所以我会删除两个斜杠 - 但无论你删除哪个,都要保持一致,并检查你的组织中是否有编码指南,而不是一个优先于另一个。

如评论中所述,您的问题有点混乱,因为您明确添加了逗号,并且没有要删除的双引号。实际上,您可能希望添加双引号,如果任何列值可以包含逗号分隔符 - 这会混淆Excel(或任何将使用此文件的内容)。您可以根据需要在特定字段周围连接双引号,例如:

select Unique_ID||','||Name||','||Alt_Name||','|| Entity_Type||','||
  Party_Type||','||Reference_#||',"'||Addr1||'","'||Addr2||'",'||
...

将输出中的双引号括起前两个地址列值。