📅  最后修改于: 2021-01-11 11:40:19             🧑  作者: Mango
宏是一组通过调用宏名称存储和执行的SQL语句。宏的定义存储在数据字典中。
用户只需要EXEC特权即可执行宏。用户不需要对宏内使用的数据库对象具有单独的权限。
宏由一个或多个可以通过执行单个语句执行的语句组成。每次宏完成时,都可以返回一行或多行数据。
宏语句作为单个事务执行。如果宏中的SQL语句之一失败,则所有语句都将回滚。宏可以接受参数。宏可以包含DDL语句,但这应该是宏中的最后一条语句。
可以将常用的SQL语句或一系列语句合并到宏中,并使用SQL CREATE MACRO语句进行定义。使用EXECUTE语句执行宏中的注释。宏可以包含执行另一个宏的EXECUTE语句。
在要在其中创建宏的数据库或用户上创建CREATE MACRO特权。创建者使用GRANT OPTION自动获得DROP MACRO和EXECUTES特权。宏的直接所有者:
句法
使用CREATE MACRO语句创建宏。以下是CREATE MACRO命令的通用语法。
CREATE MACRO [(parameter1, parameter2,...)]
(
);
Emp_Id | First_Name | Last_Name | BirthDate |
---|---|---|---|
202001 | Mike | Richard | 11/05/1990 |
202002 | Robert | Williams | 20/01/1988 |
202003 | Peter | Collin | 21/08/1985 |
202004 | Alexa | Stuart | 10/12/1992 |
202005 | Robert | Peterson | 19/03/1987 |
工资表:
Emp_Id | Gross | Deduction | NetPay |
---|---|---|---|
202001 | 40,000 | 4,000 | 36,000 |
202002 | 80,000 | 6,000 | 74,000 |
202003 | 90,000 | 7,000 | 83,000 |
202004 | 75,000 | 5,000 | 70,000 |
202005 | 80,000 | 00 | 80,000 |
下面的示例创建一个名为Get_Emp的宏。它包含一个select语句,用于从employee表中检索记录。
CREATE MACRO Get_Emp AS
(
SELECT
Emp_Id,
First_Name,
Last_Name
FROM
employee
ORDER BY Emp_Id;
);
宏(宏所在的数据库)的直接所有者必须对宏中包含的语句的请求集中命名的对象具有必要的特权。
句法
使用EXEC命令执行宏。以下是EXECUTE MACRO命令的语法。
EXEC ;
例
下面的示例执行宏名称Get_Emp;当执行以下命令时,它将从employee表中检索所有记录。
EXEC Get_Emp;
/* Query completed. 5 rows found. 3 columns returned */
/* Total elapsed time was 1 second */
Emp_Id First_Name Last_Name
202001 Mike Richard
202002 Robert Williams
202003 Peter Collin
202004 Alexa Stuart
202005 Robert Peterson
Teradata宏可以接受参数。在宏中,这些参数用分号(;)引用。
例
以下是接受参数的宏的示例。
CREATE MACRO Get_Emp_Salary(Emp_Id INTEGER) AS
(
SELECT
Emp_Id,
NetPay
FROM
Salary
WHERE Emp_Id = :Emp_Id;
);
使用EXEC命令执行宏。我们需要EXEC特权才能执行宏。
句法
以下是EXECUTE MACRO语句的语法。
EXEC (value);
例
下面的示例执行宏名称Get_Emp。它接受员工ID作为参数,并从员工表中提取该员工的记录。
EXEC Get_Emp_Salary(202001);
/* Query completed. One row found. 2 columns returned */
/* Total elapsed time was 1 second */
Emp_Id NetPay
202001 36,000
REPLACE特权取决于被替换的宏是否已经存在。
注意