一楼说的对极了,就好比java中的类的定义,而方法,还有存储过程则好比类中定义的方法.通过包名.方法名或者存储过程名就可以调用包中的各个对象了.如:示例: --package CREATE OR REPLACE PACKAGE PCK_DOMAIN IS FUNCTION GET_DEPTNO(IN_DNAME VARCHAR2) RETURN VARCHAR2; PROCEDURE UPDATE_HIREDATE(IN_NAME IN VARCHAR2) ; END PCK_DOMAIN ;--package body CREATE OR REPLACE PACKAGE BODY PCK_DOMAIN IS --存储过程实现 PROCEDURE UPDATE_HIREDATE(IN_NAME IN VARCHAR2) IS IN_DEPNO VARCHAR2(10); BEGIN IN_DEPNO:=GET_DEPTNO(IN_NAME); UPDATE EMP SET HIREDATE=TRUNC(SYSDATE)-7 WHERE DEPTNO = IN_DEPNO ; COMMIT; EXCEPTION WHEN OTHERS THEN DBMS_OUTPUT.put_line('PROC->ERROR CODE : '||sqlcode||'ERROR MSG: '||UPPER(sqlerrm)); ROLLBACK; END UPDATE_HIREDATE ; END PCK_DOMAIN;---方法实现 FUNCTION GET_DEPTNO(IN_DNAME VARCHAR2) RETURN VARCHAR2 IS IN_DEPNO VARCHAR2(10); BEGIN SELECT DEPTNO INTO IN_DEPNO FROM DEPT WHERE DNAME = IN_DNAME ; RETURN IN_DEPNO; EXCEPTION WHEN OTHERS THEN DBMS_OUTPUT.put_line('FUNCTION-> ERROR CODE : '||sqlcode||'ERROR MSG: '||UPPER(sqlerrm)); RETURN NULL; END GET_DEPTNO;END PCK_DOMAIN;--test-- BEGIN PCK_DOMAIN.UPDATE_HIREDATE('SALES'); END;
--package
CREATE OR REPLACE PACKAGE PCK_DOMAIN
IS
FUNCTION GET_DEPTNO(IN_DNAME VARCHAR2) RETURN VARCHAR2;
PROCEDURE UPDATE_HIREDATE(IN_NAME IN VARCHAR2) ;
END PCK_DOMAIN ;--package body
CREATE OR REPLACE PACKAGE BODY PCK_DOMAIN IS
--存储过程实现
PROCEDURE UPDATE_HIREDATE(IN_NAME IN VARCHAR2)
IS
IN_DEPNO VARCHAR2(10);
BEGIN
IN_DEPNO:=GET_DEPTNO(IN_NAME);
UPDATE EMP SET HIREDATE=TRUNC(SYSDATE)-7 WHERE DEPTNO = IN_DEPNO ;
COMMIT;
EXCEPTION WHEN OTHERS THEN
DBMS_OUTPUT.put_line('PROC->ERROR CODE : '||sqlcode||'ERROR MSG: '||UPPER(sqlerrm));
ROLLBACK;
END UPDATE_HIREDATE ;
END PCK_DOMAIN;---方法实现
FUNCTION GET_DEPTNO(IN_DNAME VARCHAR2) RETURN VARCHAR2
IS
IN_DEPNO VARCHAR2(10);
BEGIN
SELECT DEPTNO INTO IN_DEPNO FROM DEPT WHERE DNAME = IN_DNAME ;
RETURN IN_DEPNO;
EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.put_line('FUNCTION-> ERROR CODE : '||sqlcode||'ERROR MSG: '||UPPER(sqlerrm));
RETURN NULL;
END GET_DEPTNO;END PCK_DOMAIN;--test--
BEGIN
PCK_DOMAIN.UPDATE_HIREDATE('SALES');
END;
包头是接口
包体是对接口的具体实现。
呵呵,不知道,我这样理解对不对。