存储过程是一个命名的程序块,包括过程的名称、过程使用的参数以及过程执行的操作。如果在应用程序中经常需要执行某些特定的操作,那么就可以基于这些操作创建一个特定的存储过程。存储过程经编译后存储在数据库中,所有执行存储过程要比执行存储过程中的封装的SQL语句更有效率。
语法格式:创建存储过程
CREATE [OR REPLACE] PROCEDURE 过程名(参数1 [IN|OUT|IN OUT] 数据类型,参数2 [IN|OUT|IN OUT] 数据类型……)IS|ASPL/SQL过程体;
① OR REPLACE:表示如果存储过程已经存在,则替换已有的存储过程
② IN表示传入参数,不可以被赋值,OUT表示传出参数,可以被赋值,IN OUT表示传入传出参数,可以传入值,可以被赋值,可以返回值。如果这部分省略,默认表示传入参数。创建函数可以带参数,也可以不带。
③ IS/AS:在IS/AS后声明变量不要加DECLARE语句
命名规范:
存储过程命名规范:SP目标表名
存储过程传入参数命名规范:P参数名(PSTART_DATE)
存储过程变量命名规范:V变量名(V_END_DATE)
语法格式:调用存储过程
BEGIN过程名[(参数)];END;
语法格式:删除存储过程
DROP PROCEDURE 过程名;
【例】查询20部门中的经理的姓名、工资、入职日期。
-- 创建存储过程CREATE OR REPLACE PROCEDURE SP_MYEMP( P_DEPTNO IN NUMBER,P_HIREDATE OUT DATE,P_JOB_ENAME IN OUT VARCHAR2)IS----------参数不能定义长度V_SAL NUMBER;BEGINSELECT E.ENAME, E.SAL, E.HIREDATEINTO P_JOB_ENAME, V_SAL, P_HIREDATEFROM EMP EWHERE E.DEPTNO = P_DEPTNOAND E.JOB = P_JOB_ENAME;DBMS_OUTPUT.PUT_LINE(P_JOB_ENAME ||' '|| V_SAL ||' '|| P_HIREDATE);END;-- 调用存储过程DECLAREV_JOB_ENAME VARCHAR2(100):='MANAGER';V_HIREDATE DATE;BEGINSP_MYEMP(20, V_HIREDATE, V_JOB_ENAME);END;
