📜  Teradata存储过程

📅  最后修改于: 2021-01-11 11:43:13             🧑  作者: Mango

Teradata存储过程

存储过程包含一组SQL语句和过程语句。它们由一组控制和条件处理注释组成,这些注释使SQL成为计算上完整的编程语言。存储过程的定义存储在数据库中,参数存储在数据字典表中。

这些功能为应用程序程序员提供了Teradata数据库的基于服务器的过程接口。

对于某些战术查询应用程序,存储过程可能会带来很大的好处。本节提供:

  • 使用存储过程来处理复杂更新的一些示例。
  • 比较不同战术查询应用程序的存储过程和宏的相对效率。

优点

Teradata存储过程具有以下基本优势,例如:

  • 存储过程可减少客户端和服务器之间的网络负载。
  • 由于通过存储过程访问数据而不是直接访问数据,因此它提供了更好的安全性。
  • 由于业务逻辑已经过测试并存储在服务器中,因此可以提供更好的维护。

存储过程的要素

构成存储过程主要任务的一组语句称为存储过程主体,由单个语句或复合语句或块组成。

单个语句存储过程主体可以包含一个控制语句(例如LOOP或WHILE)或一个SQL DDL,DML或DCL语句(包括动态SQL) 。不允许使用以下语句,例如:

  • 任何声明语句,例如局部变量,游标,条件或条件处理程序。
  • 游标语句(OPEN,FETCH或CLOSE)。

复合语句存储过程主体由包含一组声明和语句的BEGIN-END语句组成,包括:

  • 局部变量声明。
  • 游标声明。
  • 条件声明。
  • 条件处理程序声明语句。
  • 控制语句。
  • 存储过程(包括动态SQL)支持的SQL DML,DDL和DCL语句。
  • 由关键字BEGIN REQUEST和END REQUEST分隔的多语句请求(包括动态多语句请求)。

创建一个存储过程

Teradata存储过程是通过以下命令创建的:

  • BTEQ实用程序使用COMPILE命令。
  • CLIv2应用程序,ODBC,JDBC和Teradata SQL Assistant(以前称为Queryman)使用SQL CREATE PROCEDURE或REPLACE PROCEDURE语句。
  • 使用CREATE PROCEDURE语句创建存储过程。

这些过程作为对象存储在用户数据库空间中,并在服务器上执行。

句法

以下是CREATE PROCEDURE语句的语法。

CREATE PROCEDURE  ( [parameter 1 data type, parameter 2 data type..] ) 
BEGIN 
   ; 
END;

考虑以下雇员的工资表。

EmployeeId Gross Deduction NetPay
202001 40,000 2,000 38,000
202002 80,000 3,000 77,000
202003 85,000 5,000 80,000
202004 90,000 2,000 88,000

下面的示例创建一个名为InsertSalary的存储过程,以接受这些值并将其插入到Salary Table中。

CREATE PROCEDURE InsertSalary 
( 
   IN in_EmployeeId INTEGER, 
   IN in_Gross INTEGER, 
   IN in_Deduction INTEGER, 
   IN in_NetPay INTEGER 
) 
BEGIN 
   INSERT INTO Salary 
( 
      EmployeeId, 
      Gross, 
      Deduction, 
      NetPay 
 ) 
   VALUES 
( 
      :in_EmployeeId, 
      :in_Gross, 
      :in_Deduction, 
      :in_NetPay 
  );
 
END;

执行存储过程

如果我们有足够的特权,则可以使用SQL CALL语句从任何支持的客户端实用程序或接口执行存储过程。

Java编写的外部存储过程中执行存储过程。我们必须为存储过程中包含的所有参数指定参数。

句法

以下是CALL语句的通用语法。

CALL  [(parameter values)];

下面的示例调用存储过程InsertSalary,并将记录插入到员工的Salary Table中。

EmployeeId Gross Deduction NetPay
202001 40,000 2,000 38,000
202002 80,000 3,000 77,000
202003 85,000 5,000 80,000
202004 90,000 2,000 88,000
202005 20,000 1,000 19,000