百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 优雅编程 > 正文

oracle pl分支,循环,控制(oracle循环执行过程)

sinye56 2024-10-11 17:55 10 浏览 0 评论

一、pl/sql的进阶--控制结构

在任何计算机语言(c,java,pascal)都有各种控制语句(条件语句,循环结构,顺序控制结构...),在pl/sql中也存在这样的控制结构。

在本部分学习完成后,希望大家达到:

1.使用各种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就把补助设为200;

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;
/
--调用存储过程
exec SP_PRO6(7499);

三、循环语句–loop

是pl/sql中最简单的循环语句,这种循环语句以loop开头,以end loop结尾,这种循环至少会被执行一次。

案例:现有一张表users,表结构如下:

用户vid | 用户名 uname

CREATE TABLE USERS(
vid NUMBER(5),
uname VARCHAR2(30)
);

请编写一个过程,可以输入用户名,并循环添加10个用户到users表中,用户编号从1开始增加。

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;

我们可以看到控制变量i,在隐含中就在不停地增加。

六、顺序控制语句–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;
 <<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;
/

RNG输了,致敬RNG~

相关推荐

Linux基础知识之修改root用户密码

现象:Linux修改密码出现:Authenticationtokenmanipulationerror。故障解决办法:进入单用户,执行pwconv,再执行passwdroot。...

Linux如何修改远程访问端口

对于Linux服务器而言,其默认的远程访问端口为22。但是,出于安全方面的考虑,一般都会修改该端口。下面我来简答介绍一下如何修改Linux服务器默认的远程访问端口。对于默认端口而言,其相关的配置位于/...

如何批量更改文件的权限

如果你发觉一个目录结构下的大量文件权限(读、写、可执行)很乱时,可以执行以下两个命令批量修正:批量修改文件夹的权限chmod755-Rdir_name批量修改文件的权限finddir_nam...

CentOS「linux」学习笔记10:修改文件和目录权限

?linux基础操作:主要介绍了修改文件和目录的权限及chown和chgrp高级用法6.chmod修改权限1:字母方式[修改文件或目录的权限]u代表所属者,g代表所属组,o代表其他组的用户,a代表所有...

Linux下更改串口的权限

问题描述我在Ubuntu中使用ArduinoIDE,并且遇到串口问题。它过去一直有效,但由于可能不必要的原因,我觉得有必要将一些文件的所有权从root所有权更改为我的用户所有权。...

Linux chown命令:修改文件和目录的所有者和所属组

chown命令,可以认为是"changeowner"的缩写,主要用于修改文件(或目录)的所有者,除此之外,这个命令也可以修改文件(或目录)的所属组。当只需要修改所有者时,可使用...

chmod修改文件夹及子目录权限的方法

chmod修改文件夹及子目录权限的方法打开终端进入你需要修改的目录然后执行下面这条命令chmod777*-R全部子目录及文件权限改为777查看linux文件的权限:ls-l文件名称查看li...

Android 修改隐藏设置项权限

在Android系统中,修改某些隐藏设置项或权限通常涉及到系统级别的操作,尤其是针对非标准的、未在常规用户界面显示的高级选项。这些隐藏设置往往与隐私保护、安全相关的特殊功能有关,或者涉及开发者选项、权...

完蛋了!我不小心把Linux所有的文件权限修改了!在线等修复!

最近一个客户在群里说他一不小心把某台业务服务器的根目录权限给改了,本来想修改当前目录,结果执行成了根目录。...

linux改变安全性设置-改变所属关系

CentOS7.3学习笔记总结(五十八)-改变安全性设置-改变所属关系在以前的文章里,我介绍过linux文件权限,感兴趣的朋友可以关注我,阅读一下这篇文章。这里我们不在做过的介绍,注重介绍改变文件或者...

Python基础到实战一飞冲天(一)--linux基础(七)修改权限chmod

#07_Python基础到实战一飞冲天(一)--linux基础(七)--修改权限chmod-root-groupadd-groupdel-chgrp-username-passwd...

linux更改用户权限为root权限方法大全

背景在使用linux系统时,经常会遇到需要修改用户权限为root权限。通过修改用户所属群组groupid为root,此操作只能使普通用户实现享有部分root权限,普通用户仍不能像root用户一样享有超...

怎么用ip命令在linux中添加路由表项?

在Linux中添加路由表项,可以使用ip命令的route子命令。添加路由表项的基本语法如下:sudoiprouteadd<network>via<gateway>这...

Linux配置网络

1、网卡名配置相关文件回到顶部网卡名命名规则文件:/etc/udev/rules.d/70-persistent-net.rules#PCIdevice0x8086:0x100f(e1000)...

Linux系列---网络配置文件

1.网卡配置文件在/etc/sysconfig/network-scripts/下:[root@oldboynetwork-scripts]#ls/etc/sysconfig/network-s...

取消回复欢迎 发表评论: