pl/sql的控制结构,分支、循环、控制

一、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;
/

时间: 2024-08-05 06:39:09

pl/sql的控制结构,分支、循环、控制的相关文章

二十五、oracle pl/sql进阶--控制结构(分支,循环,控制)

一.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).

PL/SQL程序控制结构及在PL/SQL中更改数据和管理事务

1.条件控制 A. IF条件分支语法: if (条件1) then 语句; elsif (条件2) then 语句; elsif (条件3) then 语句; else 语句; end if; B . case条件分支:等值比较.条件比较.case表达式 a.等值比较语法: CASE  条件判断 WHEN      条件值的表达式    THEN       要执行的条件操作     ; ……. [ELSE   ……..] END   CASE; b. 条件比较语法: CASE WHEN   不

(五)PL/SQL运算符及优先级 | 条件控制 | 循环控制

一.运算符 PL/SQL语言有丰富的内置运算符,运算符提供的以下几种类型:  .算术运算符  .关系运算符  .比较运算符  .逻辑运算符  .字符串运算符 二.运算符优先级 算数运算符 运算符 操作符 ** 指数运算 +, - 加法,取反 *, / 乘法,除法 +, -, || 加,减,并置    关系运算符    比较运算符 =, <, >, <=, >=, <>, !=, ~=, ^=,  IS NULL, LIKE, BETWEEN, IN 比较    逻辑运算

Oracle笔记 八、PL/SQL跳转/判断/循环语句块

--goto跳转语句 --在goto 后,跳转到相应的语句,然后执行该语句和后面所有语句 begin dbms_output.put_line('goto开始了'); goto c; --不被执行 dbms_output.put_line('goto'); dbms_output.put_line('goto'); dbms_output.put_line('goto'); dbms_output.put_line('goto'); <<a>> dbms_output.put_li

Oracle数据库之SQL基础和分支循环

一.SQL基础语言 DECLARE --声明 a varchar2(10); --变量或对象 BEGIN a:='小明';-- := 表示给一个变量赋值 dbms_output.put_line(a); --输出用 dbms_output.put_line() END; 二.分支 DECLARE --声明 A NUMBER(10); B NUMBER(10); BEGIN A := 2; B := 3; IF A < B THEN DBMS_OUTPUT.PUT_LINE('a小于b'); EL

(韩顺平讲解)pl/sql编程(二)

一.pl/sql进阶-控制结构 pl/sql中提供了三种条件分支语句 if -- then, if --then---else, if---then---elsif---else (1)简单的条件判断 if – then 问题:编写一个过程,可以输入一个雇员名,如果该雇员的工资低于2000,就给该员工工资增加10%. Sql代码 1. create or replace procedure sp_pro6(spName varchar2) is 2. --定义 3. v_sal emp.sal%

数据库复习10——PL/SQL

数据库复习 CH10 PL/SQL 10.1 PL/SQL简介 PL/SQL是Oracle对SQL的过程化的扩展,PL/SQL可以实现SQL相关的过程化程序,并且能够以存储过程和函数的方式让一段SQL业务逻辑驻留在SQL服务器中,以便减少客户机计算任务并减少网络I/O 10.2 PL/SQL编程基础 (1)简介 PL/SQL编程框架为: DECLARE <Variable List> BEGIN <Extented SQL Execution> EXCEPTION <Exce

4. Oracle PL/SQL语言及编程

PL/SQl基本结构 PL/SQL数据类型 数字类型:NUMBER(P,S).PLS_INTEGER.BINARY_INTEGER 字符类型:CHAR.NCHAR.VARCHAR2.NVARCHAR2.LONG 日期类型:DATE 布尔类型:BOOLEAN 定义数据类型:type type <数据类型名> is <数据类型>; 数据类型:Oracle允许定义RECODE.TABLE PL/SQL常量和变量 <常量名> constant <常量类型> := &

Oracle PL/SQL语言入门

简介:PL/SQL(Procedural Language/Structured Query Language)是一种过程化语言,属于第三代语言,它与C.C++.Java等语言一样关注于处理细节,可以用来实现比较复杂的业务逻辑.它允许SQL的数据操纵语言和查询语句包含在块结构(block_structured)和代码过程语言中,使PL/SQL成为一个功能强大的事务处理语言. 一.背景介绍 结构化查询语言(Structured Query Language,简称SQL)是用来访问关系型数据库一种通