`
lixin_2002
  • 浏览: 20749 次
  • 性别: Icon_minigender_1
  • 来自: 重庆
社区版块
存档分类
最新评论

PL/SQL复习十二 包

SQL 
阅读更多

--建立包规范

create or replace package emp_package

is

g_deptno number(3) := 30; --全局变量

procedure add_employee(   --过程

   eno in number,

   name in varchar2,  

   salary in number,

   dno in number default g_deptno

);

procedure fire_employee(eno in number); --过程

function get_sal(eno in number) return number; --函数

end emp_package;

/

--建立包体

create or replace package body emp_package

is

  function validate_deptno(v_deptno in number) --私有函数,外界不能调用

  return boolean

  is

    v_temp int;

  begin

    select 1 into v_temp from dept where deptno = v_deptno;

    return true;

    exception

      when no_data_found then

        return false;

  end;

  procedure add_employee(   --过程

     eno in number,

     name in varchar2,  

     salary in number,

     dno in number default g_deptno

  ) is

  begin

    if validate_deptno(dno) then --内部调用私有函数

      insert into emp(empno,ename,sal,deptno) values(eno,name,salary,dno);

    else

      raise_application_error(-20010,'不存在该部门');

    end if;

    exception

      when dup_val_on_index then

        raise_application_error(-20011,'该雇员已存在');

  end;  

  procedure fire_employee(eno in number) is  --过程

  begin

    delete from emp where empno = eno;

    if sql%notfound then

      raise_application_error(-20012,'该雇员不存在');

    end if;

  end;

  function get_sal(eno in number) return number 

  is

    v_sal emp.sal%type;

  begin

    select sal into v_sal from emp where empno = eno;

    return v_sal;

    exception

      when no_data_found then

        raise_application_error(-20012,'该雇员不存在');

  end;

end emp_package;

/


调用:

调用包变量:SQL> exec emp_package.g_deptno := 20;

调用包过程:SQL> exec emp_package.add_employee(1111,'lixin',2000);

调用包函数:

SQL> var salary number;

SQL> exec :salary := emp_package.get_sal(7788);

 

PL/SQL procedure successfully completed

salary

---------

3000

以其他身份调用包的公共组件:

SQL> exec lixin.emp_package.add_employee(1236,'lixin2',20);

远程调用包组件:

SQL> exec emp_package.add_employee@orcl(1236,'lixin2',20);


---------------------------------------------------------------------------------------------------

包纯度级别:

create or replace package my_package is

minsal number;

maxsal number;

function max_sal return number;

function min_sal return number;

pragma restrict_references(max_sal,wnps);

pragma restrict_references(min_sal,wnps);

end;

/

wnps:不能修改变量

wnds:不能修改数据库

rnds:不能读取数据库

rnps不能读取包变量

 

分享到:
评论

相关推荐

    Oracle中SQL以及PL/SQL复习专用

    Oracle中SQL以及PL/SQL复习专用 SQL复习专用

    javaEE学习笔试 pl/sql linux

    很全很系统的学习javaEE的好东西,快速复习javaEE。觉得好请帮顶一下

    oracle复习笔记之PL/SQL程序所要了解的知识点

    PL/SQL的基本语法、记录类型、流程控制、游标的使用、 异常处理机制、存储函数/存储过程、触发器。 为方便大家跟着我的笔记练习,为此提供数据库表文件给大家下载:点我下载 为了要有输出的结果,在写PL/SQL程序前都...

    oracle复习资料

    oracle PL/sql语言复习资料,很全的oracle函数,sql语句,以及游标,存储过程,触发器等复习资料.

    模拟考试题.docx

    pl/sql块习题,里面是关于数据库oracle的pl/sql块相关方面的习题,可以用来复习,pl/sql是数据库里面的重点内容

    2010年 十月 C加加 试题

    自考本科 一、单项选择题(本大题共20小题,每小题1分,共20分) 在每小题列出的四个备选项中只有一个是符合题目要求的,请将其代码填写在题后的括号内。错选、多选或未选均无分。 1.C++中注释“∥”的...的 复习资料

    大型数据库系统复习题.doc

    总共包括十五章的复习题: 第一章 Oracle 11g 介绍 第二章 ORACLE 11g 的体系结构 ...第十章 PL/SQL基础 第十一章 存储过程与函数 第十二章 触发器 第十三章 游标 第十四章 安全管理 第十五章 数据库备份与恢复

    数据库知识点整理,很详细完整,适合入门或者复习。

    数据库知识点整理,包括数据库和表的创建,增删改查,子查询,关联查询,连接,交并差集,索引,序列,视图,...存储过程,触发器,PL/SQL的基本使用。 每个知识点都有基于ORACLE scott 账户下employee 表的实例代码。

    oracle数据库基础知识(数据库程序设计)

    PL/SQL以及DEVELOPER,而这将是一门新的课程。如果你是一名DBA, 请继续。 5、可以根据自己的实际情况,进行有选择的学习,也就是说下面的内 没有特别顺序要求。可以选择深入学习ORACLE的管理、备份与恢复、性能 ...

    数据库概念的复习总结

    存储过程:由PL/SQL语句书写的过程,这个过程经编译和优化后存储在数据库服务器中,使用时只要调用即可。 动态参数与主变量的区别:动态参数的输入不是编译时完成绑定。而是通过 (prepare)语句准备主变量和执行...

    XML Oracle Servlet 复习汇总(S2)

    18 Oracle:PL/SQL 6分 1 XML:xml作用,格式良好的xml 6分 2 XML:dom 7分 3 XML:外部dtd编写 6分 4 XML:dtd和schema的区别 7分 5 XML:db-》xml 6分 6 XML:schema-》xml 8分 7 XML:dtd中的细节 4分 8 XML:内部dtd编写...

    java从入门到精通70个PPT

    50 pl/sql 51 Oracle数据库对象 52 提高数据库性能 53 hibernate总结 54 使用Spring容器管理JavaBean 55 Spring 数据访问支持 56-59 项目实战:JBOA办公自动化管理系统 60 Spring配置优化 61 web service 62-65 项目...

    有关于oracle数据库的sql指令集

    呕心沥血两个礼拜,记录oracle学习点点滴滴 代码经过自己验证 是学习和复习不可多得的好东西 倾情奉献

    Oracle SQL高级编程(资深Oracle专家力作,OakTable团队推荐)--随书源代码

    10.2.5 将子查询因子化应用到PL/SQL中 270 10.3 递归子查询 273 10.3.1 一个CONNECT BY的例子 274 10.3.2 使用RSF的例子 275 10.3.3 RSF的限制条件 276 10.3.4 与CONNECT BY的不同点 276 10.4 复制CONNECT BY...

    Oracle入门绝好资料【看了才知道】

    最近开始学oracle,也不算开始学,以前也学过,只能叫复习了,在csdn上找了半天找到了这个东西,个人觉得还不错,循序渐进,讲知识很详细还有例子给你联系,只可惜是PPT的,PPT嘛,拿来演示还可以,给人看就太不方便了,于是个人...

    advanced-sql-nicar15:NICAR 2015 Advanced SQL with PostgreSQL 动手课的代码和数据

    )完成后,您将拥有三个装载数据的表: 县:2010 年人口普查 PL94 数据。 meat_poultry_inspect :美国农业部关于生产肉类和家禽的植物的数据。 acs_2012_stats :来自 2012 年美国社区调查的衍生数据。基础数学在...

Global site tag (gtag.js) - Google Analytics