--将方法和过程用包定义

create or replace package pkg_emp

as

       --输入员工编号查询出员工信息

       procedure pro_findInfo(

         in_empno emp2.empno%type,

         out_name out emp2.ename%type,

         out_sal out emp2.sal%type          

       );

       --根据部门编号修改本部门员工工资

       procedure pro_editInfo(

         in_emp_record emp2%rowtype,

         out_flag out boolean

       );

       --输入新员工信息并保存到数据库

       procedure pro_addInfo(

         in_emp_new_record emp2%rowtype

       );

       --统计工资信息

       function fun_sum(

         num_a number,

         num_b number

       ) return number;

end pkg_emp;

 

--实现包

create or replace package body pkg_emp

as

       --输入员工编号查询出员工信息

       procedure pro_findInfo(

         in_empno emp2.empno%type,

         out_name out emp2.ename%type,

         out_sal out emp2.sal%type          

       )

       as

       begin

         select ename, sal into out_name, out_sal from emp2 where empno = in_empno;

       end pro_findInfo;

       

       --根据部门编号修改本部门员工工资

       procedure pro_editInfo(

         in_emp_record emp2%rowtype,

         out_flag out boolean

       )

       is         

       begin

         update emp2 set sal = in_emp_record.sal where deptno = in_emp_record.deptno;

         out_flag := true;

         /*exception

           when no_data_found then

             out_flag := false;

         commit;*/

         if (sql%rowcount < 1) then

           out_flag := false;

         else

           out_flag := true;

           commit;

         end if;

       end pro_editInfo;

       

       --输入新员工信息并保存到数据库

       procedure pro_addInfo(

         in_emp_new_record emp2%rowtype

       )

       as

         temp_sql varchar2(200);

       begin

         temp_sql := 'insert into emp2(empno, ename, sal, comm, deptno) values(:1, :2, :3, :4, :5)';

         execute immediate temp_sql using in_emp_new_record.empno, in_emp_new_record.ename,

               in_emp_new_record.sal, in_emp_new_record.comm, in_emp_new_record.deptno;

         commit;

       end;

       

       --统计工资信息

       function fun_sum(

         num_a number,

         num_b number

       ) return number

       is

       begin

         return num_a + num_b;

       end fun_sum;

end pkg_emp;

       

 

--测试1

declare

       out_name emp2.ename%type;

       out_sal emp2.sal%type;

begin

     pkg_emp.pro_findInfo(7369, out_name, out_sal);

     dbms_output.put_line(out_name);

     dbms_output.put_line(out_sal);

end;  

 

--测试2

select * from emp2;

declare

       in_emp_record emp2%rowtype;

       flag boolean;

begin

     in_emp_record.deptno := &部门编号;

     in_emp_record.sal := &员工工资;

     pkg_emp.pro_editInfo(in_emp_record, flag);

     if (flag = false) then

       dbms_output.put_line('no');

     else

       dbms_output.put_line('yes');

     end if;

end;   

 

--测试3

declare

       new_emp_record emp2%rowtype;

begin

     new_emp_record.empno := &员工编号;

     new_emp_record.ename := &姓名;

     new_emp_record.sal := &工资;

     new_emp_record.comm := &奖金;

     new_emp_record.deptno := &部门编号;

     pkg_emp.pro_addInfo(new_emp_record);

end;

       

--测试4

declare

     sum_emp number;  

begin

     select pkg_emp.fun_sum(sal, nvl(comm, 0)) into sum_emp from emp2

     where empno = &员工编号;

     dbms_output.put_line('员工总工资:' || sum_emp);

end;

