ORACLE 存储函数

前奏:
必要的概念:
    ORACLE  提供可以把 PL/SQL  程序存储在数据库中,并可以在任何地方来运行它。这样就叫存储过
    程或函数。
    过程和函数统称为 PL/SQL 子程序,他们是被命名的 PL/SQL 块,均存储在数据库中,并
    通过输入、输出参数或输入/输出参数与其调用者交换信息。过程和函数的唯一区别是函数总向调
    用者返回数据,而过程则不返回数据。
1:创建函数
	CREATE [OR REPLACE] FUNCTION function_name
	[ (argment [ { IN | IN OUT }] Type,
	argment [ { IN | OUT | IN OUT } ] Type ]
	[ AUTHID DEFINER | CURRENT_USER ]
	RETURN return_type 
	{ IS | AS }
	<类型.变量的说明> 
	BEGIN
	FUNCTION_body
	EXCEPTION
	其它语句
	END;
	
2:说明:
	1)  OR REPLACE  为可选.  有了它,  可以或者创建一个新函数或者替换相同名字的函数,  而不会出现冲突
	2)  函数名后面是一个可选的参数列表,  其中包含  IN, OUT  或  IN OUT  标记.  参数之间用逗号隔开. IN  参数标记表示传递给函数的值在该函数执行中不改变OUT  标记表示一个值在函数中进行计算并通过该参数传递给调用语句; IN OUT  标记表示传递给函数的值可以变化并传递给调用语句.  若省略标记,  则参数隐含为  IN。
	3)  因为函数需要返回一个值,  所以  RETURN  包含返回结果的数据类型.	
	
3:例题:
		--存储函数结构
		create function func_name(dept_id number , salary number)
		return number
		is
			 --函数使用过程中 需要声明的变量 记录类型 cursor
		begin
			 --函数的执行体
		exception
			 --处理函数执行过程中异常
		end;

		--例题1  写一个返回hellow world的function
		create or replace function hello_func(temp varchar2)
		return varchar2
		is
		begin
			 return 'hello world'|| temp;
		end;                    

		--调用函数:
		begin
			 dbms_output.put_line(hello_func);
		end;
		select hello_func('cui') from dual;


		--例二 写一个返回系统时间的函数    如果函数没有形参  切勿加()
		create function get_sysdate
		return date
		is
			v_date date;
		begin
			v_date := sysdate;
			return v_date;
		end;

		select get_sysdate() from dual;       


		--创建两个参数相加的 存储函数
		create function add_func(temp_A number , temp_B number)
		return number
		is
			temp_sum number(10);
		begin
			temp_sum := temp_A + temp_B;    
			return temp_sum;
		end;

		select add_func(1,1) from dual;

		--定义一个函数:获取给定部门的工资总和,要求:部门号定义为参数,工资总额定义为返回值;
		create function get_sal(dept_id number)
		return number
		is
			v_sumsal number(10):=0;
			cursor salary_cursor is select salary from employees where department_id = dept_id;
		begin
			for c in salary_cursor loop
				  v_sumsal := v_sumsal + c.salary;
			end loop;
			return v_sumsal;       
		end;

		select get_sal(60) from dual;

		--定义一个函数 获取指定部门的工资总和 和 该部门的员工总数(定义为out类型的参数)
		--要求部门号定义为参数,工资总额定义为返回值
		create function get_sall(dept_id  number , total_count out number)
		return number
		is 
			v_sumsal number(10):=0;
			cursor salary_cursor is select salary from employees where department_id = dept_id;
		begin
			total_count := 0;
			for c in salary_cursor loop
				v_sumsal := v_sumsal + c.salary;
				total_count := total_count + 1;
			end loop;
			return v_sumsal;
		end;

4:函数的调用

	declare 
		v_num number(5):=0;
	begin
		 dbms_output.put_line(get_sall(60,v_num));
		 dbms_output.put_line(v_num);
	end; 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值