zoukankan      html  css  js  c++  java
  • pl/sql基础知识—包

    n  包

    包用于在逻辑上组合过程和函数,它由包规范和包体两部分组成。

    为什么需要包:使用包可以更好的管理自己写的函数、过程

    ①我们可以使用create package命令来创建包:

     
     

    create [or replace] package 包名  is

    procedure 过程名(变量名 变量类型…);

    function 函数名(变量名 变量类型…) return 数据类型;

    end;

     

    包的规范只包含了过程和函数的说明,但是没有过程和函数的实现代码。包体用于实现包规范中的过程和函数。

    请编写一个包,该包有一个过程,该过程可以接收用户名和新的薪水,将来用于通过用户名去更新薪水;还有一个函数,该函数可以接收一个用户名,将来要实现得到用户的年薪是多少

    create or replace package mypackage1 is

    procedure pro1(v_in_ename varchar2,v_in_newsal number);

    function fun1(v_in_ename varchar2) return number;

    end;

    ②建立包体可以使用create package body命令

    create [or replace] package body 包名  is

    create [or replace] procedure 过程名(变量名 变量类型…) is

    begin

    执行语句;

    end;

    create [or replace] function 函数名(变量名 变量类型…) return 数据类型 is

    定义变量;

    begin

    执行语句;

    end;

    end;

     

     

     

     

     

    SQL> create or replace package body mypackage1 is

      2  procedure pro1(v_in_ename varchar2,v_in_newsal number) is

      3    begin

      4      update emp set sal=v_in_newsal where ename=v_in_ename;

      5    end;

      6  function fun1(v_in_ename varchar2) return number is

      7    v_annual_sal number;

      8    begin

      9      select (sal+nvl(comm,0))*13 into v_annual_sal from emp where ename=v_in_ename;

     10      return v_annual_sal;

     11    end;

     12  end;

     13  /

    Package body created

    ③如何调用包的过程或是函数

    当调用包的过程或是函数时,在过程和函数前需要带有包名,如果要访问其他方案的,还需要在包名前加方案名。

    (1)控制台

     
     

    exec 方案名.包名.过程名(参数值…);

    call  方案名.包名.函数名(参数值…);

     

     

    (2)在java中取调用包下的函数或是过程应当:

    String sql="{call scott.mypackage1.pro1(?,?)}";

    String sql="select scott.mypackage1.fun1('KING') from dual";

    细节:

    ①包体中药实现的方法或者是过程,应先在包中声明。

  • 相关阅读:
    JS原型链与instanceof底层原理
    流程关系图制作---ProcessOn从入门到精通
    VBA比较两个Excel数据的异同
    C# 通过 Quartz .NET 实现 schedule job 的处理
    C# 通过 Quartz .NET 实现Timer Job并将其注册成为Windows Service
    在.Net Framework中调用Python的脚本方法 (以VB和C#为例)
    用Python建立连接直接读取与更改Rockwell Control Logix Controller的tag值
    C#通过第三方组件生成二维码(QR Code)和条形码(Bar Code)
    如何根据条件来确定某个字段是否应该被序列化
    在Asp.Net MVC 中如何用JS访问Web.Config中appSettings的值
  • 原文地址:https://www.cnblogs.com/fanweisheng/p/11114132.html
Copyright © 2011-2022 走看看