WEB开发网
开发学院数据库MSSQL Server 分布式DBA:掌握SQL存储过程 阅读

分布式DBA:掌握SQL存储过程

 2008-09-01 09:58:34 来源:WEB开发网   
核心提示: SQL 存储过程格式与单个 SQL 语句不同,大部分情况中,分布式DBA:掌握SQL存储过程(4),SQL 存储过程体由一个或多个复合 SQL 语句组成,复合 SQL 语句只是由关键字 BEGIN 和 END 封装的两个或多个 SQL 语句或 SQL PL 对象,它们遵循刚才所述的格式,可

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. 饱含多个子句的存储过程

   CREATEPROCEDUREhr.adjust_salary
  (INempidINTEGER,INratingINTEGER,OUTmsgVARCHAR(128))
  DYNAMICRESULTSETS1
  MODIFIESSQLDATA
  DETERMINISTIC
  LANGUAGESQL
  main:BEGIN
  DECLARESQLSTATECHAR(5)DEFAULT'00000';
  DECLARESQLCODEINTEGERDEFAULT0;
  DECLAREnot_foundCONDITIONFORSQLSTATE'02000';
  DECLAREc1CURSORWITHRETURNFORSELECT*FROMhr.employees;
  error_handler:BEGIN
  DECLAREEXITHANDLERFORnot_found
  SIGNALSQLSTATE'20000'SETMESSAGE_TEXT='EmployeeIDnotfound';
  work:BEGINATOMIC
  IF(rating=1)THEN
  UPDATEhr.employeesSETsalary=salary*1.10
  WHEREemp_id=empid;
  ELSEIF(rating=2)THEN
  UPDATEhr.employeesSETsalary=salary*1.05
  WHEREemp_id=empid;
  ELSEIF(rating=3)THEN
  UPDATEhr.employeesSETsalary=salary*1.03
  WHEREemp_id=empid;
  ELSE
  UPDATEhr.employeesSETput_on_plan='Y'
  WHEREemp_id=empid;
  ENDIF;
  SETmsg='UpdatedrecordforemployeewithID='||CHAR(empid);
  ENDwork;
  ENDerror_handler;
  OPENc1;
  ENDmain

上一页  1 2 3 4 5  下一页

Tags:分布式 DBA 掌握

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接