.使用各种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 < 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 <> THEN
UPDATE EMP SET COMM = COMM + WHERE ENAME = SPNAME;
ELSE
UPDATE EMP SET COMM = COMM + 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 + WHERE EMPNO = SPNO;
ELSIF V_JOB = 'MANAGER' THEN
UPDATE EMP SET SAL = SAL + WHERE EMPNO = SPNO;
ELSE
UPDATE EMP SET SAL = SAL + 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 := ;
BEGIN
LOOP
INSERT INTO USERS VALUES (V_NUM, SPNAME);
--判断是否要退出循环
EXIT WHEN V_NUM = ;
--自增
V_NUM := V_NUM + ;
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 := ;
BEGIN
WHILE V_NUM <= LOOP
--执行
INSERT INTO USERS VALUES (V_NUM, SPNAME);
V_NUM := V_NUM + ;
END LOOP;
COMMIT;
END;
/ --调用存储过程
EXEC SP_PRO6('ALLEN');

五、循环语句–for循环
基本for循环的基本结构如下

CREATE OR REPLACE PROCEDURE SP_PRO6 IS--注意如果无参记得不要加()
BEGIN
FOR I IN REVERSE .. 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 := ;
BEGIN
LOOP
DBMS_OUTPUT.PUT_LINE('输出i=' || I);
IF I = THEN
GOTO END_LOOP;
END IF;
I := I + ;
END LOOP;
<<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 < THEN
UPDATE EMP SET COMM = SAL * 0.1 WHERE ENAME = V_ENAME;
dbms_output.put_line('');
ELSE
NULL;
dbms_output.put_line('');--不会被执行
END IF;
END;

十三oracle --控制结构(分支,循环,控制)的更多相关文章

  1. 第三次实验计算分段函数 第四次计算分段函数和循环NEW 第五次分支+循环加强版 实验报告

    一.实验题目,设计思路,实现方法 第四次分支+循环 加强版 (2-2计算个人所得税,2-7 装睡,2-8计算天数) 设计思路:2-2 用if-else的语句,与计算分段函数的题类似的做法:2-7 运用 ...

  2. PHP语法(三):控制结构(For循环/If/Switch/While)

    相关链接: PHP语法(一):基础和变量 PHP语法(二):数据类型.运算符和函数 PHP语法(三):控制结构(For循环/If/Switch/While) 本文我来总结几个PHP常用的控制结构,先来 ...

  3. ORACLE 移动数据文件 控制文件 重做日志文件

    ORACLE数据库有时候需要对存储进行调整,增加分区.IO调优等等,此时需要移动数据文件.重做日志文件.控制文件等等,下文结合例子总结一下这方面的知识点. 进行数据文件.重做日志文件.控制文件的迁移前 ...

  4. Linux Shell系列教程之(十三)Shell分支语句case … esac教程

    本文是Linux Shell系列教程的第(十三)篇,更多Linux Shell教程请看:Linux Shell系列教程 分支语句非常实用,基本上高级语言都支持分支语句(python 没有),大多数都使 ...

  5. python_分支循环

    什么是分支+循环? --不同条件进行不同逻辑处理            -- 分支 --满足条件进行反复相同逻辑处理     -- 循环 分支的形式? -- if 条件:  执行体   else: 执 ...

  6. 【RMAN】Oracle中如何备份控制文件?备份控制文件的方式有哪几种?

    真题1. 如何备份控制文件?备份控制文件的方式有哪几种? 答案:备份控制文件的方式有多种. ① 备份控制文件可以在线进行: SQL> ALTER DATABASE BACKUP CONTROLF ...

  7. 第十九节:Java基本数据类型,循环结构与分支循环

    基本数据类型 Java中的基本数据类型,有8种,在Java中有四种类型,8种基本数据类型. 字节 boolean 布尔型为1/8 byte 字节类型为1 short 短整型为2 char 字符型为2 ...

  8. 数据类型&分支流程控制(2)

    1.数据类型 1.数据类型 局部变量:书写在方法中的变量: 全局变量:书写在类中,与方法平级的变量: -如果没有给变量赋初值 -全局变量会默认拥有一个初始值 -局部变量将没有初始值,这个时候不能使用这 ...

  9. oracle中使用函数控制过程是否执行(结合job使用)

    oracle中使用函数控制过程是否执行(结合job使用时候,循环时间不好写的时候,可以此种方法比较方便) CREATE OR REPLACE FUNCTION wsbs_pk_date_validat ...

随机推荐

  1. 多线程中join方法的含义

    1.作用:调用这个方法的时候,主进程会在这里停住,等待该线程进行完毕再继续往下执行. 如:不使用join的情况: <?php class Join extends Thread { public ...

  2. lnmp集成环境tp nginx vhost配置

    server { listen 80; server_name xxx; charset utf-8; root /home/wwwroot/axxx/public; index index.html ...

  3. python使用snappy压缩

    今天在网上找了很久,终于找到1个snappy压缩命令行,记录下来: 1.wget https://bootstrap.pypa.io/get-pip.py 2.python ./get-pip.py ...

  4. GIT每次都要输入用户名和密码的解决方案

    三.配置客户端长期存储用户各和密码 长期存储密码: git config --global credential.helper store 缓存用户信息 3600s zb@zb-computer:/h ...

  5. 安装配置hexo icarus主题配置

    安装部分配置hexo icarus主题配置 安装icarus 直接下载主题模块放到blog项目 ,blog项目根目录执行 git clone https://github.com/ppoffice/h ...

  6. NOIP模拟赛17

    5分.... T1 LOJ 计算几何瞎暴力 维护以下操作: 1.序列末尾加一个数 2.序列全体从小到大排序 3.查询区间和 4.序列全体异或一个数k 序列全体异或一个数,很明显是trie树 那么序列全 ...

  7. [hadoop]hadoop学习路线

    1.主要学习hadoop中的四大框架:hdfs.mapreduce.hive.hbase.这四大框架是hadoop最最核心的,学习难度最大的,也是应用最广泛的. 2.熟悉了解hadoop基本知识及其所 ...

  8. 【洛谷 P2120】 [ZJOI2007]仓库建设(斜率优化)

    题目链接 斜率优化+1,好吧不水分了. 玩具装箱那题以后再做,当作复习吧. \(f[i]=f[j]-(sum[i]-sum[j])*dis[i]+p[i]\) \(f[j]=-dis[i]*sum[j ...

  9. Verilog笔记.6.FIFO

    FIFO,First In First Out ,是一种先进先出的数据缓存器. 没有外部读写地址线,只能顺序写入数据,顺序的读出数据, 其数据地址由内部读写指针自动加1完成. 不能像普通存储器那样可以 ...

  10. IIS7.5 配置应用程序初始化功能

    IIS进程回收后,第一次访问会超级慢,这对于用户是不能接受的,怎么解决这个问题? 我们不能设置IIS不回收进程,因为这样可能会导致IIS内存泄漏.有效的方法时,尽量在业务空闲时间回收进程,回收后立刻预 ...