2010-04-22 3 views
0

Teradata에서 내 매크로 SQL 내에서 변수를 사용하고 싶습니다.Teradata SQL 매크로에서 변수를 사용하는 방법

나는 나는 다음과 같은 것을 할 수 있다고 생각 : 작동하지 않았다 그러나

REPLACE MACRO DbName.MyMacro 
( 
    MacroNm VARCHAR(50) 
) 
AS 
( 

    /* Variable to store last time the macro was run */ 

    DECLARE V_LAST_RUN_DATE TIMESTAMP; 


    /* Get last run date and store in V_LAST_RUN_DATE */ 

    SELECT LastDate 
    INTO V_LAST_RUN_DATE 
    FROM DbName.RunLog 
    WHERE MacroNm = :MacroNm; 


    /* Update the last run date to now and save the old date in history */ 

    EXECUTE MACRO DbName.RunLogUpdater( 
     :MacroNm 
    ,V_LAST_RUN_DATE 
    ,CURRENT_TIMESTAMP 
    ); 

); 

를, 그래서 내가 대신 생각 :

REPLACE MACRO DbName.MyMacro 
( 
    MacroNm VARCHAR(50) 
) 
AS 
( 

    /* Variable to store last time the macro was run */ 

    CREATE VOLATILE TABLE MacroVars AS 
    ( 
     SELECT LastDate AS V_LAST_RUN_DATE 
      FROM DbName.RunLog 
      WHERE MacroNm = :MacroNm; 
    ) 
    WITH DATA ON COMMIT PRESERVE ROWS; 


    /* Update the last run date to now and save the old date in history */ 

    EXECUTE MACRO DbName.RunLogUpdater( 
     :MacroNm 
    ,SELECT V_LAST_RUN_DATE FROM MacroVars 
    ,CURRENT_TIMESTAMP 
    ); 

); 

내가 난 무엇을 할 수 저장 프로 시저를 찾고 있지만 성능을 피하고 싶습니다.

의견이 있으십니까?
내가 시도 할 수 있는게 뭔가 있습니까?

건배

+0

호기심에서 벗어난 상태에서 저장된 proc은 어떤 성능 문제를 일으 킵니까? – lins314159

답변

1

당신은 매크로의 내부 변수를 선언 할 수 없습니다. 그렇게하려는 경우 UPDATE 문을 사용하여 처리 할 수 ​​있습니다.

UPDATE TGT 
FROM <dbname>.<target table> TGT 
    , (SELECT MacroName 
      , LastRunDate 
     FROM <dname>.<source table> 
    ) SRC 
SET LastRunDate = SRC.LastRunDate 
    , EffectiveTimestamp = CURRENT_TIMESTAMP(0) 
WHERE TGT.MacroName = SRC.MacroName 
; 
관련 문제