如何让BTEQ导出文件在无返回数据时仍显示列名?
解决BTEQ无数据时导出文件仍包含列名的问题
要实现BTEQ查询无返回数据时仍导出列名,只需添加**.SET RETONERROR ON**参数,同时确保相关输出配置正确。以下是修改后的脚本及关键说明:
修改后的完整脚本
tva() { if [ -f "${lien}/test.txt" ]; then rm -f "${lien}/test.txt" fi touch "${lien}/test.txt" bteq <<EOF >>"${lien}/TVA-${DATE}-log.txt" 2>&1 .logmech LDAP .LOGON ${TDPID}/${USERID},${PASSWORD} .set width 2000 .set titledashes off; .SET FORMAT OFF; .set session charset 'UTF8' # 关键参数:开启后即使查询无数据也会输出表头 .SET RETONERROR ON; .export REPORT file="${lien}/test.txt" SELECT top 5 * FROM ${DB}.TABLENAME; .EXPORT RESET .set recordmode off .logoff; .quit; EOF } tva
关键参数说明
.SET RETONERROR ON:BTEQ默认在查询返回0行时跳过表头输出,开启该参数后,无论查询是否有返回数据,都会强制生成列名表头,完美匹配需求。- 保持
.EXPORT REPORT模式:该模式会保留查询的列名表头,而EXPORT DATA模式默认不输出表头,请勿切换到DATA模式。
额外验证点
如果上述配置仍不生效,可以确认以下两点:
- 确保
.SET HEADING ON(默认开启,可显式添加该参数确保生效) - 检查查询语句末尾是否添加了分号
;,BTEQ对语句结束符要求严格,缺失可能导致输出异常
内容的提问来源于stack exchange,提问作者Gérard Menfin
相关产品推荐
相关产品推荐

