更新时间:2024-04-28 GMT+08:00

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