BTEQ工具命令
GaussDB(DWS)提供了一系列gsql元命令,可以等价替换常用的BTEQ工具命令。常用BTEQ命令的转换行为如下:
.QUIT | .EXIT | .RETURN
元命令\q [value]支持退出gsql程序,且可以通过value值指定退出码。.QUIT、.EXIT、.RETURN命令均可以通过\q等价转换。
输入 |
输出 |
---|---|
.QUIT 0 |
\q 0 |
.EXIT |
\q |
.RETURN |
\q |
.LABEL 和 .GOTO
Teradata命令.LABEL用于创建标签,通常与.GOTO配对使用。.GOTO会跳过所有中间的BTEQ命令和SQL语句,指导到达指定标签位置,执行相应的恢复处理。
gsql元命令\goto LABEL ... \label LABEL可以等价实现无条件跳转。
输入 |
输出 |
---|---|
.IF CHECK_PK='' THEN .GOTO NOCHECK ${CHECK_PK}; .LABEL NOCHECK .QUIT 0 |
\if ${CHECK_PK} == '' \goto NOCHECK \endif ${CHECK_PK} \label NOCHECK \q 0 |
.RUN FILE
执行指定文件的SQL请求,可等价转换成gsql元命令\i。
输入 |
输出 |
---|---|
.RUN FILE=sampfile |
\i 'sampfile' |
.EXPORT FILE
将SQL语句执行结果导出到指定文件,可等价转换成gsql元命令\o。
输入 |
输出 |
---|---|
.EXPORT REPORT FILE=resultfile |
\o 'resultfile' |
..SET ..END
设置变量记录指定值,可以是单行命令,也可以是以..END结束的多行命令,通过SELECT查询指定变量名或\set命令转换。
输入 |
输出 |
---|---|
.SET SEPARATOR ' | ' |
\set SEPARATOR '|' |
..SET NAME 'Jack' ..END |
SELECT 'Jack' AS "NAME"; |
.IF
.IF是重要的流程控制命令之一,用于有条件地执行输入脚本的部分内容。可以是单分支命令,与THEN子句配对使用;也可以是多分支命令,多分支IF结构允许嵌套多层,但每层必须以IF命令开始,以ENDIF命令结束。
gsql提供流控元命令\if ... \else ... \endif可以等价转换此BTEQ命令。
输入 |
输出 |
---|---|
.IF ERRORCODE <> 0 THEN .QUIT 12; |
\if ${ERROR} != 'false' \q 12 \endif |
..FOR
循环控制命令中,在满足循环条件时,可以不断执行循环体的脚本,直到.QUIT退出循环。GaussDB(DWS)提供\for ... \loop ... \exit-for ... \end-for结构命令实现循环逻辑。
输入 |
输出 |
---|---|
..IF ACTIVITYCOUNT > 0 THEN ..FOR SEL SqlStr AS V_SqlStr FROM ${ ETL_DATA}.TB_DWDATA_UPDATE WHERE JobName = '${JOB_NAME}' AND TXDATE = ${ TX_DATE} - 19000000 ORDER BY ExcuteSeq ASC; ..DO ${V_SqlStr} .IF ERRORCODE<>0 THEN .QUIT 12 ..END-FOR ..END-IF |
\if ${ERROR} != 'false' \q 12 \endif \if ${ACTIVITYCOUNT} != 0 \for SELECT SqlStr AS V_SqlStr FROM ${ETL_DATA}.TB_DWDATA_UPDATE WHERE JobName = '${JOB_NAME}' AND TXDATE = to_date( ${TX_DATE} ,'yyyymmdd' ) ORDER BY ExcuteSeq ASC \loop ${V_SqlStr} ; \if ${ERROR} != 'false' \q 12 \endif \end-for \endif |