Oracle存储过程进阶

简介: Oracle存储过程进阶

介绍


    在任何计算机语言(c,java,pascal)都有各种控制语句(条件语句,循环结构,顺序控制结构...)在pl/sql中也存在这样的控制结构。 
1.使用各种if语句 
2.使用循环语句 
3.使用控制语句——goto和null; 


1.条件分支语句


   pl/sql中提供了三种条件分支语句if—then,if–then–else,if–then–elsif– then 
1.1 、简单的条件判断 if – then
    问题:编写一个过程,可以输入一个雇员名,如果该雇员的工资低于2000,就给该员工工资增加10%。
SQL>create or replace procedure sp_pro2(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;   
/  
1.2、二重条件分支 if–then–else
    问题:编写一个过程,可以输入一个雇员名,如果该雇员的补助不是0就在原来的基础上增加100;如果补助为0就把补助设为200; 
SQL>create or replace procedure sp_pro4(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 sal=sal+100 where ename=spName;
else
update emp set sal=sal+200 where ename=spName;
end if;   
end;   
/  
1.3、多重条件分支 if–then–elsif–then
    问题:编写一个过程,可以输入一个雇员编号,如果该雇员的职位是PRESIDENT就给他的工资增加1000,如果该雇员的职位是MANAGER就给他的工资增加500,其它职位的雇员工资增加200。 
SQL>create or replace procedure sp_pro5(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;   
/  


2、循环语句


2.1、循环语句 loop
    是pl/sql中最简单的循环语句,这种循环语句以loop开头,以end loop结尾,这种循环至少会被执行一次。 
案例:现有一张表users,表结构如下: 
用户id | 用户名 
    请编写一个过程,可以输入用户名,并循环添加10个用户到users表中,用户编号从1开始增加。 
SQL>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;   
/  
2.2、 循环语句 –while循环
    基本循环至少要执行循环体一次,而对于while循环来说,只有条件为true时,才会执行循环体语句,while循环以while...loop开始,以end loop结束。 
    问题:请编写一个过程,可以输入用户名,并循环添加10个用户到users表中,用户编号从11开始增加。 
SQL>create or replace procedure sp_pro(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;   
/  
2.3、循环语句 –for循环
SQL>begin  
for i in reverse 1..10 loop   
insert into users values (i, 'shunping');   
end loop;   
end;  
2.4、   顺序控制语句 –goto
goto语句用于跳转到特定符号去执行语句。注意由于使用goto语句会增加程序的复杂性,并使得应用程序可读性变差,所以在做一般应用开发时,建议大家不要使用goto语句。 
基本语法如下 goto lable,其中lable是已经定义好的标号名
SQL>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.5、 顺序控制语句–null
null语句不会执行任何操作,并且会直接将控制传递到下一条语句。使用null语句的主要好处是可以提高pl/sql的可读性。 
SQL>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;  


目录
相关文章
|
8月前
|
存储 SQL 关系型数据库
MySQL 进阶使用【函数、索引、视图、存储过程、存储函数、触发器】(2)
MySQL 进阶使用【函数、索引、视图、存储过程、存储函数、触发器】
|
8月前
|
存储 SQL 关系型数据库
MySQL 进阶使用【函数、索引、视图、存储过程、存储函数、触发器】(1)
MySQL 进阶使用【函数、索引、视图、存储过程、存储函数、触发器】
|
3月前
|
存储 Oracle 关系型数据库
oracle服务器存储过程中调用http
通过配置权限、创建和调用存储过程,您可以在Oracle数据库中使用UTL_HTTP包发起HTTP请求。这使得Oracle存储过程可以与外部HTTP服务进行交互,从而实现更复杂的数据处理和集成。在实际应用中,根据具体需求调整请求类型和错误处理逻辑,以确保系统的稳定性和可靠性。
131 0
|
9月前
|
SQL 存储 Oracle
一篇文章带你学会 Oracle 存储过程的基本介绍和高阶用法(上)
一篇文章带你学会 Oracle 存储过程的基本介绍和高阶用法
|
8月前
|
存储 SQL 关系型数据库
MySQL数据库进阶第四篇(视图/存储过程/触发器)
MySQL数据库进阶第四篇(视图/存储过程/触发器)
|
8月前
|
存储 SQL 关系型数据库
MySQL 进阶使用【函数、索引、视图、存储过程、存储函数、触发器】(3)
MySQL 进阶使用【函数、索引、视图、存储过程、存储函数、触发器】
|
9月前
|
存储 SQL 关系型数据库
【MySQL进阶之路 | 基础篇】存储过程
【MySQL进阶之路 | 基础篇】存储过程
|
8月前
|
存储 关系型数据库 MySQL
MySQL 进阶使用【函数、索引、视图、存储过程、存储函数、触发器】(4)
MySQL 进阶使用【函数、索引、视图、存储过程、存储函数、触发器】
|
8月前
|
存储 SQL Oracle
oracle 存储过程导出sql语句 导出为文件
oracle 存储过程导出sql语句 导出为文件
196 0
|
9月前
|
SQL 存储 Oracle
一篇文章带你学会 Oracle 存储过程的基本介绍和高阶用法(下)
一篇文章带你学会 Oracle 存储过程的基本介绍和高阶用法

推荐镜像

更多