--包
--例子:创建一个计算器包
--包的定义:像抽象类,只有定义
CREATE OR REPLACE PACKAGE cal AS
FUNCTION addfun(num1 NUMBER, num2 NUMBER) RETURN NUMBER;
FUNCTION subfun(num1 NUMBER, num2 NUMBER) RETURN NUMBER;
FUNCTION mulfun(num1 NUMBER, num2 NUMBER) RETURN NUMBER;
FUNCTION divfun(num1 NUMBER, num2 NUMBER) RETURN NUMBER;
END cal;
--包的主体:像实现类,将定义好的内容实现
CREATE OR REPLACE PACKAGE BODY cal AS
FUNCTION addfun(num1 NUMBER, num2 NUMBER) RETURN NUMBER AS
BEGIN
RETURN num1 + num2;
END addfun;
FUNCTION subfun(num1 NUMBER, num2 NUMBER) RETURN NUMBER AS
BEGIN
RETURN num1 - num2;
END subfun;
FUNCTION mulfun(num1 NUMBER, num2 NUMBER) RETURN NUMBER AS
BEGIN
RETURN num1 * num2;
END mulfun;
FUNCTION divfun(num1 NUMBER, num2 NUMBER) RETURN NUMBER AS
BEGIN
IF num2 = 0 THEN
raise_application_error(-20000, '除数不能为0');
END IF;
RETURN num1 / num2;
END divfun;
END cal;
--使用包中的方法
--包名.方法名的方式调用方法
BEGIN
dbms_output.put_line(cal.addfun(8, 6));
dbms_output.put_line(cal.subfun(8, 6));
dbms_output.put_line(cal.mulfun(8, 6));
dbms_output.put_line(cal.divfun(12, 6));
END;
--练习:补全cal包中的乘法和除法
--定义中出现的内容,在主体中一定要实现
--主体中的内容,定义中不一定要出现,这部分内容由主体中的子程序自行调用,外界无法调用
CREATE OR REPLACE PACKAGE cal2 AS
FUNCTION addfun(num1 NUMBER, num2 NUMBER) RETURN NUMBER;
END cal2;
--主体
CREATE OR REPLACE PACKAGE BODY cal2 AS
FUNCTION sub_add(n1 NUMBER, n2 NUMBER) RETURN NUMBER AS
BEGIN
RETURN n1 + n2;
END sub_add;
FUNCTION addfun(num1 NUMBER, num2 NUMBER) RETURN NUMBER AS
BEGIN
RETURN sub_add(num1, num2);
END addfun;
END cal2;
--调用
BEGIN
dbms_output.put_line(cal2.addfun(8, 6));
--dbms_output.put_line(cal2.sub_add(8, 6));调用不到
END;
Oracle包的使用
最新推荐文章于 2024-04-09 18:30:23 发布