Teradata是否支持宏变量或像这样?

时间:2017-10-25 07:06:51

标签: sql macros teradata

例如,我有一个应该每月刷新一次的报告,代码如下所示:

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

2 个答案:

答案 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