1. 如果业务中需要用到大量的存储过程,则需要用Package对存储过程进行进一步的封装,Package 分为Package声明以及Packge body,需要先声明存储过程,存储过程中相关的数据,在Package body中实现声明中的存储过程。类似于C++中的class, Package声明封装业务相关的存储过程以及与业务相关的数据。
2. Package声明
CREATE OR REPLACE PACKAGE PACKAGE_NAME IS
/* 不带参数的存储过程 */
PROCEDURE PROCEDURE_ONE ;
/* 带参数的存储过程 */
PROCEDURE PROCEDURE_TWO(p1 IN VARCHAR2, p2 IN NUMBER);
END PACKAGE_NAME;
3. Package body
CREATE OR REPLACE PACKAGE BODY PACKAGE_NAME IS
/*
* 不带参数的存储过程
*/
PROCEDURE PROCEDURE_ONE IS
/* 参数声明 */
name VARCHAR2(12);
BEGIN
/* 处理体 */
SELECT * FROM DUAL;
/* 异常处理 */
EXCEPTION
WHEN NO_DATA_FOUND THEN
DBMS_OUTPUT.PUT_LINE('无数据记录');
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('异常代码:' + sqlcode); --sqlcode代表异常代码
DBMS_OUTPUT.PUT_LINE('异常信息:' + sqlerrm); --sqlerrm代表异常信息
END WATCH_MONKEY;
/*
*带参数的存储过程
*/
PROCEDURE PROCEDURE_TWO(p1 IN VARCHAR2, p2 IN NUMBER) IS
/* 参数声明 */
name VARCHAR2(12);
BEGIN
/* 处理体 */
name := 'Hello Oracle!';
/* 异常处理 */
EXCEPTION
WHEN NO_DATA_FOUND THEN
DBMS_OUTPUT.put_line('CATCH EXCEPTIOIN');
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('异常代码:' + sqlcode); --sqlcode代表异常代码
DBMS_OUTPUT.PUT_LINE('异常信息:' + sqlerrm); --sqlerrm代表异常信息
END FEED_MONKEY;
END PACKAGE_NAME;