• 包的概述及使用


    包的概述:
    包用于逻辑组合相关的过程和函数。
    它由包规范和包主体两部分组成。
    (1)包规范:
    用于定义共有常量、变量、过程和函数,在SQL*Plus中建立包规范中使用create package命令。

    例如:
    create package emp_pkg is
    procedure update_sal(name varchar2,newsal number);
    function annual_income(name varchar2) return number;
    end;
    /

    (2)包主体:
    包规范只包含了过程和函数的说明。
    包主体用于实现包规范中的过程和函数。
    在包主体中使用create package body 命令。

    例如:
    create package body emp_pkg is
    procedure update_sal(name varchar2,newsal number)
    is
    begin
    update emp set sal = newsal
    where lower(ename) = lower(name);
    end;

    function annual_income(name varchar2)
    return nuber
    is
    annual_salary number(7,2);
    begin
    select sal*12+nvl(comm,0)
    into annual_salary
    from emp
    where lower(ename)=lower(name);
    return annual_salary;
    end;
    end;
    /

    注:当调用包的过程和函数时,在过程和函数名之前必须要带有包名作为前缀(包名.子程序名)。
    而如果要访问其他方案的包,还必须要加上方案名作为前缀(方案名.包名.子程序名)。
    例:

    1.调用包公共变量:
    exec emp_package.g_deptno := 2;

    2.调用包的公共过程:
    exec emp_package.add_employeeZ(111,'mary',2000);

    3.调用公共函数:
    var salary number;
    exec :salary := emp_package.get_sal(7788);
    print salary;

    4.以其他用户身份调用包公共组件:用户名.包名.组件名
    conn hbq/hbq;
    exec hbq.emp_package.add_employee(111,'hbq',1200);

    5.调用远程数据库包的公用组件:包名.组件名@数据库实例名
    exec emp_package.add_employee@ora0125(111,'jack',3000);

    删除包:drop package emp_package;


    包重载:
    1.重载是指多个(两个或两个以上)具有相同名称的子程序。
    定义包时,使用重载特性,可以使用户在调用同名组件时使用不同参数传递数据,从而方便用户使用。
    例:
    包overload:
    (1)重载函数:get_sal(eno number), get_sal(name varchar2)
    (2)重载过程:fire_employee(eno number), fire_employee(name,varchar2)

    2.建立包规范:
    使用重载特性时,同名的过程和函数必须具有不同的输入参数。但返回值的数据类型必须完全相同。

    例:
    create or replace package overload is
    function get_sal(eno number) return number;
    function get_sal(name,varchar2) return number;
    procedure fire_employee(eno number);
    procedure fire_employee(name varchar2);
    end;
    /

    3,建立包体:
    当建立包体时,必须要给不同的重载过程和重载函数提供不同的实现代码。

    4.调用重载函数和重载过程:
    var sal1 number;
    var sal2 number;

    exec :sal1 = overload.get_sal('scott');
    exec :sal2 = ovweload.get_sal(7369);

    print sal1 sal2

    exec overload.fire_employee(7369);
    exec overload.fire_employee('scott');

  • 相关阅读:
    获取全部校园新闻
    爬取校园新闻首页的新闻的详情,使用正则表达式,函数抽离
    网络爬虫基础练习
    编写可维护的JavaScript
    markDown使用
    好文推荐系列---------JS模板引擎
    backbone框架思路
    如何获取URL中的参数
    如何使用NodeJs来监听文件变化
    sass基本用法(转载)
  • 原文地址:https://www.cnblogs.com/huangbiquan/p/8367684.html
Copyright © 2020-2023  润新知