在管道分隔的 sqlplus 中带有列标题的假脱机

Posted

技术标签:

【中文标题】在管道分隔的 sqlplus 中带有列标题的假脱机【英文标题】:spool with column headers in pipe delimited sqlplus 【发布时间】:2013-08-20 18:33:11 【问题描述】:

我目前正在通过这个 sqlplus 脚本假脱机一个管道文件:

    set feedback off
    set echo off
    set verify off
    set pagesize 0
    set heading off
    set termout off
    set trim on
    set wrap on
    set trimspool on
    set linesize 9000
    spool c:\exp3.txt
    select
    to_char(D_DTM, 'mm-dd-yyyy hh24.mi.ss')||'|'||
    DAYOFWEEK||'|'||"24HOUR"||'|'||TECHNOLOGY||'|'||VOICEDATA||'|'||MRKT_NM||'|'||REGION_NM||'|'||CLUSTER_NM||'|'||
    CLUSTER2_NM||'|'||BSC_NM||'|'||BTS_ID||'|'||BSC_BTS||'|'||CSCD_ID||'|'||CSCD_NM||'|'||SECT_SEQ_ID||'|'||BND_ID||'|'||
    FA_ID||'|'||ATT_CNT||'|'||AXS_F_CNT||'|'||CE_BLK_CNT||'|'||CUST_BLK_CNT||'|'||DRP_CALL_CNT||'|'||HHI_ATT_CNT||'|'||
    HHI_BAFRM_CNT||'|'||HHI_CALL_SETUP_SXS_CNT||'|'||MBL_ORG_CNT||'|'||MBL_TER_CNT||'|'||NON_BTS_EQ_BLK_CNT||'|'||
    PRIM_CALL_ERL||'|'||PWR_BLK_CNT||'|'||SFUL_CALL_CNT||'|'||SILENT_RETRY_CNT||'|'||T1_BHL_BLK_CNT||'|'||WCD_BLK_CNT||'|'||
    SMS_ATT_CNT||'|'||SMS_SXS_CNT||'|'||CTRL_CH_USG_CNT||'|'||CTRL_SL_USG_CNT||'|'||DO_SECT_PHL_FWD_PS_TMS||'|'||
    DO_SECT_PHL_REV_PS_TMS||'|'||EUSR_CONN_SETUP_ATT_CNT||'|'||EUSR_CONN_SETUP_F_CNT||'|'||FWD_D_TRANSD_QTY||'|'||
    MAC_ID_BLK_CNT||'|'||MAC_ID_UTIL_RT||'|'||MS_RQST_CNT||'|'||MS_RQST_D_QTY||'|'||NORM_CONN_CLS_CNT||'|'||
    NORM_SESS_RLS_CNT||'|'||RAB_SET_CNT||'|'||RCVD_RAB_CNT||'|'||REV_AIR_PER_BAD_FRM_CNT||'|'||REV_AIR_PER_TRSF_D_QTY||'|'||
    REV_D_TRANSD_QTY||'|'||RNC_BLK_CNT||'|'||SESS_ATT_CNT||'|'||SESS_CONF_SXS_CNT||'|'||SL_USG_CNT||'|'||MAX_USER_CNT||'|'||
    AVG_USER_CNT||'|'||MOU_TMS||'|'
    from ds3r_fh_all_fa_lvl_kpi
    where D_DTM = to_date('8/19/2013', 'mm/dd/yyyy');

但我不知道如何将列名作为标题包含在文件中。我该怎么做?

【问题讨论】:

【参考方案1】:
set heading on
set pagesize 0 embedded on
包括标题 无限的页面大小

【讨论】:

【参考方案2】:

您应该将pagesize 设置为非零数字,这样您的标题才会显示。您设置的数字可能取决于您拥有的行数。如果按照以下行将其设置为 100:

set pagesize 100

然后将在标题下打印 100 行,然后在接下来的 100 行中重复列标题。 50000 中提到的最大值。还将heading 设置为打开为

set heading on

否则它不会显示标题,尽管页面大小不为零。另请记住,当您以这种方式选择列时,它们不会被填充,因此标题可能会显得不合适。

【讨论】:

【参考方案3】:

我会建议你一个更聪明的解决方案,因为我一直在研究这个问题。您可以从自己的文本中创建它,而不是显示对我来说不是一个很好的解决方案的标题。 只需添加一个 SELECT 和 UNION 就可以很好地做到这一点:

SELECT 'CHANNEL_CODE ; ISDN ; ACTIVATION_DATE ; TOTAL_MONEY ' from dual
union all
SELECT * ... (your query here)

希望这会有所帮助。

【讨论】:

【参考方案4】:

将 pagesize 设置为 0 会关闭 sql*plus 中的列标题。

尝试将其设置为 50000

set pagesize 50000

我认为这是最大值(我可能错了!)

【讨论】:

【参考方案5】:

.sql 文件顶部的以下设置有效。

设置页面大小 50000 设置标题

【讨论】:

【参考方案6】:

设置pagesize 0嵌入

在假脱机后添加上面的行

【讨论】:

以上是关于在管道分隔的 sqlplus 中带有列标题的假脱机的主要内容,如果未能解决你的问题,请参考以下文章

Pyspark处理数据中带有列分隔符的数据集

ORACLE 如何使用具有动态假脱机位置的假脱机

如何在 sql*plus 中修复我的假脱机 csv 文件中的格式

Bootstrap:容器中带有列的全宽网格

如何将从文件上传小部件上传的假脱机文件传递到 C FILE *f 指针

SQLPlus 假脱机追加