Oracle中包的使用
包头
创建语法
create [orreplace]package package_name {IS|AS} type_definition | procedure_specification | function_specification | variable_declaration | exception_declaration | cursor_declaration | pragma_declaration end [package_name]; |
简单案例
包作用: 可以把一些过程和函数组织到一起,把PL/sql代码模块化,构建其他人员重用的代码 包的说明 也叫包头,包含了有关包内容的信息 ClassPackageAs --Add a new student into the specified class PROCEDURE AddStudent (p_studentIDin students.id%type, p_department classes.department% p_course classes.course%); --Remove the specified student from the specified class RemoveStudent (p_studentID--Exception raised by RemoveStudent e_studentNotRegisteredEXCEPTION; --Table type used to hold student info TYPE t_studentIDTableistableoftype indexbybinary_integer--Return a PL.sql table containing the students.id%type --in the specified class ClassList(p_department p_IDsout t_studentIDTable,128);"> p_NumStudents); ClassPackage; |
包体
包体是独立于包头的数据字典对象,包头完成编译之后才能进行编译,包体中带有实现包头中描述的前向子程序的代码段。
------------------创建包头---------------------------- ); ClassPackage; ---------------创建包体------------------------------ BODYAS 添加学生procedure AddStudent ( p_studentID)IS begin insertinto registered_students (student_id,department,couse) values (p_studentID,p_department,p_course); AddStudent; 删除学生------------------------------- RemoveStudent deletefrom registered_students where student_id = p_studentID and department = p_department couse = p_course ifsql%NOTFOUNDthen raise e_StudentNotRegistered; ; RemoveStudent; -------------这里可以使用包头中声明的变量,异常等---- ClassList binary_integer IS v_studentID registered_students.student_id%CURSOR c_registeredStudentsselect student_id department = p_dapartment course = p_course; p_NumStudents:=0open c_registeredStudents; loop fetch v_StudentID; exitwhen c_registeredStudents%p_NumStudents:=p_NumStudents+1; p_IDs(p_NumStudents):=v_StudentID; loop ClassList; ClassPackage; |
重载
在包的内部,过程和函数可以被重载,也就是说,可以存在多个名称相同的,但是参数不同的过程和函数。重载允许相同的操作执行在不同的对象上。
重载过程
使用重载
过程一: Begin ClassPackage.AddStudent('10001''财务'6666'; 过程二: 'hello''world'事业'7777'; |
Oracle的内置包
1.DBMS_ALERT:数据库报警,允许会话间通讯
2.DBMS_JOB:任务调度服务
3.DBMS_LOB:大型对象操作
4.DBMS_PIPE:数据库管道,允许会话间通讯