PL/SQL子程序(过程、函数)
子程序=过程(存储过程)、函数
在开发中经常会出现一些重复的代码块,Oracle为了方便管理这些代码块,往往会将其封装在一个特定的结构体中,这样的结构体就是子程序。定 义为子程序的代码块也将成为Oracle数据库的对象,会将其对象信息保存在相应的数据字典之中。
定义过程
过程是在大型数据库系统之中专门定义的一组SQL语句集,它可以定义用户操作参数,并且存在于数据库之中,当使用时直接调用即可。
在Oracle之中可以用以下的语法来定义存储过程。
CREATE [OR REPLACE] PROCEDURE 过程名([参数名 [参数模式] NOCOPY 数据类型] [,参数名称 [参数模式] NOCOPY 数据类型,]……)
[AUTHID [DEFINER | CURRENT_USER]]
AS | IS
[PRAGMA AUTONOMOUS_TRANSACTION;]
声明部分;
BEGIN
程序部分;
EXCEPTION
异常处理;
END;
/
过程=过程的声明 + PL/SQL块
定义完过程之后,如果要执行它则要采用“EXEC 过程名”的形式
如果创建的过程出现了错误,那么查看错误使用“SHOW ERRORS”完成
--建立过程ADD_DEPT,根据输入的部门号和名称增加新部门,并调用增加一个新的部门。 CREATE OR REPLACE PROCEDURE add_dept(v_dno dept.deptno%TYPE, v_dna dept.dname%TYPE, V_dlc dept.loc%TYPE) AS BEGIN INSERT INTO dept(deptno,dname,loc) VALUES(v_dno,v_dna,V_dlc); END; /
定义函数
函数(又称存储函数)也是一种较为方便的储存结构,用户定义的函数可以被SQL语句或者PL/SQL语句程序直接进行调用,实际上函数与过程最大的区别就在于函数是有返回值的,而过程只能已开OUT或 IN OUT来返回数据,在Oracle中函数的定义格式如下:
CREATE [OR REPLACE] FUNCTION 函数名([参数…])
RETURN 返回值类型
[AUTHID [DEFINER | CURRENT_USER]]
AS | IS
[PRAGMA AUTONOMOUS_TRANSACTION;]
声明部分;
BEGIN
程序部分;
[RETURN 返回值;]
EXCEPTION
异常处理;
END [函数名];
/
通过DUAL这张虚拟表可以完成函数的验证(建议使用);除此之外还能使用CALL操作,将函数的返回值绑定在一个变量之上
CALL 函数 INTO 变量;
-- 建立函数GET_NAME ,根据输入的员工号返回员工名字,测试。 CREATE OR REPLACE FUNCTION get_name(v_eno emp_pyb.empno%TYPE) RETURN emp.ename%TYPE AS v_ename emp_pyb.ename%TYPE; BEGIN SELECT ename INTO v_ename FROM emp_pyb WHERE empno = v_eno; RETURN v_ename; END; /