WEB开发网
开发学院数据库DB2 DB2 9.5 SQL Procedure Developer认证考试 735 准... 阅读

DB2 9.5 SQL Procedure Developer认证考试 735 准备,第1部分

 2010-02-16 14:59:34 来源:WEB开发网   
核心提示:Select-statement 是一条有效的SQL SELECT语句,可以指定 FOR UPDATE子句,DB2 9.5 SQL Procedure Developer认证考试 735 准备,第1部分(4),以便将游标用于定位更新或删除,WITHOUT HOLD/WITH HOLD 选项定义 COMMIT 操作之后的

Select-statement 是一条有效的SQL SELECT语句。可以指定 FOR UPDATE子句,以便将游标用于定位更新或删除。

WITHOUT HOLD/WITH HOLD 选项定义 COMMIT 操作之后的游标状态(open/close)。默认情况下为 WITHOUT HOLD。如果使用了WITH HOLD 选项定义一个游标,那么在COMMIT 操作之后,该游标保持 OPEN 状态。在ROLLBACK 操作之后,所有游标都将被关闭。

下面是一个显式声明游标的例子,它可以用于过程中后面的迭代处理:

清单 8. 游标声明的例子

DECLARE mycur1 CURSOR
 FOR SELECT e.empno, e.lastname, e.job
   FROM employee e, department d
   WHERE e.workdept = d.deptnO
    AND deptname =’PLANNING’;

虽然SQL语句不能包含参数占位符,但是它可以引用在游标之前声明的本地变量。例如:

清单 9. 使用本地变量的游标声明

DECLARE v_dept CHAR(3) DEAFULT ‘ ‘;
DECLARE myres_set CURSOR
  FOR SELECT empno, lastname, job, salary, comm.
    FROM employee
    WHERE workdept = v_dept;

游标和结果集

在SQL过程中,除了迭代结果集中的行以外,游标还可以做更多的事情。游标还可用于将结果集返回给调用程序或其他过程。

WITHOUT RETURN/WITH return 选项指定游标的结果表是否用于作为从一个过程中返回的结果集。

WITH RETURN TO CALLER 选项指定将来自游标的结果集返回给调用者,后者可以是另一个过程或一个客户机应用程序。这是默认选项。

WITH RETURN TO CLIENT 选项指定将来自游标的结果集返回给客户机应用程序,绕过任何中间的嵌套过程。

若要从一个过程中返回结果集,需要:

创建一个过程,创建时指定 DYNAMIC RESULT SETS子句。

声明游标,声明时指定 WITH RETURN子句。

打开该游标,并使之保持 open 状态。

如果关闭该游标,则结果集将不能返回给调用者应用程序。

清单 10 演示了一个游标的声明,该游标从一个过程中返回一个结果集:

清单 10. 返回一个结果集的游标的声明

CREATE PROCEDURE emp_from_dept()
DYNAMIC RESULT SETS 1
P1: BEGIN
 DECLARE c_emp_dept CURSOR WITH RETURN
  FOR SELECT empno, lastname, job, salary, comm.
    FROM employee
    WHERE workdept = ‘E21’;
  OPEN c_emp_dept;
 END P1

游标处理

为了在一个过程中处理一个游标的结果,需要做以下事情:

在存储过程块的开头部分 DECLARE 游标。

打开该游标。

将游标的结果取出到之前已声明的本地变量中(隐式游标处理除外,在下面的FOR语句中将对此加以解释)。

关闭该游标。(注意:如果现在不关闭游标,当过程终止时将隐式地关闭游标)。

条件语句

SQL PL 中支持两种类型的条件语句 — IF语句和 CASE语句。

IF语句

通过 IF语句可以根据一个条件的状态来实现逻辑的分支。IF语句支持使用可选的ELSEIF子句和默认的ELSE子句。END IF子句是必需的,它用于表明 IF语句的结束。

清单 11 展示了一个示例 IF语句。

清单 11. IF语句示例

IF years_of_serv > 30 THEN
    SET gl_sal_increase = 15000;
  ELSEIF years_of_serv > 20 THEN
    SET gl_sal_increase = 12000;
  ELSE
    SET gl_sal_increase = 10000;
  END IF;

上一页  1 2 3 4 5 6 7 8  下一页

Tags:DB SQL Procedure

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