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
Copy
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
$$
Copy

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
Copy

Amostra de padrões da origem

Exemplo básico IF

Teradata BTEQ
-- Additional Params: -q SnowScript
.QUIT ERRORCODE;
Copy
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
$$
Copy

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

  1. 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;
Copy

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
Copy
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
$$
Copy

Problemas conhecidos

Não foram encontrados problemas.

EWIS relacionados

  1. SSC-EWI-0001: Token não reconhecido na linha do código-fonte.

  2. SSC-FDM-0027: Próxima instrução removida, não aplicável no SnowFlake.

  3. SSC-EWI-0073: Revisão de equivalência funcional pendente

  4. 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
Copy

Amostra de padrões da origem

Exemplo básico IF

Teradata BTEQ
-- Additional Params: -q SnowScript
.IF ACTIVITYCOUNT <> 0 THEN .GOTO InsertEmployee;
Copy
Snowflake SQL
EXECUTE IMMEDIATE
$$
  DECLARE
    STATUS_OBJECT OBJECT := OBJECT_CONSTRUCT('SQLCODE', 0);
  BEGIN
    IF (STATUS_OBJECT['SQLROWCOUNT'] != 0) THEN
       
      RETURN 1;
    END IF;
  END
$$
Copy

EWIS relacionados

Sem EWIs relacionados.