加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

Oracle中包的使用

发布时间:2020-12-12 13:59:14 所属栏目:百科 来源:网络整理
导读:Oracle中包的使用 包头 创建语法 create [ or replace ] package package_name { IS | AS } type_definition | procedure_specification | function_specification | variable_declaration | exception_declaration | cursor_declaration | pragma_declarati

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;

重载

在包的内部,过程和函数可以被重载,也就是说,可以存在多个名称相同的,但是参数不同的过程和函数。重载允许相同的操作执行在不同的对象上。

重载过程

AS

----方式一:

p_StudentId p_Department p_Course classes.course

)

方式二:

p_FirstName students.first_name% p_LastName students.last_name,128);">type

)

.....

ClassPackage;

重载:第一种方式添加学生

classes.course

register_student(student_id,course)

value (p_StudentId,p_Department,p_Course);

AddStudent;

重载:第二种方式添加学生

students.last_name%v_StudentID students.ID%ID v_StudentID

first_name=p_FirstName

last_name=p_LastName;

(v_StudentID,p_Deparment,128);"> AddStudent;

....

ClassPackage;

使用重载

过程一:

Begin

ClassPackage.AddStudent('10001''财务'6666';

过程二:

'hello''world'事业'7777';

Oracle的内置包

1.DBMS_ALERT:数据库报警,允许会话间通讯

2.DBMS_JOB:任务调度服务

3.DBMS_LOB:大型对象操作

4.DBMS_PIPE:数据库管道,允许会话间通讯

5.DBMS_SQL:执行动态SQL

6.UTL_FILE:文本文件的输入输出

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

Oracle中包的使用

包头

创建语法