【发布时间】:2019-01-03 03:24:14
【问题描述】:
我在 Teradata SQL 中创建了一个宏(我第一次这样做)。我过去曾将 SAS 用于宏,所以这就是我的背景。但是对于这个项目,我需要使用 Teradata,而宏真的很有帮助。
CREATE MACRO member_count(state CHAR(2)) AS
(
Select
':state1' as state,
other_vars, etc
FROM database.:state_member;
);
EXEC member_count(NM);
我假设在这里发生的是,任何时候使用短语“:状态”都会将字母 NM 调用到代码中。但是,当我运行代码时,我收到错误 3707:语法错误,期望在 '.' 之间出现类似 'UDFCALLNAME' 关键字的内容。和':'。
宏是否可以实现我想要完成的任务?如果是这样,我需要改变什么?
【问题讨论】:
-
非常确定不能将变量/参数用作表或列名 (
database.:state_member)。您正在尝试使用宏不支持的动态 SQL。您需要为此使用存储过程。 -
您不能在此处使用变量作为对象名称(在此实例中是表,但也可以是数据库、列等)。您必须切换到使用存储过程,并且必须将动态生成的 SQL 设置为 varchar 变量,然后您必须打开从该动态 sql 生成的游标,以便可以将其返回给调用的用户程序。
-
在创建宏或teradata程序之前,请检查您是否有创建权限。我没有看到任何我工作的地方有权为 SAS 程序员创建 Teradata SP 或宏。