博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
十三oracle --控制结构(分支,循环,控制)
阅读量:6812 次
发布时间:2019-06-26

本文共 3361 字,大约阅读时间需要 11 分钟。

.使用各种if语句

2.使用循环语句
3.使用控制语句——goto和null(goto语句不推荐使用);

  

二、条件分支语句

pl/sql中提供了三种条件分支语句if—then,if–then–else,if–then–else if–then。
这里我们可以和java语句进行一个比较。

1)、简单的条件判断if–then

问题:编写一个过程,可以输入一个雇员名,如果该雇员的工资低于2000,就给该员工工资增加10%。

 

 

SET serveroutput ON;CREATE OR REPLACE PROCEDURE SP_PRO6(SPNAME VARCHAR2) IS  --定义  V_SAL EMP.SAL%TYPE;BEGIN  --执行  SELECT SAL INTO V_SAL FROM EMP WHERE ENAME = SPNAME;  --判断  IF V_SAL < 2000 THEN    UPDATE EMP SET SAL = SAL + SAL * 0.1 WHERE ENAME = SPNAME;    COMMIT;  END IF;END;/--调用存储过程exec SP_PRO6('ALLEN');

 

2)、二重条件分支 if–then–else

问题:编写一个过程,可以输入一个雇员名,如果该雇员的补助不是0就在原来的基础上增加100;如果补助为0就把补助设为2

CREATE OR REPLACE PROCEDURE SP_PRO6(SPNAME VARCHAR2) IS  --定义  V_COMM EMP.COMM%TYPE;BEGIN  --执行  SELECT COMM INTO V_COMM FROM EMP WHERE ENAME = SPNAME;  --判断  IF V_COMM <> 0 THEN    UPDATE EMP SET COMM = COMM + 100 WHERE ENAME = SPNAME;  ELSE    UPDATE EMP SET COMM = COMM + 200 WHERE ENAME = SPNAME;  END IF;  COMMIT;END;/--调用存储过程exec SP_PRO6('ALLEN');

3)、多重条件分支 if–then–ELSIF–then

问题:编写一个过程,可以输入一个雇员编号,如果该雇员的职位是PRESIDENT就给他的工资增加1000,如果该雇员的职位是MANAGER 就给他的工资增加500,其它职位的雇员工资增加200。

CREATE OR REPLACE PROCEDURE SP_PRO6(SPNO NUMBER) IS  --定义  V_JOB EMP.JOB%TYPE;BEGIN  --执行  SELECT JOB INTO V_JOB FROM EMP WHERE EMPNO = SPNO;  IF V_JOB = 'PRESIDENT' THEN    UPDATE EMP SET SAL = SAL + 1000 WHERE EMPNO = SPNO;  ELSIF V_JOB = 'MANAGER' THEN    UPDATE EMP SET SAL = SAL + 500 WHERE EMPNO = SPNO;  ELSE    UPDATE EMP SET SAL = SAL + 200 WHERE EMPNO = SPNO;  END IF;  COMMIT;END;

三、循环语句–loop

是pl/sql中最简单的循环语句,这种循环语句以loop开头,以end loop结尾,这种循环至少会被执行一次。
案例:现有一张表users,表结构如下:
用户vid | 用户名 uname

CREATE OR REPLACE PROCEDURE SP_PRO6(SPNAME VARCHAR2) IS  --定义 :=表示赋值  V_NUM NUMBER := 1;BEGIN  LOOP    INSERT INTO USERS VALUES (V_NUM, SPNAME);    --判断是否要退出循环    EXIT WHEN V_NUM = 10;    --自增    V_NUM := V_NUM + 1;  END LOOP;  COMMIT;END;/--调用存储过程EXEC SP_PRO6('ALLEN');

四、循环语句–while循环

基本循环至少要执行循环体一次,而对于while循环来说,只有条件为true时,才会执行循环体语句,while循环以while...loop开始,以end loop 结束。
案例:现有一张表users,表结构如下:
用户vid | 用户名 uname
问题:请编写一个过程,可以输入用户名,并循环添加10个用户到users表中,用户编号从11开始增加。

 

CREATE OR REPLACE PROCEDURE SP_PRO6(SPNAME VARCHAR2) IS  --定义 :=表示赋值  V_NUM NUMBER := 11;BEGIN  WHILE V_NUM <= 20 LOOP    --执行    INSERT INTO USERS VALUES (V_NUM, SPNAME);    V_NUM := V_NUM + 1;  END LOOP;  COMMIT;END;/--调用存储过程EXEC SP_PRO6('ALLEN');

五、循环语句–for循环

基本for循环的基本结构如下

CREATE OR REPLACE PROCEDURE SP_PRO6 IS--注意如果无参记得不要加()BEGIN  FOR I IN REVERSE 1 .. 10 LOOP --REVERSE反转函数,表示I从10到1递减,去掉REVERSE表示I从1到10递增    INSERT INTO USERS VALUES (I, 'shunping');  END LOOP;END;/--调用存储过程EXEC SP_PRO6;

六、顺序控制语句–goto、null

1)、goto语句
goto语句用于跳转到特定符号去执行语句。注意由于使用goto语句会增加程序的复杂性,并使得应用程序可读性变差,所以在做一般应用开发时,建议大家不要使用goto语句。
基本语法如下goto lable,其中lable是已经定义好的标号名

set serveroutput on;DECLARE  I INT := 1;BEGIN  LOOP    DBMS_OUTPUT.PUT_LINE('输出i=' || I);    IF I = 1 THEN      GOTO END_LOOP;    END IF;    I := I + 1;  END LOOP;  <
> DBMS_OUTPUT.PUT_LINE('循环结束');END;

2)、null语句

null语句不会执行任何操作,并且会直接将控制传递到下一条语句。使用null语句的主要好处是可以提高pl/sql的可读性

SET serveroutput ON;DECLARE  V_SAL   EMP.SAL%TYPE;  V_ENAME EMP.ENAME%TYPE;BEGIN  SELECT ENAME, SAL INTO V_ENAME, V_SAL FROM EMP WHERE EMPNO = &NO;  IF V_SAL < 3000 THEN    UPDATE EMP SET COMM = SAL * 0.1 WHERE ENAME = V_ENAME;    dbms_output.put_line('1111');  ELSE    NULL;    dbms_output.put_line('2222');--不会被执行  END IF;END;

 

转载于:https://www.cnblogs.com/wuxl360/p/5431164.html

你可能感兴趣的文章
Vmware虚拟机全屏
查看>>
三目运算符?:结合性
查看>>
Red Hat Linux 启动流程图
查看>>
mysql group by 分组查询
查看>>
Exadata:Smart Scan(二) FAST FULL SCAN
查看>>
mac下安装wxPython2.8.12.1方法
查看>>
关于TP模板的目录设置和渲染问题
查看>>
linux系统编程之进程(二):进程生命周期与PCB(进程控制块)
查看>>
[233]树莓派裸机代码bootloader学习总结
查看>>
iOS 相册图片选择器
查看>>
协助数据库完成大数据实时查询
查看>>
kickstart无人值守自动安装操作系统
查看>>
Linux 简单的双线设置
查看>>
Step5:Clone EBS Using Rman
查看>>
IOS atomic与nonatomic,assign,copy与retain的定义和区别
查看>>
Clob,Blob,InputStream,byte 互转
查看>>
正则性能调优
查看>>
jdk 动态代理基本例子
查看>>
刚接触这个比较迷茫
查看>>
shellshock漏洞回顾
查看>>