阅读背景:

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; 
前奏:
必要的概念:
    ORACLE  供给可以把 PL/SQL  程序存储在数据库中,并可以




你的当前访问异常,请进行认证后继续阅读剩余内容。

分享到: