Как использовать переменные в Teradata SQL Macros

Я хочу использовать переменные внутри моего макроса SQL на Teradata.

Я думал, что смогу сделать что-то вроде следующего:

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 ); ); 

Я могу делать то, что я ищу, с помощью хранимой процедуры, однако я хочу избежать производительности.

У вас есть идеи об этом?
Есть ли что-нибудь еще, что я могу попробовать?

ура
Тим

Вы не можете DECLARE переменную внутри макроса. То, что вы пытаетесь выполнить, может быть обработано с помощью инструкции 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 ;