pl/sql进阶---控制结构

pl/sql进阶:控制结构

 

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

1)if 语句

2)循环语句

3)控制语句—goto 和 null

 

>>条件分支语句

pl/sql中提供了三种条件分支语句 if -- then, if--then--else, if--then--elsif--else.

A>简单的条件判断  if -- then

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

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*1.1 where ename=spName;

end if;

end;

SQL>exec sp_pro6('SCOTT');

SQL>exec sp_pro6('FORD');

 

>>二重条件分支  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=200 where ename=spName;

end if;

end;

SQL>exec sp_pro6('SCOTT');

SQL>exec sp_pro6('FORD');

 

>>多重条件分支  if ---then ---elsif ---else

?编写一个过程,可以输入一个雇员编号,如果该雇员的职位是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;

end;

 

>>循环语句 ---loop

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

案例:有一张 users 表,字段为 用户ID和用户名,请编写一个过程,可输入用户名,并循环添加10个用户到 users 表中,用户编写从1开始增加。

SQL>create tabl users(userNo number, userName varchar2(40);

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;

end;

SQL>exec sp_pro6('你好');

 

>>循环语句 ---while循环

基本循环至少要执行循环体一次,而对于 while 循环来说,只有条件为 true时,才会执行循环体语句, while 循环以 while..loop 开始,以 end loop 结束。

案例:现有一张表,表结构为 用户ID和用户名。

编写一个过程,可以输入用户名,并循环添加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;

end;

 

>>循环语句---for 循环

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

begin

for i in reverse 1..10 loop

insert into users values(i,'tao');

end loop;

end;

/

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

 

>>顺序控制语句---goto, null

①goto 语句

goto语句用于跳转到特定标号去执行语句(汇编里用得较多)。注意由于使用goto语句会增加程序的复杂性,并使得应用程序的可读性变差,所以在做一般应用开发时,建议不使用goto语句。

基本语法如下 goto label,其中 label 是已经定义好的标号名。

    declare

i int :=1;

begin

loop 

dbms_output.put_line('输出i='||i);

if i=10 then

goto end_loop;

end if;

i:=i+1;

end loop;

<<end_loop>>

dbms_output.put_line('循环结束');

end;

/

②null

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

里面的 else null可以不要!为了增加可读性!

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;

else

null;

end if;

end;

时间: 2024-12-27 03:31:53

pl/sql进阶---控制结构的相关文章

pl/sql进阶---例外处理

PL/SQL进阶----例外处理 ORACLE将例外分为预定义例外,非预定义例外和自定义例外三种. 预定义例外用于处理常见的ORACLE错误 非预定义例外用于处理预定义例外不能处理的例外 自定义例外用于处理与ORACLE错误无关的其他情况 A>例外传递 如果不处理例外会出现什么情况: 案例,编写一个过程,可接收雇员的编号,如果雇员的编号不存在 ---例外案例 declare --定义 v_name emp.ename%type; begin --执行 select ename into v_en

PL/SQL的进阶----编写分页过程

PL/SQL的进阶----编写分页过程 介绍 分页是任何一个网站(bbs,网上商城, blog)都会使用到的技术,因此学习 pl/sql 编程开发就一定要掌握该技术.   ①无返回值的存储过程 古人云:欲速则不达.首先是掌握最简单的存储过程,无返回值的存储过程: 案例:现在有一张表,字段有"书号,书名,出版社".请编写一个存储过程,可以向book表添加书,要求通过JAVA程序调用该过程. ----book表 SQL>create table book (boodId number

PL/SQL学习笔记(一)

笔记 一.PL/SQL中的数据类型,简列如下: Number[(m,n)]  唯一的数值类型.m-精度,n-小数位数.INTEGER.REAL是NUMBER的同义词定义的. VARCHAR2(maxsize[CHAR|BYTE])唯一的字符串类型.CHAR.VACHAR是VARCHAR2的同义词定义的.NVARCHAR2与VARCHAR2的表现形势一样,只是用于国际字符集数据类型. DATE 日期/时间类型. BOOLEAN布尔型.只有TRUE.FALSE两个值. 二.PL/SQL的执行体 DE

PL/SQL程序结构

什么是PL/SQL程序     前面第4章学习的标准化的SQL语言对数据库进行各种操作,每次只能执行一条语句,语句以英文的分号";"为结束标识,这样使用起来很不方便,同时效率较低,这是因为Oracle数据库系统不像VB.VC这样的程序设计语言,它侧重于后台数据库的管理,因此提供的编程能力较弱,而结构化编程语言对数据库的支持能力又较弱,如果一些稍微复杂点的管理任务都要借助编程语言来实现的话,这对管理员来讲是很大的负担.    正是在这种需求的驱使下,从Oracle 6开始,Oracle公

[转贴]Oracle PL/SQL语言基础

oracle|sql语言 [转贴]Oracle PL/SQL语言基础 Oracle PL/SQL语言基础   PL/SQL是ORACLE对标准数据库语言的扩展,ORACLE公司已经将PL/SQL整合到ORACLE 服务器和其他工具中了,近几年中更多的开发人员和DBA开始使用PL/SQL,本文将讲述PL/SQL基础语法,结构和组件.以及如何设计并执行一个PL/SQL程序.    PL/SQL的优点    从版本6开始PL/SQL就被可靠的整合到ORACLE中了,一旦掌握PL/SQL的优点以及其独有

Oracle PL/SQL语言基础

oracle|sql语言 Oracle PL/SQL语言基础  2002-8-23   Oracle PL/SQL语言基础 PL/SQL是ORACLE对标准数据库语言的扩展,ORACLE公司已经将PL/SQL整合到ORACLE 服务器和其他工具中了,近几年中更多的开发人员和DBA开始使用PL/SQL,本文将讲述PL/SQL基础语法,结构和组件.以及如何设计并执行一个PL/SQL程序. PL/SQL的优点 从版本6开始PL/SQL就被可靠的整合到ORACLE中了,一旦掌握PL/SQL的优点以及其独

从零开始学Oracle—PL/SQL(七)

PL/SQL简介 PL/SQL(Procedural Language Sql,过程语言|SQL)是结合了Oracle过程语言和结构化查询语言(SQL)的一种扩展语言. PL/SQL块是一段后台服务程序,它负责将数据从数据库中取出来,在PL/SQL块中进行处理,将处理的结果送到数据库. 优点: 1,支持SQL 2,支持面向对象编程(OOP) 3,更好的性能 4,可移置性 5,与SQL集成 --支持所有SQL数据类型和Null值 ,另%type %rowType属性类型更加强了这种集成 6,安全性

Oracle之PL/SQL学习笔记

自己在学习Oracle是做的笔记及实验代码记录,内容挺全的,也挺详细,发篇博文分享给需要的朋友,共有1w多字的学习笔记吧.是以前做的,一直在压箱底,今天拿出来整理了一下,给大家分享,有不足之处还望大家批评指正.   PL/SQL定义:PL/SQL是由Oracle开发,专门用于Oracle的程序设计语言. PL---Procedural Language. SQL-Structure QueryLanguage.PL/SQL包括过程化语句和SQL语句     PL/SQL的单位:块. 一个块中可以

Oracle PL/SQL入门慨述_oracle

正在看的ORACLE教程是:Oracle PL/SQL入门慨述.一.PL/SQL出现的目的 结构化查询语言(Structured Query Language,简称SQL)是用来访问关系型数据库一种通用语言,它属于第四代语言(4GL),其执行特点是非过程化,即不用指明执行的具体方法和途径,而是简单的调用相应语句来直接取得结果即可.显然,这种不关注任何实现细节的语言对于开发者来说有着极大的便利. 然而,对于有些复杂的业务流程又要求相应的程序来描述,那么4GL就有些无能为力了.PL/SQL的出现正是