PL/SQL编程---包

--包
	--概念
		对功能或业务相似的存储过程、函数、类型等的一个封装,对外部提供统一调用的接口。
		具有封装性、安全性等特点。
	--包分为
		包头:声明部分,是对公有对象的声明。
		包体:实现部分,是对声明部分声明的对象的具体实现。
	--语法
		--创建包头
		CREATE [OR REPLACE] PACKAGE 包名
		IS 
			--类型的定义
			--变量/常量的声明
			--公有存储过程的声明
			PROCEDURE 储存过程名(参数);
			--公有函数的声明
			FUNCTION 函数名(参数) RETURN 返回值类型;
		END;
	
		--创建包体
		CREATE OR REPLACE PACKAGE BODY 包名
		IS 
			--私有对象的声明
			--私有类型
			--私有变量/常量
			--私有的存储过程
			--私有的函数
			--公有对象的实现
			--公有存储过程的实现
			PROCEDURE 储存过程名(参数)
			IS 
				...
			BEGIN 
				...
			END;
			--公有函数的实现
			FUNCTION 函数名(参数) RETURN 返回值类型
			IS
				...
			BEGIN
				...
				RETURN 语句;
			END;
		END;
	--包的调用
		包名.对象名
	--公有对象
		可以通过包名.对象名直接访问的属性都是共有对象(所有在包头中声明的内容都属于公有对象)
	--私有对象
		只能在包内部使用,不能通过包名调用(在包体中出现,没有在包头声明的对象都属于私有对象)
		私有对象一般在公有对象前面。
	
--示例1
--创建包头
CREATE OR REPLACE PACKAGE P_ETL
IS 
	--定义一个索引表类型
	TYPE CTYPE IS TABLE OF VARCHAR2(50) INDEX BY PLS_INTEGER;
	--声明一个变量
	V_S VARCHAR2(50);
	--定义一个常量
	PI CONSTANT NUMBER(6,5):=3.1415;
	--声明一个存储过程,打印九九乘法表
	PROCEDURE SP_99;
	--声明一个函数,计算一个数的阶乘
	FUNCTION F_JC(I_N NUMBER) RETURN NUMBER;	
END;

--创建包体(包的实现)
CREATE OR REPLACE PACKAGE BODY P_ETL
IS 
	--声明一个私有对象
	V_STR VARCHAR2(50):='---九九乘法表--';
	--私有的存储过程
	PROCEDURE SP_PRINT
	IS
	
	BEGIN
		DBMS_OUTPUT.PUT_LINE(V_STR);
	END;
	
	--实现公有的存储过程
	PROCEDURE SP_99
	IS
	
	BEGIN
		--调用私有的存储过程
		SP_PRINT();
		
		FOR V_I IN 1..9 LOOP
			FOR V_J IN 1..V_I LOOP
				DBMS_OUTPUT.PUT(V_J||'*'||V_I||'='||(V_J*V_I));
				IF V_J*V_I<10 THEN
					DBMS_OUTPUT.PUT('  ');
				ELSE
					DBMS_OUTPUT.PUT(' ');
				END IF;
			END LOOP;
			DBMS_OUTPUT.NEW_LINE();
		END LOOP;
	END SP_99;

	--实现公有的函数
	FUNCTION F_JC(I_N NUMBER) RETURN NUMBER
	IS
	
	BEGIN
		IF I_N=1 THEN
			RETURN 1;
		ELSE
			RETURN I_N*F_JC(I_N-1);
		END IF;
	END F_JC;
END P_ETL;

--调用P_ETL测试
BEGIN
	P_ETL.V_S:='公有变量赋值';
	P_ETL.SP_99();
	DBMS_OUTPUT.PUT_LINE(P_ETL.V_S);
	DBMS_OUTPUT.PUT_LINE(P_ETL.F_JC(6));
END;

CALL P_ETL.SP_99();	
SELECT P_ETL.F_JC(6) FROM DUAL; 		

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值