1,包的概述
,什么是包吗?
-
<李>包是一组相关过程,函数,变量,常量和游标等PL/SQL程序设计元素的组合。
b,包的特点吗?
李> <李>它具有面向对象程序设计语言的特点,是对PL/SQL程序设计元素(过程,函数,变量等)的封装。李> <李>它使程序设计模块化。c,包中的程序元素
李> <李>包中的程序元素分为两种:公用元素(公用组件),私用元素(私用组件)。e,包的组成
李> <李>一个包由两个分开的部分组成:李> <李>包规范(包定义):用于定义包的公用组件,包括常量,变量,游标,过程和函数等。李> <李>包体(包主体):用于实现包规范所定义的公用过程和函数。包体不仅可用于实现公用过程和函数,而且还可以定义包的私有组件(变量,游标,过程,函数等)。f,简单代码示例
李> <李>创建包规范和包体的示例代码<代码>——创建包规范 first_package创建或替换包 是 v_no emp.deptno %类型:=10; ——过期 过程query_emp (v_deptno数量默认v_no v_avgsal数量,v_cnt数量); first_package结束; ——创建包体 身体first_package创建或替换包 是 过程query_emp (v_deptno数量默认v_no v_avgsal)数量,v_cnt数量) 是 开始 选择avg (sal), count(*)到v_avgsal v_cnt从emp deptno=v_deptno; 异常 当NO_DATA_FOUND dbms_output.put_line('没有此部门”); 当别人然后 dbms_output.put_line (SQLERRM); 结束; first_package; 代码>李> <李>调用包中的存储过程:
<代码>声明 v_avgsal数量; v_cnt数量; 开始 first_package。query_emp (20 v_avgsal v_cnt); DBMS_OUTPUT。put_line(“平均工资:“| | v_avgsal); DBMS_OUTPUT。put_line(“总人数:“| | v_cnt); 结束;代码>
2,包的创建
,创建包规范
李> <李>语法格式如下:<代码> package_name创建(或更换)包 是| ——定义公用常量,变量,游标,过程,函数等 结束[package_name]; 代码>李> <李>
示例代码:
<代码> emp_package创建或替换包 是 ——添加员工信息的存储过程 过程add_emp_proc (v_empno emp.empno %类型, v_ename emp.ename %的类型, v_sal emp.sal %的类型, v_deptno emp.deptno %类型); ——删除员工信息的存储过程 过程del_emp_proc (v_empno emp.empno %类型); 结束emp_package; 代码>
b,创建包体
李> <李>语法格式如下:<代码>身体package_name创建(或更换)包 是| ——定义私有常量,变量,游标,过程和函数等 ——实现公用过程和函数 结束[package_name]; 代码>李> <李>
示例代码:
<代码>身体emp_package创建或替换包 是 ——添加员工信息的存储过程 过程add_emp_proc (v_empno emp.empno %类型, v_ename emp.ename %的类型, v_sal emp.sal %的类型, v_deptno emp.deptno %类型) 是 e_2291例外; 编译指示EXCEPTION_INIT (e_2291, -2291); 开始 插入emp (empno, ename, sal deptno)值(v_empno, v_ename, v_sal v_deptno); 异常 当DUP_VAL_ON_INDEX RAISE_APPLICATION_ERROR(-20001年的员工号不能重复”); 当e_2291 RAISE_APPLICATION_ERROR(-20002年,“部门号不存在的); 结束; ——删除员工信息的存储过程 过程del_emp_proc (v_empno emp.empno %类型) 是 开始 ,根据员工号删除指定的员工信息 删除从emp empno=v_empno; ——判断是否删除成功 如果SQL % NOTFOUND然后 RAISE_APPLICATION_ERROR(-20009’,指定删除的员工不存在的); 其他的 DBMS_OUTPUT.PUT_line(“删除成功”); 如果; 结束; 结束emp_package; 代码>
c,包创建的过程案例代码
李> <李>根据员工号查询工资,如果工资小于等于3000年工资涨500 .
<代码>——创建包规范 emp_sal_pkg创建或替换包 是 函数get_sal (eno数量)返回数量; 过程upd_sal (eno数,工资数); emp_sal_pkg结束; ——包体 身体emp_sal_pkg创建或替换包 是 函数get_sal (eno数量)返回数量 是 v_sal emp.sal %类型:=0; 开始 选择sal在v_sal从emp empno=eno; 返回v_sal; 异常 当NO_DATA_FOUND RAISE_APPLICATION_ERROR(-20010年,“此员工号不存在的); 结束; 过程upd_sal (eno数,工资数) 是 开始 如果薪水& lt;=3000 更新emp组sal=萨尔+ 500,empno=eno; 如果; 结束; emp_sal_pkg结束;甲骨文专题15之包