📅  最后修改于: 2021-01-11 11:43:13             🧑  作者: Mango
存储过程包含一组SQL语句和过程语句。它们由一组控制和条件处理注释组成,这些注释使SQL成为计算上完整的编程语言。存储过程的定义存储在数据库中,参数存储在数据字典表中。
这些功能为应用程序程序员提供了Teradata数据库的基于服务器的过程接口。
对于某些战术查询应用程序,存储过程可能会带来很大的好处。本节提供:
Teradata存储过程具有以下基本优势,例如:
构成存储过程主要任务的一组语句称为存储过程主体,由单个语句或复合语句或块组成。
单个语句存储过程主体可以包含一个控制语句(例如LOOP或WHILE)或一个SQL DDL,DML或DCL语句(包括动态SQL) 。不允许使用以下语句,例如:
复合语句存储过程主体由包含一组声明和语句的BEGIN-END语句组成,包括:
Teradata存储过程是通过以下命令创建的:
这些过程作为对象存储在用户数据库空间中,并在服务器上执行。
句法
以下是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 |