SnowConvert AI - Teradata - COMMON STATEMENTS

모든 스크립트 구문에 공통적인 Teradata 스크립트 문을 Snowflake SQL로 변환하기 위한 변환 참조

ERROR HANDLING

BTEQ 오류 처리 기능은 Teradata 데이터베이스 오류 코드를 기반으로 합니다. 다음은 사용자가 지정한 Teradata SQL 문에 대한 응답으로 생성되는 표준 오류 코드 및 메시지입니다. BTEQ 사용자는 이러한 메시지를 변경, 수정 또는 삭제할 수 없습니다.

BTEQ 오류 처리에 대한 자세한 내용은 여기 를 참조하십시오.

샘플 소스 패턴

기본 BTEQ 오류 처리 예제

ERRORCODE 가 0과 다른 경우 오류 조건 내용은 다른 문으로 재배치되며, 그렇지 않은 경우 원래 코드 그대로 위치할 수 있습니다. 첫째, if 문 위의 쿼리는 BEGIN - END 블록 내에 재배치되며, 예외가 발생할 경우 EXCEPTION 블록에서 catch됩니다. 둘째, ERRORCODE 변수는 SQLCODE 를 나타내는 변수로 변경되며, EWI 는 SQLCODE 의 정확한 수가 BTEQ 의 ERRORCODE 와 동일하지 않음을 나타냅니다.

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

Known Issues

문제가 발견되지 않았습니다.

EXIT 또는 QUIT

모든 데이터베이스 세션을 로그오프한 다음 BTEQ 를 종료합니다.

BTEQ 의 실행 중에 발생하는 가장 높은 심각도 값은 명시적으로 인자가 제공되지 않는 한 기본적으로 BTEQ 의 반환 코드 값으로 사용됩니다. (Teradata Basic Query Reference EXIT 또는 QUIT 명령)

.<ExitCommand> [<Result>];
<ExitCommand> := EXIT | QUIT
<Result> := <Status_variable> | Number 
<Status_variable> := ACTIVITY_COUNT | ERRORCODE | ERRORLEVEL
Copy

샘플 소스 패턴

기본 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

Known Issues

EXIT 또는 QUIT 명령에 입력이 없으며, 기본값으로 ERRORLEVEL을 반환합니다. 그러나 SnowConvert AI는 이를 0을 반환하도록 변환합니다.

관련 EWIS

  1. SSC-FDM-TD0013: Snowflake 오류 코드가 원본 Teradata 오류 코드와 일치하지 않습니다.

GOTO

설명

BTEQ Goto 명령은 지정된 레이블이 발견될 때까지 모든 중간 BTEQ 명령 및 SQL 문을 건너뛴 다음 평소와 같이 처리를 재개합니다.(Teradata 기본 쿼리 참조 Goto 명령)

.GOTO LabelName;
Copy

샘플 소스 패턴

기본 GOTO 예제

Snowflake Scripting에는 Teradata BTEQ Goto 명령에 해당하는 문이 없지만, Goto 및 레이블 명령이 항상 역 위상 순서로 배열되어 있기 때문에 입력 코드에서 제거하고 동등한 코드를 받을 수 있습니다. 즉, 정의는 용도 뒤에 옵니다. 따라서, SnowConvert AI는 모든 상향식 레이블 섹션 코드를 해당 Goto 문에 복사하기만 하면 됩니다.

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

알려진 문제

문제가 발견되지 않았습니다.

관련 EWIS

  1. SSC-EWI-0001: 소스 코드 줄에 인식할 수 없는 토큰이 있습니다.

  2. SSC-FDM-0027: SnowFlake에서 사용할 수 없는 다음 문이 제거되었습니다.

  3. SSC-EWI-0073: 보류 중 함수 동등성 검토

  4. SSC-FDM-TD0026: 문 반전으로 인해 GOTO 문이 제거되었습니다.

IF… THEN…

설명

IF 문은 조건의 유효성을 검사하고 작업이 true일 때 작업을 실행합니다. (Teradata SQL Language Reference IF…THEN…)

.IF <Condition> THEN <Action>;

<Condition> := <Status_variable> <Operator> Number
<Status_variable> := ACTIVITY_COUNT | ERRORCODE | ERRORLEVEL
<Operator> := ^= | != | ~= | <> | = | < | > | <= | >=
<Action> := BTEQ_command | SQL_request
Copy

샘플 소스 패턴

기본 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

관련 EWIs 없음.