首页 > 经验记录 > PL/SQL子程序(过程、函数)

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;
/

 
 
 
 

           


CAPTCHAis initialing...
EA PLAYER &

历史记录 [ 注意:部分数据仅限于当前浏览器 ]清空

      00:00/00:00