更新时间:2024-10-26 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