Oracle笔记 十三、PL/SQL面向对象之package的更多相关文章

  1. Oracle数据库之PL/SQL包

    Oracle数据库之PL/SQL包 1. 简介 包(PACKAGE)是一种数据对象,它是一组相关过程.函数.变量.常量和游标等PL/SQL程序设计元素的组合,作为一个完整的单元存储在数据库中,用名称来 ...

  2. oracle instantclient basic +pl/sql 安装和配置

    oracle instantclient basic +pl/sql 安装和配置 大家都知道,用PL/SQL连接Oracle,是需要安装Oracle客户端软件的,oracle客户端有点大,比较耗资源. ...

  3. oracle系列(四)PL/SQL

    过程,函数,触发器是PL/SQL编写的,存储在oracle中的.PL/SQL是非常强大的数据库过程语言. PL/SQL优点:性能,模块化,网络传输量,安全性缺点:移植性不好 简单分类:块:过程,函数, ...

  4. 每周一书《Oracle 12 c PL(SQL)程序设计终极指南》

    本周为大家送出的书是<Oracle 12 c PL(SQL)程序设计终极指南>,此书由机械工业出版社出版, 孙风栋,王澜,郭晓惠 著. 内容简介: <Oracle 12c PL/SQ ...

  5. 《oracle每日一练》免安装Oracle客户端使用PL/SQL

    免安装Oracle客户端使用PL/SQL Oracle客户端挺招人烦的,部署连接它的应用通常需要先安装它的客户端,安装程序要求在目标机器上写注册表,假设你没有洁癖的话,你仍可能被下面的事情绊住:当你的 ...

  6. Oracle 客户端安装 + pl/sql工具安装配置

    Oracle 客户端安装 +  pl/sql工具安装配置 下载oracle客户端,并在本地安装. 11g下载地址为: http://www.oracle.com/technetwork/databas ...

  7. Oracle数据库之PL/SQL触发器

    Oracle数据库之PL/SQL触发器 1. 介绍 触发器(trigger)是数据库提供给程序员和数据分析员来保证数据完整性的一种方法,它是与表事件相关的特殊的存储过程,它的执行不是由程序调用,也不是 ...

  8. Oracle数据库之PL/SQL过程与函数

    Oracle数据库之PL/SQL过程与函数 PL/SQL块分为匿名块与命名块,命名块又包含子程序.包和触发器. 过程和函数统称为PL/SQL子程序,我们可以将商业逻辑.企业规则写成过程或函数保存到数据 ...

  9. Oracle数据库之PL/SQL异常处理

    Oracle数据库之PL/SQL异常处理 异常指的是在程序运行过程中发生的异常事件,通常是由硬件问题或者程序设计问题所导致的. PL/SQL程序设计过程中,即使是写得最好的程序也可能会遇到错误或未预料 ...

随机推荐

  1. java生成二维码图片

    1.POM文件引入 <dependency> <groupId>com.google.zxing</groupId> <artifactId>core& ...

  2. Java多线程之notifyAll的作用域

    notifyAll()因某个特定锁而被调用时,只有等待这个锁的任务才会被唤醒. package Thread.Wait; import java.util.Timer; import java.uti ...

  3. 98、EditText 按键盘查询 触发事件

    只需要在XML在输入框中加入Android:imeOptions=”actionSearch”,调用软键盘时,回车键就会显示搜索二字. editSearch.setOnEditorActionList ...

  4. Linux文件夹文件创建、删除

    Linux删除文件夹命令 linux删除目录很简单,很多人还是习惯用rmdir,不过一旦目录非空,就陷入深深的苦恼之中,现在使用rm -rf命令即可.直接rm就可以了,不过要加两个参数-rf 即:rm ...

  5. JDK环境变量中dt.jar、tools.jar等变量值的作用

    变量名:CLASSPATH 变量值:.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar; tools.jar: 工具类 库,它跟我们程序中用到的 基础 ...

  6. android studio 更新 Gradle错误解决方法

    Android Studio每次更新版本都会更新Gradle这个插件,但由于长城的问题每次更新都是失败,又是停止在Refreshing Gradle Project ,有时新建项目的时候报 Gradl ...

  7. 用android:clipChildren来实现红心变大特效

    最近在看别人技术博客(http://www.cnblogs.com/over140/p/3508335.html)的时候,发现一个属性:android:clipChildren属性. 翻文档找到下面介 ...

  8. 记录特殊情况的Python脚本的内存异常与处理

    问题 Python 脚本使用 requests 模块做 HTTP 请求,验证代理 IP 的可用性,速度等. 设定 HTTP 请求的 connect timeout 与 read response ti ...

  9. Fiddler录制jmeter脚本,干货分享

    ​     我们知道以前jmeter的脚本来源有三个,手动书写.badboy录制.自带的录制功能(jmeter3.0该功能还比较好),目前我们又多了一个fiddler生成,自上次分享出来fiddler ...

  10. 举例说明划分子网,路由器IP地址

    划分子网的方法是从网络的主机号借用若干位作为子网号,主机号相应地减少了同样的位数.在划分子网前,IP地址是两级结构的:网络号,主机号. 划分子网后,两级IP地址在本单位内部就变为三级IP地址:网络号, ...