例如,我有一个应该每月刷新一次的报告,代码如下所示:
SELECT *
FROM table1
WHERE report_date = '2017-10-01'
;
SELECT a.*, b.*
FROM table1 a
JOIN table2 b on a.key = b.key
WHERE b.date = '2017-10-01'
;
由于 是否有可能用宏变量替换每个语句中的日期,这被调用一次?代码可能如下所示:
LET macro_var = '2017-10-01';
SELECT *
FROM table1
WHERE report_date = <macro_var>
;
SELECT a.*, b.*
FROM table1 a
JOIN table2 b on a.key = b.key
WHERE b.date = <macro_var>
;
答案 0 :(得分:1)
在teradata中,您可以为此创建parameterized macro
,如下所示。
CREATE MACRO macro1(r_date date) AS (
SELECT *
FROM table1
WHERE report_date = :r_date;
SELECT a.*,
b.*
FROM table1 a
JOIN table2 b ON a.key1 = b.key1
WHERE b.report_date = :r_date;
);
您可以使用
运行它exec macro1('2017-10-01');
OR
exec macro1(DATE '2017-10-01'); -- recommended
<强>更新强>
在Teradata SQL Assitant中,要在代码中插入变量,请使用问号,后跟变量名称,如下所示。
SELECT *
FROM table1
WHERE report_date = '?r_date';
SELECT a.*,
b.*
FROM table1 a
JOIN table2 b ON a.key1 = b.key1
WHERE b.report_date = '?r_date';
按F5
或执行按钮后,系统会弹出变量r_date
的值
答案 1 :(得分:0)
我正在使用您的代码,但显示下一个错误
<块引用>Creat4 Macro Failed 3524:用户没有 CREATE MACRO 访问权限 到数据库 PROD_DWH_CONSULTA
CREATE MACRO macro1(r_date date) AS (
SELECT *
FROM PROD_DWH_CONSULTA.ENTIDADES
WHERE Fecha_Act = :r_date;
);
exec macro1(DATE '2017-10-01'); -- recommended