控制结构
来源:互联网 发布:管理信息系统软件测试 编辑:程序博客网 时间:2024/05/17 03:37
1. 条件分支语句
<1>if语句
<span style="font-size: 14px;">
<span style="font-family: Arial, Helvetica, sans-serif;">DECLARE</span>
in_var emp.sal%TYPE;BEGIN SELECT sal INTO in_var FROM emp WHERE empno=&out_var; IF(in_var<=2000)THEN dbms_output.put_line('in_var<=2000.'); ELSIF in_var<=5000 AND in_var>2000 THEN --! dbms_output.put_line('in_var<=5000 AND in_var>2000.'); ELSE dbms_output.put_line('in_var>5000.'); END IF;END;</span>
注:此处与其他语言的if语句略有差异,在Oracle数据库中,if语句的其他条件,使用elsif关键字,而不是else if。
<2>case语句
case语句可根据条件从多个执行分支选择相应的执行动作,并返回一个值。语法如下:
CASE selector
WHEN expression1 Thenresult1
WHENexpressionn Thenresultn
[ ELSEresultn+1; ]
END;
用case语句解决上面案例,如下:
<span style="font-size:14px;">
DECLARE in_var emp.sal%TYPE; msg_var VARCHAR2(32767) DEFAULT ''; --(length range:1-32767)BEGIN SELECT sal INTO in_var FROM emp WHERE empno=&out_var; msg_var:= CASE WHEN in_var<=2000 THEN 'in_var<=2000.' WHEN in_var>2000 AND in_var<=5000 THEN '2000<in_var<=5000.' ELSE 'in_var>5000.' END; dbms_output.put_line('msg_var:'||msg_var);END;
</span>
selector语句可以省略,如下:
<span style="font-size:14px;">
DECLARE v_var VARCHAR2(10); v_deptno emp.deptno%TYPE;BEGIN SELECT deptno INTO v_deptno FROM emp WHERE sal=(SELECT MAX(sal)FROM emp); v_var:= CASE v_deptno WHEN 10 THEN '部门一' WHEN 20 THEN '部门二' ELSE '部门三' END; dbms_output.put_line(v_var);END;</span>
2.循环语句
<1>basic loop(无条件循环,循环体至少执行一次,须有exit语句)
语法如下:
LOOP
statement1;
...
EXIT [WHEN condition];
END LOOP;
<pre name="code" class="sql">/* 使用循环插入多条数据 */<span style="font-size:14px;">
DECLARE v_count NUMBER(2):=1; v_total NUMBER(2):=5; v_empno emp_v1.empno%TYPE; v_ename emp_v1.ename%TYPE:='zl'; v_job emp_v1.job%TYPE:='nurse';BEGIN SELECT MAX(empno)INTO v_empno FROM emp_v1; IF v_empno IS NULL THEN v_empno:=0; END IF; dbms_output.put_line('last v_empno:'||v_empno); LOOP INSERT INTO emp_v1(empno,ename,job) VALUES(v_empno+v_count,v_ename || v_count,v_job); v_count:=v_count+1; EXIT WHEN v_count>v_total; END loop;END;
</span>
<2>For Loop
<span style="font-size:14px;">
DECLARE v_empno emp_v1.empno%TYPE; v_ename emp_v1.ename%TYPE:='zw'; v_job emp_v1.job%TYPE:='doctor'; BEGIN DELETE FROM emp_v1; SELECT MAX(empno) INTO v_empno FROM emp_v1; FOR counter IN 1..5 LOOP INSERT INTO emp_v1(empno,ename,job) VALUES(NVL(v_empno,0)+counter,v_ename||counter,v_job); END LOOP;END;
</span>
此处需要注意,在for-loop循环中,计数器counter不需要我们声明,循环的下界不能大于上界,否则,sql语句不会报错,但是也不会执行。
<3>while loop
<span style="font-size:14px;">
DECLARE v_count NUMBER(2):=1; v_empno emp_v1.empno%TYPE; v_ename emp_v1.ename%TYPE:='hjt'; v_job emp_v1.job%TYPE:='officer'; BEGIN SELECT MAX(empno) INTO v_empno FROM emp_v1; WHILE v_count<=3 LOOP INSERT INTO emp_v1(empno,ename,job) VALUES(NVL(v_empno,0)+v_count,v_ename||v_count,v_job); v_count:=v_count+1; END LOOP;END;
</span>
<span style="font-size:14px;">
BEGIN dbms_output.put_line('this is a map!'); dbms_output.put_line('wecome to china!'); GOTO pointer_one; dbms_output.put_line('hello ,everyone!'); <<pointer_one>> dbms_output.put_line('excuse me!');END;
</span>注,goto语句不能跳转到嵌套块内部的标签,也不能从if子句外面跳转到if子句内部,也不能从一个if子句中跳转到另一个if子句中,也不能从异常处理部分跳转到代码其他部分。
0 0
- 控制结构
- 控制结构
- 控制结构
- 控制结构
- 控制结构
- 控制结构
- Shell控制结构--流控制
- Shell控制结构--循环控制
- C++控制结构-控制结构跳转语句
- 控制结构及数组
- c++控制结构
- Tcl 控制结构
- 自适应滑模变结构控制
- 控制流结构
- PLSQL 控制结构
- oracle控制结构
- 生命期控制结构
- 请求处理控制结构
- 禁用BEEP的方法
- mpg123播放歌曲自动快进的解决方法
- BZOJ 2730 矿场搭建 Tarjan求割点
- 用c语言实现的扫雷游戏
- Android高级控件(四)——VideoView 实现引导页播放视频欢迎效果,超级简单却十分的炫酷
- 控制结构
- Twins
- 电源设计调试过程中的异常现象介绍
- eclipse
- ANSI C (3) —— 常用系统函数
- 用c语言实现三子棋的游戏
- bash基础知识
- 51nod 1640 天气晴朗的魔法 By Assassin
- Word Capitalization