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

简介:

    条件选择语句(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,如需转载请自行联系原作者



 

 

相关文章
|
SQL Oracle 算法
Mybatis: 兼容Oracle数据库批量插入语句
当前项目需要在不同环境下部署,不同环境下有不同的数据库,有pg、oracle、mysql等,项目中的所有sql均为pg数据库相关的sql,由于oracle数据库比较特殊所以需要兼容相关的sql。批量插入的语句,pg和oracle有着较大的差别,不能同一条语句兼顾两种数据库:,所以需要查找方案来解决。
929 0
|
SQL Oracle 关系型数据库
Oracle ASM磁盘和磁盘组的常用SQL语句
Oracle ASM磁盘和磁盘组的常用SQL语句
190 0
|
SQL Oracle 关系型数据库
【数据库】解决 oracle: SQL 错误 [900] [42000]: ORA-00900: 无效 SQL 语句
【数据库】解决 oracle: SQL 错误 [900] [42000]: ORA-00900: 无效 SQL 语句
1914 0
【数据库】解决 oracle: SQL 错误 [900] [42000]: ORA-00900: 无效 SQL 语句
|
SQL 存储 Oracle
Oracle数据库 | SQL语句解析
Oracle数据库 | SQL语句解析
246 0
Oracle数据库 | SQL语句解析
|
Oracle 关系型数据库 数据库
Oracle 常用语句
了解Oracle 常用语句。
|
SQL 存储 Oracle
Oracle数据库 | SQL语句执行计划、语句跟踪与优化实例
Oracle数据库 | SQL语句执行计划、语句跟踪与优化实例
257 0
|
Oracle 关系型数据库 数据库
Oracle语句判断字符串是否为数字及translate函数解析
Oracle语句判断字符串是否为数字及translate函数解析
366 0
|
SQL Oracle 关系型数据库
oracle学习90-oracle之基本的sql_select语句全
oracle学习90-oracle之基本的sql_select语句全
79 0
oracle学习90-oracle之基本的sql_select语句全
|
SQL Oracle 关系型数据库
oracle学习89-oracle之基本的sql_select语句之课后练习
oracle学习89-oracle之基本的sql_select语句之课后练习
88 0
oracle学习89-oracle之基本的sql_select语句之课后练习
|
SQL Oracle 关系型数据库
oracle学习48-oracle命令窗口执行sql语句
oracle学习48-oracle命令窗口执行sql语句
157 0
oracle学习48-oracle命令窗口执行sql语句