设为首页 收藏本站
查看: 615|回复: 0

[经验分享] Oracle条件选择语句和循环语句

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2014-12-31 08:08:13 | 显示全部楼层 |阅读模式
条件选择语句(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 i IN 1..10 LOOP

  DBMS_OUTPUT.PUT_LINE(i);

END LOOP;

END;



1
2
3
4
5
6
7
8
9
BEGIN

FOR i IN REVERSE 1..10 LOOP

  DBMS_OUTPUT.PUT_LINE(i);

END LOOP;

END;



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



运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.iyunv.com/thread-39954-1-1.html 上篇帖子: red hat6.1 部署32位 oracle 11g 下篇帖子: 我跟oracle odbc做斗争!win2008 r2 64位安装oracle instantclient odbc方法和故障解决 Oracle
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表