Oracle数据库:PL/SQL中的存储过程与函数

本文介绍了Oracle数据库中PL/SQL的存储过程与函数,包括它们的概念、创建方法以及调用和删除操作。存储过程无返回值,可独立调用,而函数必须包含返回值并作为表达式的一部分。文章通过实例展示了存储过程和函数的创建格式,并详细讲解了调用和删除的步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、存储过程与函数概述

关于存储过程与函数概述,包含一下知识点:
1、PL/SQL块分类
(1)、PL/SQL块:匿名块、命名块
匿名块:不保存在数据库中,没有名称,不可以重复调用
命名块:保存在数据库中,有名称,可以重复调用
命名块:存储过程、函数、触发器、包
2、存储过程与函数的概念
存储过程与函数:都是一个子程序,完成一定的功能
存储过程:没有返回值,可以独立调用
函数:必须包含一个返回值,只能作为表达式的一部分使用

写一个例子,对存储过程和函数有一个感性的认识
存储过程:

create procedure proc1(dno number)                   
is                                                   
		cursor c is select * from emp where deptno = dno;
begin                                                
		for r in loop                                    
				dbms_output.put_line(r.name || ':' || r.sal);
		end loop;                                        
end;                                                 

存储过程的调用:

begin          
		prov1(50); 
end;           

函数:

create function func(dno number)  
return NUMBER                     
is                                
	v_max number;                   
begin                             
	select max(sal) into v_max      
	from emp                        
	where deptno = dno;             
	return v_max;                   
end;                              

函数的调用:

declare                             
		v_maxsal number;                
begin                               
		v_maxsal := func(10);           
		dbms_output.put_line(v_maxsal); 
		                                
		dbms_output.putline(func(20));  
end;                               

二、存储过程与函数的创建

关于存储过程与函数创建,包含以下知识点。
1、存储过程的创建
存储过程的创建格式:

CREATE PROCEDURE PROC[(name [IN|OUT|INOUT] type, ... )]   
AS | IS                                                   
		declare statement;                                    
BEGIN                                                     
		statement;                                            
EXCEPTION                                                 
		exception process;                                    
END;                                                     

参数为IN类型(只可读取参数的值,是不能把参数值传递给外部调用环境的)

create or REPLACE procin(dno in number) 
is                                      
	v_maxsal number;                      
begin                                   
	select max(sal) into v_maxsal         
	from emp                              
	where deptno = dno;                   
	dbms_output.put_line(v_maxsal);       
end;    

调用
begin         
	procin(10); 
end;                                          

参数为OUT类型(只可写参数的值到外部调用环境,不可读取外部的参数值)

create or REPLACE procin(dno in number ,maxx out number)               
is                                                                      
	v_maxsal number;                                                       
begin                                                                   
	select max(sal) into v_maxsal                                          
	from emp                                                               
	where deptno = dno;                                                    
	maxx := v_maxsal;                                                      
	dbms_output.put_line(v_maxsal);                                        
end;                                                                    
                                                                        
调用:                                                                  
declare                                                                 
		v_sal number := 0 ;                                                  
begin                                                                   
		procin(10,v_sal);                                                    
		dbms_output.put_line(v_sal);                                         
end;                                                                   

2、函数的创建
函数的创建格式

CREATE FUNCTION func[(name [IN|OUT|INTOUT] type, ...)]     
RETURN retutn_type                                         
AS | IS                                                    
			declare statement;                                   
BEGIN                                                      
			statement;                                           
EXCEPTION                                                  
			exception process;                                   
END;                                                       

示例

create function addtwonumber(no1 number , no2 number)  
return NUMBER                                          
is                                                     
	v_result NUMBER;                                     
begin                                                  
  v_result := no1 + no2;                               
  return v_result;                                     
end;                                                   
                                                       
执行函数:                                             
begin                                                  
	dbms_output.put_line(addtwonumber(10,20));           
end;                                                  

三、存储过程与函数的调用和删除

关于存储过程与函数的调用与删除,包含以下知识点
1、存储过程的调用

1、PL/SQL块:               
		proc[(arg1,...)];     
2、SQL Plus环境:            
		BEGIN                 
				proc[(arg1,...)]; 
		END;                  

2、函数的调用

1、PL/SQL块:                             
			variable :=func[(arg1,...)];      
			                                  
		  示例:                            
		  		declare                       
		  			v_no number                 
		  		begin                         
		  			v_no := addtwonumber(10,20);
		  			dbms_output.putline(v_no);  
		  		end;                          
		  		                              
2、SQL Plus环境:                         
			使用形式与其他SQL中函数相同       

3、删除存储过程

DROP PROCEDURE proc_name;

4、删除函数

DROP FUNCTION func_name;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值