?
快捷搜索:  as  test  1111  test aNd 8=8  test++aNd+8=8  as++aNd+8=8  as aNd 8=8

长沙麻将留牌技巧:喜虎娱乐:分布式DBA:SQL存储过程知识总结

?

长沙转转麻将必胜口诀 www.fv7j.com.cn DB2 存储历程:根基常识

您在客户端事情站上对远程办事器和位于该办事器上的数据库进行分类的任何时刻,都存在一个简单的 DB2 客户端/办事器情况。在这种情况中,每次对远程办事器上的数据库履行 SQL 语句时,语句本身经由过程收集从客户端发送到办事器上的数据库。然后数据库处置惩罚语句,结果经由过程收集发送回客户端。这意味着,对付每条被履行的 SQL 语句,两条消息都必须颠末收集。是以,履行大年夜量 SQL 操作的利用喜虎娱乐法度榜样将孕育发生大年夜量收集通信。

存储历程是编写并直接存储在数据库中的命名 SQL 语句组(在一些环境中,包括操作系统调用)。存储历程供给下列上风:

削减收集通信量。对付编码在存储历程中的 SQL 语句,消息不经由过程收集发送。假如存储历程设计精确,那么只有客户端利用法度榜样必要的数据才经由过程收集发送。

前进办事器密集型事情的机能。由于较少数据经由过程喜虎娱乐收集发送,并且由于处置惩罚在办事器上完成,以是繁杂查询和其它办事器密集型的事情可以更快地履行。

营业逻辑的分离和重用。当营业规则被合并到存储历程中时,可以仅仅根据需求调用存储历程来多次重用逻辑。此外,包管相同的营业规则逻辑在所有应用它的利用法度榜样中同等实施。假如营业规则改变,那么只必要改变存储历程中的逻辑;不必要变动调用存储历程的利用法度榜样。

造访办事器功能。由于存储历程在办事器事情站上直接运行,以是它们可以使用任何额外的内存、更快的处置惩罚器或数据库办事器可能具备的其它资本。别的,存储历程可以履行许多 DB2 的治理敕令,这些敕令只能在办事器上运行。着末,由于存储历程不仅仅限于履行数据库的活动,以是它们的优点是可以使用已经安装在办事器上的任何附加软件。

然则,有两个必要留意的地方。第一,所有输入数据都必须在调用时从利用法度榜样通报到存储历程。第二,存储历程天生的结果数据集只有在存储历程完成履行后才返回给利用法度榜样?;痪浠八?,在存储历程运行时代,利用法度榜样和存储历程之间不能发生任何交互。

创建 SQL 存储历程

对付 Linux、Unix 和 Windows 平台上的 DB2,可以应用三种不合类型的存储历程:SQL 的、外部的和滥觞(sourced)的存储历程。正如名称所示,SQL 存储历程完全由 SQL 语句和 SQL PL 工具组成。相反,外部存储历程应用 C、C++、Java 或 COBOL 等高档编程说话构成。滥觞存储历程是基于其它 SQL 或外部存储历程的存储历程。

存储历程经由过程履行 CREATE PROCEDURE SQL 语句创建。这个语句存在三种形式(每种类型的存储历程有一种);用来创建 SQL 存储历程的形式的基础语法如下: CREATE PROCEDURE [ProcedureName] ( [ParamType] [ParamName] [DataType] ,...)

CREATE PROCEDURE [ProcedureName] ( [ParamType] [ParamName] [DataType] ,...)

<SPECIFIC [SpecificName]>

<DYNAMIC RESULT SETS 0 | DYNAMIC RESULT SETS [NumResultSets]>

<CONTAINS SQL | READS SQL DATA | MODIFIES SQL DATA>

<DETERMINISTIC | NOT DETERMINISTIC>

<CALLED ON NULL INPUT>

<LANGUAGE SQL>

[ProcedureBody]

此中:

ProcedureName 标识指定给存储历程的名称。

ParamType 唆使 ParamName 标识的参数是输入参数(IN)、输出参数(OUT)或两者(INOUT)都是。

ParamName 标识指定给存储历程参数的名称。

DataType 标识存储历程期望为 ParamName 标识的参数接管和/或发送的数据类型。

SpecificName 标识指定给存储历程的专用名。当一个专用名被指定给存储历程时,可以经由过程在特殊形式的 DROP SQL 语句(DROP SPECIFIC PROCEDURE [SpecificName])中引用专用名来删除存储历程。然则,假如没有指定任何专用名,那么必须同时供给存储历程名称和存储历程署名(也便是每个存储历程参数应用的数据类型的列表)来作为 DROP 语句的输入。专用名不能用来调用存储历程。

NumResultSets 唆使存储历程返回结果数据集并标识返回若干数据集。

ProcedureBody 标识调用存储历程时要履行的单个 SQL 语句或者一个或多个复合 SQL 语句。

