📜  Teradata宏

📅  最后修改于: 2021-01-11 11:40:19             🧑  作者: Mango

Teradata宏

宏是一组通过调用宏名称存储和执行的SQL语句。宏的定义存储在数据字典中。

用户只需要EXEC特权即可执行宏。用户不需要对宏内使用的数据库对象具有单独的权限。

宏由一个或多个可以通过执行单个语句执行的语句组成。每次宏完成时,都可以返回一行或多行数据。

宏语句作为单个事务执行。如果宏中的SQL语句之一失败,则所有语句都将回滚。宏可以接受参数。宏可以包含DDL语句,但这应该是宏中的最后一条语句。

可以将常用的SQL语句或一系列语句合并到宏中,并使用SQL CREATE MACRO语句进行定义。使用EXECUTE语句执行宏中的注释。宏可以包含执行另一个宏的EXECUTE语句。

创建宏

在要在其中创建宏的数据库或用户上创建CREATE MACRO特权。创建者使用GRANT OPTION自动获得DROP MACRO和EXECUTES特权。宏的直接所有者:

  • 它是数据库所在的数据库,而不是创建数据库的用户。
  • 确定宏访问权限,而不是宏。
  • 必须具有执行宏的所有适当特权,包括WITH GRANT OPTION

句法

使用CREATE MACRO语句创建宏。以下是CREATE MACRO命令的通用语法。

CREATE MACRO  [(parameter1, parameter2,...)] 
( 
    
);
  • macro_name:新宏的名称。如果未指定标准名称,则使用默认数据库或用户。宏的名称在其包含的用户或数据库中必须唯一。
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特权取决于被替换的宏是否已经存在。

  • 如果宏已经存在,则对宏的DROP MACRO特权或其包含数据库或用户。
  • 如果该宏尚不存在,则对宏或其包含的数据库或用户具有CREATE MACRO特权。

注意

  • 一旦宏被替换,它的直接所有者就是它所在的数据库,而不是替换它的用户。
  • 直接拥有的数据库必须具有执行宏的所有适当特权,包括WITH GRANT OPTION。