首页 > 代码库 > 程序包(学习笔记)
程序包(学习笔记)
示例一、根据输入的部门编号找到这个部门的所有员工
首先创建包,定义包规范
create or replace package getemp_pkg is FUNCTION getemp_fun(p_dno dept.deptno%type) RETURN SYS_REFCURSOR; --返回弱类型游标 end getemp_pkg;
执行后自动生成包的主体
定义包的主体(实现体)
create or replace package body getemp_pkg ASFUNCTION getemp_fun(p_dno dept.deptno%TYPE) RETURN SYS_REFCURSOR --返回弱类型游标AScur_emp SYS_REFCURSOR;begin OPEN cur_emp FOR SELECT * FROM emp WHERE deptno=p_dno; --打开游标 RETURN cur_emp; --返回游标 END getemp_fun;end getemp_pkg;
调用包
DECLARE V_EMP EMP%ROWTYPE; --定义变量来接收游标的内容 CUR_EMP SYS_REFCURSOR; --定义游标来接收返回游标 V_DNO DEPT.DEPTNO%TYPE; --定义部门编号,转入参数BEGIN CUR_EMP := GETEMP_PKG.GETEMP_FUN(&V_DNO); LOOP FETCH CUR_EMP --提取游标 INTO V_EMP; EXIT WHEN CUR_EMP%NOTFOUND; --退出条件 DBMS_OUTPUT.PUT_LINE(CUR_EMP%ROWCOUNT || ‘ 员工编号:‘ || V_EMP.EMPNO || ‘ 姓名:‘ || V_EMP.ENAME); END LOOP; CLOSE cur_emp; --关闭游标END;
示例二、包中有过程和函数
程序包规范
create or replace package pack_me isPROCEDURE emp_proc(num NUMBER);FUNCTION emp_fun(eno NUMBER) RETURN VARCHAR2;end pack_me;
程序包主体
create or replace package body pack_me isPROCEDURE emp_proc(num NUMBER) IS v_name VARCHAR2(50); BEGIN SELECT ename INTO v_name FROM emp WHERE empno=num; dbms_output.put_line(‘员工编号:‘||num||‘ 的姓名:‘||v_name); END emp_proc; FUNCTION emp_fun(eno NUMBER) RETURN VARCHAR2 AS v_job varchar2(50); BEGIN SELECT job INTO v_job FROM emp WHERE empno=eno; RETURN v_job; --dbms_output.put_line(‘员工编号:‘||empno||‘ 的职位:‘||v_job); END emp_fun;end pack_me;
执行
--程序包DECLARE v_empno emp.empno%TYPE:=&empno; v_job Varchar2(50);BEGIN pack_me.emp_proc(v_empno); v_job:=pack_me.emp_fun(v_empno);dbms_output.put_line(‘员工编号:‘||v_empno||‘ 的职位:‘||v_job);END;
查询包
--查询user_objects数据字典确认包规范及包体SELECT object_type,object_name,status FROM User_Objects WHERE object_type IN(‘PACKAGE‘,‘PACKAGE BODY‘);
--查询包的内容SELECT * FROM user_source WHERE TYPE=‘PACKAGE‘ AND NAME=‘GETEMP_PKG‘;
删除包
删除包规范
DROP PACKAGE 包名称
删除包体
DROP PACKAGE BODY包名称
删除包规范里会对其对应的包体一起删除
包的重新编译
ALTER PACKAGE 包名称 COMPILE PACKAGE;--示例ALTER PACKAGE GETEMP_PKG COMPILE PACKAGE;
包的纯度级别
语法:
PRAGMA restrict_references(函数名,WNDS[,WNPS][,RNDS][,RUPS])
NO | 纯度等级 | 说明 |
1 | WNDS | 函数不能悠数据库表数据(无法使用DML更新) |
2 | RNDS | 函数不能读数据库表(无法使用SELECT查询) |
3 | WNPS | 函数不允许悠包中的变量内容 |
4 | RNPS | 函数不允许读取包中的变量内容 |
程序包(学习笔记)
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。