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

简介: pl/sql进阶:控制结构   在任何计算机语言(C, JAVA, PASCAL )都有各种控制语句(条件语句,循环语句,顺序控制结构…)在 pl/sql 中也存在这样的控制结构。 1)if 语句 2)循环语句 3)控制语句—goto 和 null   >>条件分支语句 pl/sql中提供了三种条件分支语句 if -- then, if--then--else,

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;

目录
相关文章
|
23天前
|
SQL 数据采集 监控
局域网监控电脑屏幕软件:PL/SQL 实现的数据库关联监控
在当今网络环境中,基于PL/SQL的局域网监控系统对于企业和机构的信息安全至关重要。该系统包括屏幕数据采集、数据处理与分析、数据库关联与存储三个核心模块,能够提供全面而准确的监控信息,帮助管理者有效监督局域网内的电脑使用情况。
17 2
|
5月前
|
SQL PHP
thinkphp之进阶sql语法,持续更新
thinkphp之进阶sql语法,持续更新
32 0
|
3月前
|
SQL Oracle 关系型数据库
SQL与PL/SQL:数据库编程语言的比较
【8月更文挑战第31天】
69 0
|
3月前
|
SQL 安全 Java
访问者模式问题之在上面的 SQL 结构定义中, sealed 接口的作用如何理解
访问者模式问题之在上面的 SQL 结构定义中, sealed 接口的作用如何理解
|
4月前
|
SQL 关系型数据库 数据处理
SQL结构
【7月更文挑战第28天】SQL结构
23 4
|
4月前
|
SQL 安全 Go
SQL注入不可怕,XSS也不难防!Python Web安全进阶教程,让你安心做开发!
【7月更文挑战第26天】在 Web 开发中, SQL 注入与 XSS 攻击常令人担忧, 但掌握正确防御策略可化解风险. 对抗 SQL 注入的核心是避免直接拼接用户输入至 SQL 语句. 使用 Python 的参数化查询 (如 sqlite3 库) 和 ORM 框架 (如 Django, SQLAlchemy) 可有效防范. 防范 XSS 攻击需严格过滤及转义用户输入. 利用 Django 模板引擎自动转义功能, 或手动转义及设置内容安全策略 (CSP) 来增强防护. 掌握这些技巧, 让你在 Python Web 开发中更加安心. 安全是个持续学习的过程, 不断提升才能有效保护应用.
55 1
|
5月前
|
SQL 关系型数据库 MySQL
mysqldiff - Golang 针对 MySQL 数据库表结构的差异 SQL 工具
Golang 针对 MySQL 数据库表结构的差异 SQL 工具。https://github.com/camry/mysqldiff
93 7
|
5月前
|
SQL 存储 关系型数据库
MySQL数据库进阶第二篇(索引,SQL性能分析,使用规则)
MySQL数据库进阶第二篇(索引,SQL性能分析,使用规则)
|
5月前
|
SQL 存储 安全
SQL入门与进阶:数据库查询与管理的实用指南
一、引言 在数字化时代,数据库已经成为各行各业存储、管理和分析数据的关键基础设施
|
5月前
|
SQL 数据库 Perl
PL/SQL中执行按钮变为灰色后如何恢复【已解决】
PL/SQL中执行按钮变为灰色后如何恢复【已解决】
512 0