留意:方括号([])中显示的参数或选项必填写;尖括号(

CREATE PROCEDURE conv_temp.f_to_c(IN temp_f REAL, OUT temp_c REAL)

DYNAMIC RESULT SETS 0

CONTAINS SQL

DETERMINISTIC

LANGUAGE SQL

BEGIN

DECLARE temp_value REAL;

SET temp_value = (temp_f - 32);

SET temp_c = (5 * temp_value) / 9;

END

SQL 存储历程款式

与单个 SQL 语句不合,大年夜部分环境中,SQL 存储历程体由一个或多个复合 SQL 语句组成。复喜虎娱乐合 SQL 语句只是由关键字 BEGIN 和 END 封装的两个或多个 SQL 语句或 SQL PL 工具,并且以分号结尾。一条 ATOMIC 复合 SQL 语句可以觉得是单个的整体吗?假如在此中孕育发生任何未处置惩罚的差错前提,所有履行到该点的语句都被觉得已经掉败,并且回滚对数据库所做的任何变动。

当复合语句用来创建 SQL 存储历程体时,它可以包孕几个逻辑部分。为了精确地开拓一个 SQL 存储历程,应用的每个部分都必须以异常特定的顺序实现。每个逻辑部分必须依据的实现顺序如下所示:BEGIN

变量声明

前提声明

游标声明

前提处置惩罚法度榜样声明

赋值,流程节喜虎娱乐制,SQL语句和其它复合语句

END

正如这个款式布局所示,可选的变量、前提和前提处置惩罚法度榜样声明必须在存储历程逻辑(应用 SQL PL 流程节制语句实现)和 SQL 语句之前。游标可以在任何地方声明,然则最好在任何前提处置惩罚法度榜样声明之前定义。

SQL 存储历程可以由遵照此款式的一个或多个复合语句(或块)组成,这些块可以嵌套或依次履行。为了清晰地显示流程节制,每个块都可以加上标签,从而可以包孕许多 SQL 语句。这使进行节制转移语句引用时加倍轻易实现正确性。

清单 2 显示一个其存储历程体由几个嵌套复合 SQL 语句组成的 SQL 存储历程,它们遵照刚才所述的款式??梢栽?DB2 9 SQL Reference(卷 2)中的标题 “复合 SQL(存储历程)” 下找到关于这种款式的更多信息,以及若何对每个部分进行编码的具体信息和例子。

清单 2. 饱含多个子句的存储历程

CREATE PROCEDURE hr.adjust_salary

(IN empid INTEGER, IN rating INTEGER, OUT msg VARCHAR(128))

DYNAMIC RESULT SETS 1

MODIFIES SQL DATA

DETERMINISTIC

LANGUAGE SQL

main: BEGIN

DECLARE SQLSTATE CHAR(5) DEFAULT '00000';

DECLARE SQLCODE INTEGER DEFAULT 0;

DECLARE not_found CONDITION FOR SQLSTATE '02000';

DECLARE c1 CURSOR WITH RETURN FOR SELECT * FROM hr.employees;

error_handler: BEGIN

DECLARE EXIT HANDLER FOR not_found

SIGNAL SQLSTATE '20000' SET MESSAGE_TEXT = 'Employee ID not found';

work: BEGIN ATOMIC

IF (rating = 1) THE喜虎娱乐N

UPDATE hr.employees SET salary = salary * 1.10

WHERE emp_id = empid;

ELSEIF (rating = 2) THEN

UPDATE hr.employees SET salary = salary * 1.05

WHERE emp_id = empid;

ELSEIF (rating = 3) THEN

UPDATE hr.employees SET salary = salary * 1.03

WHERE emp_id = empid;

ELSE

UPDATE hr.employees SET put_on_plan = 'Y'

WHERE emp_id = empid;

END IF;

SET msg = 'Updated record for employee with ID = ' || CHAR(empid);

END work;

END error_handler;

OPEN c1;

END main

调用 SQL 存储历程

创建 SQL 存储历程之后,就可以从另一个 SQL 存储历程或从一个客户端利用法度榜样交互式地调用它(应用敕令行编辑器或 CLP 等对象)。经由过程履行 CALL 语句调用 SQL 存储历程;这个语句的基础语法如下: CALL [ProcedureName] (,...)

此中:

ProcedureName 标识指定给要调用的存储历程的名称。记着,调用存储历程时必须应用存储历程名,而不是专用名。

ParameterValue 标识要通报给所调用的存储历程的一个或多个参数值。

OutputValue 标识一个或多个接管由所调用存储历程返回的值的参数标记或主机变量。

您可以从 CLP 调用清单 1 中所示的 SQL 存储历程(经由过程连接到相宜的数据库和履行类似以下的 CALL 语句): CALL conv_temp.f_to_c(98.6, ?)

当这个语句被履行时,值 98.6 经由过程名称为 TEMP_F 的输入参数通报给存储历程,问号(?)被用作一个占位符,用于将经由过程名称为 TEMP_C 的输出参数所返回的值。

可以从嵌入的 SQL 利用法度榜样应用如下的 CALL 语句来调用相同的存储历程: EXEC SQL CALL conv_temp.f_to_c(98.6, :TempC)

在这种环境,TempC 是主机变量的名称,该变量应用与 REAL DB2 数据类型兼容的特定于编程说话的数据类型来声明。

效率和机能

SQL 存储历程供给有效的措施将营业规则逻辑从利用法度榜样移动到数据库。平日,这种移动带来极大年夜的机能提升,由于在办事器上完成处置惩罚,并且必须经由过程收集传输的消息更少。应用 SQL 存储历程包管在造访数据库的所有利用法度榜样中同等地实施营业规则。并且由于 SQL 存储历程中的逻辑可以零丁改动,以是当营业规则改变时不必从新编写利用法度榜样。

不管是设计新的数据库利用法度榜样照样只想简化日常操作,都可以探求时机应用 SQL 存储历程。假如您发明 SQL 存储历程的开拓和支配在您的事情中很有用,那么您可能想成为一名 IBM 认证的 DB2 9.5 SQL 存储历程开拓职员。

编辑保举

深入MySQL数据库的索引

懂得MySQl数据库目录

Oracle中SQL语句的几种用法

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

您可能还会对下面的文章感兴趣: