Teradata 宏
宏是一组通过调用宏名来存储和执行的SQL语句。宏的定义存储在数据字典中。用户只需要 EXEC 权限即可执行宏。用户不需要对宏内部使用的数据库对象拥有单独的权限。宏语句作为单个事务执行。如果宏中的 SQL 语句之一失败,则所有语句都将回滚。宏可以接受参数。宏可以包含 DDL 语句,但这应该是宏中的最后一条语句。
创建宏
宏是使用 CREATE MACRO 语句创建的。
语法
以下是 CREATE MACRO 命令的通用语法。
CREATE MACRO <macroname> [(parameter1, parameter2,...)] (
<sql statements>
);
示例
考虑以下员工表。
EmployeeNo |
名字 |
姓氏 |
出生日期 |
101 |
迈克 |
詹姆斯 |
1/5/1980 |
104 |
亚历克斯 |
斯图尔特 |
11/6/1984 |
102 |
罗伯特 |
威廉姆斯 |
3/5/1983 |
105 |
罗伯特 |
詹姆斯 |
12/1/1984 |
103 |
彼得 |
保罗 |
4/1/1983 |
以下示例创建一个名为 Get_Emp 的宏。它包含一个 select 语句,用于从员工表中检索记录。
CREATE MACRO Get_Emp AS (
SELECT
EmployeeNo,
FirstName,
LastName
FROM
employee
ORDER BY EmployeeNo;
);
执行宏
使用 EXEC 命令执行宏。
语法
以下是 EXECUTE MACRO 命令的语法。
示例
以下示例执行名为 Get_Emp 的宏;当执行以下命令时,它会从员工表中检索所有记录。
EXEC Get_Emp;
*** Query completed. 5 rows found. 3 columns returned.
*** Total elapsed time was 1 second.
EmployeeNo FirstName LastName
--------------------------------------------------------------------
101 Mike James
102 Robert Williams
103 Peter Paul
104 Alex Stuart
105 Robert James
参数化宏
Teradata 宏可以接受参数。在宏中,这些参数用 ; (分号)。
以下是一个接受参数的宏示例。
CREATE MACRO Get_Emp_Salary(EmployeeNo INTEGER) AS (
SELECT
EmployeeNo,
NetPay
FROM
Salary
WHERE EmployeeNo = :EmployeeNo;
);
执行参数化宏
宏使用 EXEC 命令执行。您需要 EXEC 权限才能执行宏。
语法
以下是 EXECUTE MACRO 语句的语法。
示例
以下示例执行名为 Get_Emp 的宏;它接受员工编号作为参数并从该员工的员工表中提取记录。
EXEC Get_Emp_Salary(101);
*** Query completed. One row found. 2 columns returned.
*** Total elapsed time was 1 second.
EmployeeNo NetPay
-----------------------
101 36000