SnowConvert AI – Teradata – COMMON STATEMENTS¶
Referências de tradução para converter instruções de script Teradata que são comuns a todas as sintaxes de script para o Snowflake SQL
ERROR HANDLING¶
Os recursos de tratamento de erros do BTEQ são baseados nos códigos de erro do banco de dados Teradata. Esses são os códigos de erro padrão e as mensagens produzidas em resposta às instruções do Teradata SQL especificadas pelo usuário. Um usuário do BTEQ não pode alterar, modificar ou excluir essas mensagens.
Para obter mais informações sobre o tratamento de erros do BTEQ, veja aqui.
Amostra de padrões da origem¶
Exemplo básico de tratamento de erros do BTEQ¶
O conteúdo das condições de erro é realocado em diferentes instruções caso ERRORCODE seja diferente de zero; caso contrário, ele pode ser localizado como o código original. Primeiro, a consulta acima da instrução if é realocada em um bloco BEGIN - END, onde, no caso de uma exceção, ela será capturada no bloco EXCEPTION. Em segundo lugar, a variável ERRORCODE será alterada para a variável declarada indicando seu SQLCODE com um EWI indicando que o número exato do SQLCODE não é o mesmo que o ERRORCODE em BTEQ.
Teradata BTEQ¶
-- Additional Params: -q SnowScript
SELECT * FROM table1;
.IF ERRORCODE<>0 THEN .EXIT 1
.QUIT 0
Snowflake SQL¶
EXECUTE IMMEDIATE
$$
DECLARE
STATUS_OBJECT OBJECT := OBJECT_CONSTRUCT('SQLCODE', 0);
BEGIN
BEGIN
-- Additional Params: -q SnowScript
SELECT
*
FROM
table1;
STATUS_OBJECT := OBJECT_CONSTRUCT('SQLROWCOUNT', SQLROWCOUNT);
EXCEPTION
WHEN OTHER THEN
STATUS_OBJECT := OBJECT_CONSTRUCT('SQLCODE', SQLCODE, 'SQLERRM', SQLERRM, 'SQLSTATE', SQLSTATE);
END;
IF (STATUS_OBJECT['SQLCODE'] /*** SSC-FDM-TD0013 - THE SNOWFLAKE ERROR CODE MISMATCH THE ORIGINAL TERADATA ERROR CODE ***/ != 0) THEN
RETURN 1;
END IF;
RETURN 0;
END
$$
Problemas conhecidos¶
Não foram encontrados problemas.
EXIT ou QUIT¶
Faz o logoff de todas as sessões do banco de dados e sai do BTEQ.
O valor de gravidade mais alto encontrado durante a execução de BTEQ será usado por padrão como valor de código de retorno de BTEQ, a menos que um argumento seja explicitamente fornecido. (Comando EXIT ou QUIT da referência de consulta básica do Teradata)
.<ExitCommand> [<Result>];
<ExitCommand> := EXIT | QUIT
<Result> := <Status_variable> | Number
<Status_variable> := ACTIVITY_COUNT | ERRORCODE | ERRORLEVEL
Amostra de padrões da origem¶
Exemplo básico IF¶
Teradata BTEQ¶
-- Additional Params: -q SnowScript
.QUIT ERRORCODE;
Snowflake SQL¶
EXECUTE IMMEDIATE
$$
DECLARE
STATUS_OBJECT OBJECT := OBJECT_CONSTRUCT('SQLCODE', 0);
BEGIN
RETURN STATUS_OBJECT['SQLCODE'] /*** SSC-FDM-TD0013 - THE SNOWFLAKE ERROR CODE MISMATCH THE ORIGINAL TERADATA ERROR CODE ***/;
END
$$
Problemas conhecidos¶
Quando o comando EXIT ou QUIT não tem uma entrada, ele retorna ERRORLEVEL como padrão. No entanto, o SnowConvert AI o transforma para retornar 0.
EWIS relacionados¶
SSC-FDM-TD0013: O código de erro do Snowflake não corresponde ao código de erro original do Teradata.
GOTO¶
Descrição¶
O comando do BTEQ Goto ignora todos os comandos BTEQ e instruções SQL intermediários até que um rótulo especificado seja encontrado e, em seguida, retoma o processamento normalmente. (Comando Goto referência de consulta básica do Teradata)
.GOTO LabelName;
Amostra de padrões da origem¶
Exemplo básico GOTO¶
O Snowflake Scripting não tem uma instrução equivalente para o comando Goto BTEQ do Teradata, mas felizmente ele pode ser removido do código de entrada e é possível obter um código equivalente, devido à sequência dos comandos Goto e Labels estar sempre em ordem topológica inversa. Em outras palavras, as definições vêm depois de seus usos. Assim, o SnowConvert AI só precisa copiar todo o código da seção Label de baixo para cima para suas instruções Goto correspondentes.
Teradata BTEQ¶
-- Additional Params: -q SnowScript
.LOGON 0/dbc,dbc;
DATABASE tduser;
.LOGON 127.0.0.1/dbc,dbc;
INSERT INTO TABLEB VALUES (1);
.IF activitycount = 0 then .GOTO SECTIONA
.IF activitycount >= 1 then .GOTO SECTIONB
.label SECTIONA
.REMARK 'Zero Hours on Account'
.GOTO SECTIONC
.label SECTIONB
.REMARK 'Total Hours on Account'
.label SECTIONC
.logoff
.exit
Snowflake¶
EXECUTE IMMEDIATE
$$
DECLARE
STATUS_OBJECT OBJECT := OBJECT_CONSTRUCT('SQLCODE', 0);
BEGIN
-- Additional Params: -q SnowScript
--.LOGON 0/dbc,dbc
!!!RESOLVE EWI!!! /*** SSC-EWI-0073 - PENDING FUNCTIONAL EQUIVALENCE REVIEW FOR 'BTLogOn' NODE ***/!!!
null;
BEGIN
USE DATABASE tduser;
STATUS_OBJECT := OBJECT_CONSTRUCT('SQLROWCOUNT', SQLROWCOUNT);
EXCEPTION
WHEN OTHER THEN
STATUS_OBJECT := OBJECT_CONSTRUCT('SQLCODE', SQLCODE, 'SQLERRM', SQLERRM, 'SQLSTATE', SQLSTATE);
END;
--.LOGON
!!!RESOLVE EWI!!! /*** SSC-EWI-0073 - PENDING FUNCTIONAL EQUIVALENCE REVIEW FOR 'BTLogOn' NODE ***/!!!
null;
/*** SSC-EWI-0001 - UNRECOGNIZED TOKEN ON LINE '4' COLUMN '8' OF THE SOURCE CODE STARTING AT '127.0'. EXPECTED 'STATEMENT' GRAMMAR. LAST MATCHING TOKEN WAS 'LOGON' ON LINE '4' COLUMN '2'. FAILED TOKEN WAS '127.0' ON LINE '4' COLUMN '8'. CODE '81'. ***/
/*--127.0.0.1/dbc,dbc*/
BEGIN
INSERT INTO TABLEB
VALUES (1);
STATUS_OBJECT := OBJECT_CONSTRUCT('SQLROWCOUNT', SQLROWCOUNT);
EXCEPTION
WHEN OTHER THEN
STATUS_OBJECT := OBJECT_CONSTRUCT('SQLCODE', SQLCODE, 'SQLERRM', SQLERRM, 'SQLSTATE', SQLSTATE);
END;
IF (NOT (STATUS_OBJECT['SQLROWCOUNT'] = 0)) THEN
--** SSC-FDM-TD0026 - GOTO SECTIONA WAS REMOVED DUE TO IF STATEMENT INVERSION **
IF (STATUS_OBJECT['SQLROWCOUNT'] >= 1) THEN
/*.label SECTIONB*/
--.REMARK 'Total Hours on Account'
null;
/*.label SECTIONC*/
--.logoff
null;
RETURN 0;
END IF;
END IF;
/*.label SECTIONA*/
--** SSC-FDM-0027 - REMOVED NEXT STATEMENT, NOT APPLICABLE IN SNOWFLAKE. **
--.REMARK 'Zero Hours on Account'
!!!RESOLVE EWI!!! /*** SSC-EWI-0073 - PENDING FUNCTIONAL EQUIVALENCE REVIEW FOR 'Remark' NODE ***/!!!
null;
/*.label SECTIONC*/
--.logoff
null;
RETURN 0;
/*.label SECTIONB*/
--** SSC-FDM-0027 - REMOVED NEXT STATEMENT, NOT APPLICABLE IN SNOWFLAKE. **
--.REMARK 'Total Hours on Account'
!!!RESOLVE EWI!!! /*** SSC-EWI-0073 - PENDING FUNCTIONAL EQUIVALENCE REVIEW FOR 'Remark' NODE ***/!!!
null;
/*.label SECTIONC*/
--** SSC-FDM-0027 - REMOVED NEXT STATEMENT, NOT APPLICABLE IN SNOWFLAKE. **
--.logoff
!!!RESOLVE EWI!!! /*** SSC-EWI-0073 - PENDING FUNCTIONAL EQUIVALENCE REVIEW FOR 'LogOff' NODE ***/!!!
null;
RETURN 0;
END
$$
Problemas conhecidos ¶
Não foram encontrados problemas.
EWIS relacionados¶
SSC-EWI-0001: Token não reconhecido na linha do código-fonte.
SSC-FDM-0027: Próxima instrução removida, não aplicável no SnowFlake.
SSC-EWI-0073: Revisão de equivalência funcional pendente
SSC-FDM-TD0026: a instrução GOTO foi removida devido à inversão da instrução if.
IF. .. THEN. ..¶
Descrição¶
A instrução IF valida uma condição e executa uma ação quando a ação é verdadeira. (IF. ..THEN. ..da referência de linguagem do Teradata SQL)
.IF <Condition> THEN <Action>;
<Condition> := <Status_variable> <Operator> Number
<Status_variable> := ACTIVITY_COUNT | ERRORCODE | ERRORLEVEL
<Operator> := ^= | != | ~= | <> | = | < | > | <= | >=
<Action> := BTEQ_command | SQL_request
Amostra de padrões da origem¶
Exemplo básico IF¶
Teradata BTEQ¶
-- Additional Params: -q SnowScript
.IF ACTIVITYCOUNT <> 0 THEN .GOTO InsertEmployee;
Snowflake SQL¶
EXECUTE IMMEDIATE
$$
DECLARE
STATUS_OBJECT OBJECT := OBJECT_CONSTRUCT('SQLCODE', 0);
BEGIN
IF (STATUS_OBJECT['SQLROWCOUNT'] != 0) THEN
RETURN 1;
END IF;
END
$$
EWIS relacionados¶
Sem EWIs relacionados.