Oracle包的用法
Oracle包的用法
1、语法格式
  创建包头 
CREATE [OR REPLACE] PACKAGE 包名 IS|AS 变量、常量及数据类型定义; 游标定义头部; 函数、过程的定义和参数列表以及返回类型; END [包名];
创建包体
CREATE [OR REPLACE] PACKAGE BODY 包名 IS|AS PROCEDURE 过程名(参数) IS|AS BEGIN 过程体; END [过程名]; FUNCTION 函数名(参数) RETURN 类型 IS|AS BEGIN 函数体; END [函数名]; END;
2、sql实例
创建一个包,包含有存储过程和函数
CREATE OR REPLACE PACKAGE PK_MYPACKAGE IS A NUMBER; -- 声明变量(声明的对象不一定要在包体中使用) PROCEDURE MY_SP(P_EMPNO IN NUMBER); -- 声明存储过程 FUNCTION MY_FUN(P_NUM1 IN NUMBER , P_NUM2 IN NUMBER) RETURN NUMBER; -- 声明函数 END;
CREATE OR REPLACE PACKAGE BODY PK_MYPACKAGE IS -- 通过员工号找员工姓名和工资存储过程 PROCEDURE MY_SP(P_EMPNO IN NUMBER) -- 和包中的声明要对应(并且一定要先声明) IS V_ENAME EMP.ENAME%TYPE; V_SAL EMP.SAL%TYPE; BEGIN SELECT ENAME, SAL INTO V_ENAME, V_SAL FROM EMP WHERE EMPNO=P_EMPNO; DBMS_OUTPUT.PUT_LINE('姓名:'|| V_ENAME ||'工资:'|| V_SAL); EXCEPTION WHEN NO_DATA_FOUND THEN DBMS_OUTPUT.PUT_LINE('SELECT INTO语句中没有返回任何记录!'); WHEN TOO_MANY_ROWS THEN DBMS_OUTPUT.PUT_LINE('SELECT INTO语句中返回多于1条记录!'); END; -- 比较大小函数 FUNCTION MY_FUN(P_NUM1 IN NUMBER , P_NUM2 IN NUMBER) RETURN NUMBER IS BEGIN IF P_NUM1>P_NUM2 THEN RETURN P_NUM1; ELSE RETURN P_NUM2; END IF; END; END;
3、调用包中的存储过程和函数
调用函数:
select PK_MYPACKAGE.MY_FUN(3, 5) from dual;
调用存储
begin PK_MYPACKAGE.MY_SP(7369); end;
或者
call PK_MYPACKAGE.MY_SP(7369);
注意:如果存储里面有输出参数就只能用第一种方法

 
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号