加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

PLSQL的循环控制

发布时间:2020-12-12 16:16:49 所属栏目:百科 来源:网络整理
导读:1.if DECLARE v_count NUMBER (10) := 0; --定义计数器变量 v_empno NUMBER (4) := 7888; --定义员工编号BEGIN SELECT COUNT (1) --首先查询指定的员工编号是否存在 INTO v_count FROM emp WHERE empno = v_empno; --使用IF语句判断,如果员工编号不存在,结

1.if

DECLARE
   v_count   NUMBER (10) := 0;                               --定义计数器变量
   v_empno   NUMBER (4)  := 7888;                              --定义员工编号
BEGIN
   SELECT COUNT (1)                           --首先查询指定的员工编号是否存在
     INTO v_count
     FROM emp
    WHERE empno = v_empno;

   --使用IF语句判断,如果员工编号不存在,结果为0
   IF v_count = 0
   THEN
      --则执行INSERT语句,插入新的员工记录
      INSERT INTO emp
                  (empno,ename,job,hiredate,sal,deptno
                  )
           VALUES (v_empno,'张三','经理',TRUNC (SYSDATE),1000,20
                  );
   END IF;

   --向数据库提交更改
   COMMIT;
EXCEPTION
   WHEN OTHERS
   THEN
      DBMS_OUTPUT.put_line (SQLERRM);                          --输出异常信息
END;
2.if elseif else
DECLARE
   v_character   CHAR(1) :=&tmpVar;    --定义替换变量
BEGIN
   IF v_character = 'A'                --判断字符是否为'A',如果不是,则跳到下一个ELSIF
   THEN
      DBMS_OUTPUT.put_line ('当前输出字符串:' || v_character);
   ELSIF v_character = 'B'             --判断字符是否为'B',如果不是,则跳到下一个ELSIF
   THEN
      DBMS_OUTPUT.put_line ('当前输出字符串:' || v_character);
   ELSIF v_character = 'C'             --判断字符是否为'C',如果不是,则跳到下一个ELSIF
   THEN
      DBMS_OUTPUT.put_line ('当前输出字符串:' || v_character);
   ELSIF v_character = 'D'             --判断字符是否为'D',如果不是,则跳到ELSE语句
   THEN
      DBMS_OUTPUT.put_line ('当前输出字符串:' || v_character);
   ELSE
      DBMS_OUTPUT.put_line ('不是A-D之间的字符');
   END IF;
END;
3.case
/* Formatted on 2011/08/16 15:59 (Formatter Plus v4.8.8) */
DECLARE
   v_job     VARCHAR2 (30);             --定义保存CASE选择器的字符型变量
   v_empno   NUMBER (4)    := &empno;   --定义用来查询员工的员工编号
BEGIN
   SELECT job                           --获取选择器v_job的值
     INTO v_job
     FROM emp
    WHERE empno = v_empno;
   --当指定了CASE的选择器为v_job后,所有的WHEN子句的类型必须匹配为VARCHAR2类型
   CASE v_job 
      WHEN 'CLERK'
      THEN
         UPDATE emp
            SET sal = sal * (1 + 0.15)
          WHERE empno = v_empno;

         DBMS_OUTPUT.put_line ('为普通职员加薪15%');
      WHEN 'ANALYST'
      THEN
         UPDATE emp
            SET sal = sal * (1 + 0.18)
          WHERE empno = v_empno;

         DBMS_OUTPUT.put_line ('为分析人员加薪18%');
      WHEN 'MANAGER'
      THEN
         UPDATE emp
            SET sal = sal * (1 + 0.20)
          WHERE empno = v_empno;

         DBMS_OUTPUT.put_line ('为管理人员加薪20%');
      WHEN 'SALESMAN'
      THEN
         UPDATE emp
            SET sal = sal * (1 + 0.22)
          WHERE empno = v_empno;

         DBMS_OUTPUT.put_line ('为销售人员加薪22%');
      ELSE                  --使用ELSE语句显示信息
         DBMS_OUTPUT.put_line ('员工职级不在加薪的行列!');
   END CASE;                --终止CASE语句块
END;

4.LOOP
DECLARE
   v_count   NUMBER (2) := 0;         --定义循环计数变量
BEGIN
   LOOP                               --开始执行循环
      v_count := v_count + 1;         --循环计数器加1
      --打印字符信息
      DBMS_OUTPUT.put_line ('行' || v_count || ':Hello PL/SQL!');
      --如果计数条件为10,则退出循环
      IF v_count = 10
      THEN
         EXIT;       --使用EXIT退出循环
      END IF;
   END LOOP;
   --循环退出后,将执行这条语句
   DBMS_OUTPUT.put_line ('循环已经退出了!');
END;


DECLARE
   v_count   NUMBER (2) := 0;         --定义循环计数变量
BEGIN
   LOOP                               --开始执行循环
      v_count := v_count + 1;         --循环计数器加1
      --打印字符信息
      DBMS_OUTPUT.put_line ('行' || v_count || ':Hello PL/SQL!');
      --如果计数条件为10,则退出循环
      EXIT WHEN v_count=10;
   END LOOP;
   --循环退出后,将执行这条语句
   DBMS_OUTPUT.put_line ('循环已经退出了!');
END;

5.while loop
/* Formatted on 2011/08/17 09:11 (Formatter Plus v4.8.8) */
DECLARE
   counter   NUMBER := 1;          --定义计数器变量
BEGIN
   WHILE (counter < 10)            --判断循环的条件为counter<10
   LOOP
      DBMS_OUTPUT.put_line ('计数器 [' || counter || '].');    
      IF counter >= 1              --如果循环计数器大于等于1
      THEN
         counter := counter + 1;   --将循环计数器加1
      END IF;
   END LOOP;
END;
/
6.for loop
/* Formatted on 2011/08/17 20:47 (Formatter Plus v4.8.8) */
DECLARE
   v_total   INTEGER := 0;    --循环累计汇总数字
BEGIN
   FOR i IN 1 .. 3            --使用FOR循环开始循环计数
   LOOP
      v_total := v_total + 1; --汇总累加
      DBMS_OUTPUT.put_line ('循环计数器值:' || i);
   END LOOP;
   --输出循环结果值
   DBMS_OUTPUT.put_line ('循环总计:' || v_total);
END;

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读