如何将Teradata SHOW语句的结果打印到文本文件,以便可执行DDL

时间:2019-03-22 00:19:01

标签: shell teradata ddl teradata-sql-assistant

我想编写一个Teradata bteq脚本,该脚本通过捕获show命令的输出来导出表的所有DDL。我认为这就像将从BTEQ执行的show命令的结果导出到文件一样简单,并且这种方法在没有列压缩的表上也能很好地工作(请参见下面的脚本)。

问题是,当存在包含大量压缩值的列时,输出会包装并有时会在压缩值列表的中间中断行(例如,对于“ BUSINESS”,您会得到“ BUS”,然后下一行以INESS开头) '。压缩值自动换行意味着我无法运行导出的DDL。

起初,我认为将宽度设置为一个超大数字可以防止自动换行,但是我不能将宽度设置为足够大的值来处理压缩值字符串的宽度。这意味着我唯一的选择是在Teradata SQL Assistant中运行一条show语句,并一次复制并粘贴该一条语句以创建我的create table DDL脚本。我必须认为有一种更好的方法可以以导出的DDL可执行的方式捕获现有DDL?

#!/bin/ksh
# -------------------------------------------------------------------------
# Environment Variables
LDAP_IND=".logmech LDAP"
TD_UID=uXXXXX
TD_PWD='pwXXXX'
TD_TDPID=TD1
OUT_SCRIPT=./DDL.txt
echo "-----------------------------------"
echo "TD_UID =<${TD_UID}>"
echo "-----------------------------------"

###########################################################################
bteq<<EOBTQ
${LDAP_IND}
.logon ${TD_TDPID}/${TD_UID},${TD_PWD}
.IF ERRORCODE>0 THEN .GOTO ABEND
--#  START  SQL ###########################################################

.set width 999
.export report file=${OUT_SCRIPT}
.set defaults
.set format off
.set foldline on 1,2,3,4
.set sidetitles off
--  IS WIDTH MAX ENOUGH TO ALWAYS ACCOMODATE ALL COMPRESSED VALUES?
.set width 65531

-- Export DDL for Tables Using Show Commands
show sel * from DB_PRODUCTS.t_product_ref;

show sel * from DB_PRODUCTS.t_acct;

--#  FINISH SQL ###########################################################
.LABEL GOODEND;
.QUIT;
.LABEL ABEND;
.QUIT ERRORCODE;
EOBTQ

1 个答案:

答案 0 :(得分:0)

答案是将宽度增加到CompressValueList的最大字符值将确保输出文件可以容纳压缩值文本的全部宽度而无需换行。这意味着.set width仅需要为8193即可解决此问题。警告任何超级编辑用户,某些编辑器会使用“自动换行”,其中该行显示为换行,但不是。