oracle笔记八(函数+存储过程+包)
    函数:(过程和函数的唯一区别是函数总向调用者返回数据,而过程则不返回数据)
	1.	创建函数
	Create or replace function get_salary(
		V_deptno number,emp_count out number)return number
	------这里的type只能是类型,不能有长度或大小的定义
	Is
		V_sum number;
	Begin
		Select sum(sal),count(*) into v_sum,emp_count from emp
		Where deptno=v_deptno;
		Return v_sum;
	Exception
		When no_data_found then
			dbms_output.put_line('no data');
		when others then
			dbms_output.put_line(sqlcode||sqlerrm);
	End;
2.	查询函数信息
			a).	select object_name from user_objects 
where object_type=’FUNCTION’;
			b).	select object_name from user_procedures;
			c).	select line,text from user_source 
					where name=’GET_SALARY’;
3.	调用函数方法
declare
	   v_sum number;
	   v_num number;
begin
	-----位置表示法
	 v_sum:=get_salary(30,v_num);
	 dbms_output.put_line(v_sum ||','||v_num);	 
	-----名称表示法
	 v_sum:=get_salary(emp_count=>v_num,v_deptno=>20);
	 dbms_output.put_line(v_sum ||','||v_num);
	-----混合表示法(使用位置表示法所传递的参数必须放在名称表示法所传递的参数前面 )
	 v_sum:=get_salary(10,emp_count=>v_num);
	 dbms_output.put_line(v_sum ||','||v_num);
end;
4.	结合select语句调用
select ename,sal ,tax(sal),tax(sal)*sal from emp;
存储过程:
1.	创建过程
create or replace procedure delEmp(
	   v_empno emp.empno%type)
is
  no_result exception;
begin
	 delete from emp where empno=v_empno;
	 if sql%notfound then
	 	raise no_result;
	else dbms_output.put_line(v_empno||'has been deleted');
	end if;
exception
		 when no_result then
		 	dbms_output.put_line('no data');
		when others then
			 dbms_output.put_line(sqlcode||','||sqlerrm);  		 	
end;
2.	调用过程
a). begin
			delemp(1234); 
end;
		b). exec delemp(1234);
		c).在sql/plus中调用
			set serveroutput on 
			exec delemp(1234);
包Package:
1.	创建包定义
Create or replace package mypack
Is
		C_pi constant number:=3.14;
		Function getArea(r number)return number;
End;
2.	创建包体
Create or replace package body mypack
Is
		Function getArea(r number)return number
		Is
		Begin
			Return c_pi*r*r;
		End;
End;
3.	调用包
a). begin
			 dbms_output.put_line(mypack.getArea(5));
end;
		b).exec mypack.getArea(5);
查看过程的名字及其参数表	
	Desc mypack.getArea;
我的异常网推荐解决方案:oracle存储过程,http://www.aiyiweb.com/oracle-develop/177537.html