存储函数和过程

存储过程和函数
存储过程: 对一个模块的封装
函数: 功能几乎一样
区别:
函数必须通过return 关键字返回一个值
存储过程:
不需要return返回值

参数:

输入型参数
输出型参数

8.15

DECLARE
c student%ROWTYPE;
CURSOR c_cursor IS SELECT * FROM student ;

BEGIN
OPEN c_cursor;
LOOP
FETCH c_cursor INTO c;
EXIT WHEN c_cursor%NOTFOUND;
dbms_output.put_line(c.sname);
END LOOP;
CLOSE c_cursor;
END;

DECLARE
i NUMBER;
a student.sname%TYPE;--引用类型
b student%ROWTYPE;--记录类型
BEGIN
i:=107;
\*SELECT s.sname INTO a FROM student s WHERE s.sno=i;
dbms_output.put_line('查询结果:'||a);*\
SELECT * INTO b FROM student s WHERE s.sno=i;
dbms_output.put_line('查询结果:'||b.sbirthday);
END;

--25. 关于 OUT 型的参数: 因为函数只能有一个返回值, PL/SQL 程序可以通过 OUT 型的参数实现有多个返回值
--要求: 定义一个函数: 获取给定部门的工资总和 和 该部门的员工总数(定义为 OUT 类型的参数).
--要求: 部门号定义为参数, 工资总额定义为返回值.
CREATE OR REPLACE FUNCTION sal_func1(p_id IN NUMBER,total_count OUT NUMBER)
RETURN NUMBER
AS
sum_sal NUMBER(10);
CURSOR sal_cursor IS SELECT sal FROM p_emp p WHERE p.deptno=p.id;
BEGIN
total_count:=0;
FOR c IN sal_cursor LOOP
sum_sal:=sum_sal+c.sal;
total_count:=total_count+1;
END LOOP;
RETURN sum_sal;
END;

 

调用:

SQL> set serveroutput on
SQL> 
SQL> declare
2 -- Local variables here
3 i integer;
4 a NUMBER;
5 begin
6 a:= sal_func1(10,i);
7 dbms_output.put_line(i);
8 end;
9 /

存储函数:

--22.2 返回一个"helloworld: atguigu"的字符串,其中atguigu 由执行函数时输入。

CREATE OR REPLACE FUNCTION hello_world(v_logo varchar2)
RETURN VARCHAR2
AS

BEGIN
RETURN 'helloworld'||v_logo;
END;
--22.3 创建一个存储函数,返回当前的系统时间
CREATE OR REPLACE FUNCTION sys_date
RETURN DATE
AS
v_date varchar2(20);
BEGIN
v_date:=SYSDATE;
SELECT SYSDATE INTO v_date FROM dual;
dbms_output.put_line('aaaa');
RETURN v_date;

END;
--23. 定义带参数的函数: 两个数相加
CREATE OR REPLACE FUNCTION add_func(a NUMBER,b NUMBER)
RETURN NUMBER
AS
c NUMBER;
BEGIN
c:=a+b;
RETURN c;
END;
--24. 定义一个函数: 获取给定部门的工资总和, 要求:部门号定义为参数, 工资总额定义为返回值. 别名不能和关键字重名
CREATE OR REPLACE FUNCTION sal_func(p_id NUMBER)
RETURN NUMBER
AS
SUM_sal NUMBER(10);
CURSOR sal_cursor IS SELECT sal FROM p_emp p WHERE p.deptno=p_id;
BEGIN
FOR c IN sal_cursor LOOP
SUM_sal := SUM_sal + c.sal;
END LOOP;
RETURN SUM_sal;
END;

--25. 关于 OUT 型的参数: 因为函数只能有一个返回值, PL/SQL 程序可以通过 OUT 型的参数实现有多个返回值
--要求: 定义一个函数: 获取给定部门的工资总和 和 该部门的员工总数(定义为 OUT 类型的参数).
--要求: 部门号定义为参数, 工资总额定义为返回值.
CREATE OR REPLACE FUNCTION sal_func1(p_id IN NUMBER,total_count OUT NUMBER)
RETURN NUMBER
AS
sum_sal NUMBER(10);
CURSOR sal_cursor IS SELECT sal FROM p_emp p WHERE p.deptno=p.id;
BEGIN
total_count:=0;
FOR c IN sal_cursor LOOP
sum_sal:=sum_sal+c.sal;
total_count:=total_count+1;
END LOOP;
RETURN sum_sal;
END;

posted @ 2017-08-15 22:04  *眉间缘*  阅读(162)  评论(0编辑  收藏  举报