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

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

 2010-02-16 14:59:34 来源:WEB开发网   
核心提示:请注意,FOR语句不同于其他的迭代语句,DB2 9.5 SQL Procedure Developer认证考试 735 准备,第1部分(6),因为它用于迭代一个定义好的结果集中的行,为了演示这些循环技巧的使用,而且,可以引用循环中隐式地获取的值,我们来编写一个过程,该过程从一个EMPLOYEE 表中获取每个雇员的姓氏、

请注意,FOR语句不同于其他的迭代语句,因为它用于迭代一个定义好的结果集中的行。

为了演示这些循环技巧的使用,我们来编写一个过程,该过程从一个EMPLOYEE 表中获取每个雇员的姓氏、工作年限和年龄,并将其插入到新表 REPORT_INFO_DEPT 中,这些信息分别被声明为 lname varchar(15)、hiredate date 和 birthdate date。

请注意,使用一个简单的SQL语句也可以做同样的事情,但是在这个例子中我们使用 3 种不同的循环语句。

清单 13. 简单的循环例子

CREATE PROCEDURE LEAVE_LOOP (DEPTIN char(3), OUT p_counter INTEGER)
Ll: BEGIN
  DECLARE v_at_end , v_counter INTEGER DEFAULT 0;
  DECLARE v_lastname VARCHAR(15);
  DECLARE v_birthd, v_hired DATE;
  DECLARE c1 CURSOR
   FOR SELECT lastname, hiredate, birthdate FROM employee
     WHERE WORKDEPT = deptin;
  DECLARE CONTINUE HANDLER FOR NOT FOUND SET v_at_end = 1;
  OPEN c1;
  FETCH_LOOP: LOOP
  FETCH c1 INTO v_lastname, v_hired, v_birthd;
   IF v_at_end <> 0 THEN  -- loop until last row of the cursoR
    LEAVE FETCH_LOOP;
   END IF;
   SET v_counter = v_counter + 1;
   INSERT INTO REPORT_INFO_DEPt
     values(v_lastname, v_hired, v_birthd);
  END LOOP FETCH_LOOP;
  SET p_counter = v_counter;
 END Ll

现在,我们使用 WHILE循环语句来做同样的事情。

清单 14. WHILE循环的例子

CREATE PROCEDURE DEPT_REPT (DEPTIN char(3), OUT p_counter INTEGER)
Pl: BEGIN
  DECLARE v_at_end , v_counter INTEGER DEFAULT 0;
  DECLARE v_lastname VARCHAR(15);
  DECLARE v_birthd, v_hired DATE;
  DECLARE c1 CURSOR
   FOR SELECT lastname, hiredate, birthdate FROM employee
     WHERE WORKDEPT = deptin;
  DECLARE CONTINUE HANDLER FOR NOT FOUND SET v_at_end = 1;
  OPEN c1;
  FETCH c1 INTO v_lastname, v_hired, v_birthd;
  WHILE (v_at_end = 0)
  DO
   INSERT INTO REPORT_INFO_DEPt
        values(v_lastname, v_hired, v_birthd);
   SET v_counter = v_counter + 1;
   FETCH c1 INTO v_lastname, v_hired, v_birthd;
  END WHILE;
  SET p_counter = v_counter;
 END P1

REPEAT循环非常类似于WHILE循环,只不过条件是在最后检查的(因此,它实际上是一个UNTIL循环)。

现在,我们使用包含FOR循环语句的一个过程来填充 REPORT_INFO_DEPT 表。

清单 15. FOR循环的例子

CREATE PROCEDURE DEPT_REPT1 (DEPTIN char(3), OUT p_counter INT)
P1:BEGIN
  DECLARE v_counter INT DEFAULT 0;
  FOR dept_loop AS
   SELECT lastname, hiredate, birthdate FROM employee
     WHERE WORKDEPT = deptin
  DO
   INSERT INTO REPORT_INFO_DEPT values
(dept_loop.lastname,dept_loop.hiredate,dept_loop.birthdate);
   SET v_counter = v_counter + 1;
  END FOR;
  SET p_counter = v_counter;
 END P1

请注意,最后一个过程没有打开游标、从游标中取数据或关闭游标 — 所有这些都是由 FOR循环语句隐式进行的。而且,可以引用循环中隐式地获取的值,使用循环名称限定列(例如 dept_loop.lastname)— 而不必使用本地变量来存储这些值。

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

Tags:DB SQL Procedure

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