Oracle条件选择语句和循环语句

  1. 云栖社区>
  2. 博客>
  3. 正文

Oracle条件选择语句和循环语句

技术小胖子 2017-11-09 17:54:00 浏览1028
展开阅读全文

    条件选择语句(IF,CASE)、循环语句(LOOP、WHILE和FOR)和顺序控制语句(GOTO,NULL)。 
1、IF条件选择语句
1.1 简单条件判断

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
DECLARE
 
 v_sal NUMBER(6,2);
 
BEGIN
 
 SELECT sal INTO v_sal FROM emp WHERE lower(ename)=lower('&&name');
 
IF v_sal<2000 THEN
 
 UPDATE emp SET sal=v_sal+200 WHERE lower(ename)=lower('&name');
 
END IF;
 
END;

 
1.2 二重条件分支

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
DECLARE
 
 v_comm NUMBER(6,2);
 
BEGIN
 
 SELECT comm INTO v_comm FROM emp WHERE empno=&no;
 
 IF v_comm<>0 THEN
 
  UPDATE emp SET comm=v_comm+100 WHERE empno=&no;
 
 ELSE
 
  UPDATE emp SET comm=200 WHERE empno=&no;
 
 END IF;
 
END;

 
1.3 多重条件分支

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
DECLARE
 
 v_job VARCHAR2(10);
 
 V_sal NUMBER(6,2);
 
BEGIN
 
 SELECT job,sal INTO v_job,v_sal FROM emp WHERE empno=&no;
 
 IF v_job='PRESIDENT' THEN
 
  UPDATE emp SET sal =v_sal+1000 WHERE empno=&no;
 
 ELSEIF 
 
  v_job='MANAGER' THEN
 
  UPDATE emp SET sal=v_sal+500 WHERE empno=&no;
 
 ELSE
 
  UPDATE emp SET sal=v_sal+200 WHERE empno=&no;
 
 END IF;
 
END

 
2、CASE条件选择语句
2.1 使用单一选择符进行等值比较

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
DECLARE
 
 v_deptno emp.deptno%TYPE;
 
BEGIN
 
 v_deptno:=&no;
 
CASE v_deptno
 
 WHEN 10 THEN
 
  UPDATE emp SET comm=100 WHERE deptno=v_deptno;
 
 WHEN 20 THEN
 
  UPDATE emp SET comm=80 WHERE deptno=v_deptno;
 
 WHEN 30 THEN
 
  UPDATE emp SET comm=30 WHERE deptno=v_deptno;
 
 ELSE
 
  DBMS_OUTPUT.PUT_LINE('不存在该部门');
 
END CASE;
 
END;

 备注:ELSE后为不满足条件时默认处理结果。


2.2 在CASE语句中使用多种条件比较
 当使用单一条件选择符进行等值比较时,可以使用CASE xxx 语法来实现,如果包含有多种条件进行不等比较,那么必须在WHEN子句中指定比较条件。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
DECLARE
 
 v_sal emp.sal%TYPE;
 
 v_ename emp.ename%TYPE;
 
BEGIN
 
 SELECT sal ,ename INTO v_sal,v_ename FROM emp WHERE empno=&no;
 
CASE
 
 WHEN v_sal<1000 THEN
 
  UPDATE emp SET comm=100 WHERE ename=v_ename;
 
 WHEN v_sal<2000 THEN
 
  UPDATE emp SET comm=80 WHERE ename=v_ename;
 
 WHEN v_sal<6000 THEN
 
  UPDATE emp SET comm=50 WHERE ename=v_ename;
 
END CASE;
 
END;

 
3、LOOP循环

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
DECLARE
 
 i NUMBER(10):=1;
 
BEGIN
 
 LOOP
 
  DBMS_OUTPUT.PUT_LINE(i);  
 
  i:=i+1;
 
  EXIT WHEN i=10;
 
 END LOOP;
 
END;

备注:必须使用WHEN子句有条件退出循环。

 

4、WHILE循环
 基本循环至少执行一次循环体内的语句,而对于WHILE循环来说,只有条件为TRUE才会执行循环体内的语句。以WHILE..LOOP 开始 END LOOP结束。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
DECLARE
 
 i NUMBER(10):=1;
 
BEGIN
 
 WHILE i<=10 LOOP
 
  DBMS_OUTPUT.PUT_LINE(i);
 
  i:=i+1;
 
 END LOOP;
 
END;

 
5、FOR循环

1
2
3
4
5
6
7
8
9
BEGIN
 
 FOR IN 1..10 LOOP
 
  DBMS_OUTPUT.PUT_LINE(i);
 
 END LOOP;
 
END;
1
2
3
4
5
6
7
8
9
BEGIN
 
 FOR IN REVERSE 1..10 LOOP
 
  DBMS_OUTPUT.PUT_LINE(i);
 
 END LOOP;
 
END;

备注:关键字REVERSE表示逆向,即从最大值向下递减。FOR循环可以嵌套。

 

 6、GOTO语句

     无条件跳转到一个标签处。eg:goto 标签名称;

    备注:Oracle标签定义为:<<标签名称>>

                Oracle使用两个单引号表示转义含义,eg:'''表示一个单引号。

                 GOTO语句对系统性能影响很大,建议尽量少用。

 

7、NULL语句

    什么都不做,只是将控制权交给下一个语句。

 

      本文转自stock0991 51CTO博客,原文链接:http://blog.51cto.com/qing0991/1597705,如需转载请自行联系原作者



 

 

网友评论

登录后评论
0/500
评论
技术小胖子
+ 关注