📅  最后修改于: 2020-11-29 09:06:30             🧑  作者: Mango
宏是一组SQL语句,它们通过调用宏名称来存储和执行。宏的定义存储在数据字典中。用户只需要EXEC特权即可执行宏。用户不需要对宏内使用的数据库对象具有单独的特权。宏语句作为单个事务执行。如果宏中的SQL语句之一失败,则所有语句都将回滚。宏可以接受参数。宏可以包含DDL语句,但这应该是宏中的最后一条语句。
使用CREATE MACRO语句创建宏。
以下是CREATE MACRO命令的通用语法。
CREATE MACRO [(parameter1, parameter2,...)] (
);
考虑下面的雇员表。
EmployeeNo | FirstName | LastName | BirthDate |
---|---|---|---|
101 | Mike | James | 1/5/1980 |
104 | Alex | Stuart | 11/6/1984 |
102 | Robert | Williams | 3/5/1983 |
105 | Robert | James | 12/1/1984 |
103 | Peter | Paul | 4/1/1983 |
下面的示例创建一个名为Get_Emp的宏。它包含一个select语句,用于从employee表中检索记录。
CREATE MACRO Get_Emp AS (
SELECT
EmployeeNo,
FirstName,
LastName
FROM
employee
ORDER BY EmployeeNo;
);
使用EXEC命令执行宏。
以下是EXECUTE MACRO命令的语法。
EXEC ;
下面的示例执行宏名称Get_Emp;执行以下命令时,它将从employee表中检索所有记录。
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语句的语法。
EXEC (value);
下面的示例执行宏名称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