返回顶部
  • 145
分享到

2018-01-16 20:01:33 145人浏览 才女
摘要

可以利用包(package)将过程和函数安排在逻辑分组中。 包含有两个分离的部件:包说明(规范、包头)和包体(主体)。 包说明和包体都存储在数据字典中。 包与过程和函数的一个明显的区别是,包仅能存储在非本地的数据库中。 用SQL命

包

可以利用包(package)将过程和函数安排在逻辑分组中。

包含有两个分离的部件:包说明(规范、包头)和包体(主体)。

包说明和包体都存储在数据字典中。

包与过程和函数的一个明显的区别是,包仅能存储在非本地的数据库中。

用SQL命令创建包需要分别创建包头和包体两部分:

--包头
create  or replace  package 包名
is/as   定义(过程、函数等)
   function  名称(参数名称  in/out  类型)  return 类型;

在定义包头时,要遵循以下规则:

①包元素的位置可以任意安排。然而,在声明部分,对象必须在引用前进行声明。

②包头可以不对任何类型的元素进行说明。例如,包头可以只带过程和函数说明语句,而不声明任何异常和类型。

③对过程和函数的任何声明都必须只对子程序和其参数(如果有的话)进行描述,但不带任何代码的说明,实现代码则只能在包体中。它不同于块声明,在块声明中,过程或函数的代码同时出现在其声明部分。

 

--包体
create  or replace  package  body  包名               //or replace :如果新创建的包体名有重复的则不进行创建,或是删了之前创建的同名包体名才可以创建
is/as
   function  名称(参数名称  in/out  类型)  return 类型;
    begin

    end;

end 包名;

说明:包体中的PL/sql程序部分可以是游标函数,过程的具体定义

包体是一个独立于包头的数据字典对象,包体只能在包头完成编译后才能进行编译,包体中带有实现包头中描述的前向子程序的代码段。除此之外,包体还可以包括具有包体全局属性的附加声明部分,但这些附加说明对于说明部分是不可见的。

 

删除包:

如果只是删除包体,则使用如下命令:

drop package body<包名>;

如果要同时删除包头和包体,则使用如下命令:

drop package<包名>;

 

应用前面统计全体同学的平均成绩的函数和定义从学生成绩表中每个同学各门功课的成绩的过程创建包TEST_PACKGE。

--包头
 create  or replace  package  TEST_PACKGE
as
  function  stu_avg  return number;
end TEST_PACKGE;
--包体
 create  or replace  package body  TEST_PACKGE
as
  function  stu_avg  return number
  as v_avg number;
  begin
     select avg(result_number) into v_avg
     from school_result;
     return v_avg;
    end stu_avg;
end TEST_PACKGE;
--包的使用
declare
  begin
     dbms_output.put_line(TEST_PACKGE.stu_avg);
  end;

--包的删除

drop package BODY TEST_PACKGE;

drop package TEST_PACKGE;

 

包的初始化

当第一次调用打包子程序时,该包将进行初始化。也就是说,将该包从硬盘中读入到内存,并启动调用的子程序的编译代码。这时,系统为该包中定义的所有变量分配内存单元。每个会话都有其打包变量的副本,以确保执行同一包子程序的两个对话使用不同的内存单元。

在大多数情况下,初始化代码要在包第一次初始化时运行。为了实现这种功能,可以在包体中的所有对象之后加入一个初始化部分。

--语法格式:
create or replace package stu_avg_pk
as
  begin
  end;
end stu_avg_pk;

 

 

重载:

在包的内部,过程和函数可以被重载,也就是说,可以有一个以上的名称相同但参数不同的过程或函数。由于重载允许相同的操作施加在不同类型的对象上,因此,它是PL/SQL语言的一个重要特征。

--使用学生姓名或学号,查询学生的平均分数
create or replace  package  stu_avg_pk
as
   function  stu_avg(v_stu_id  in char) return number;
   function  stu_avg(v_stu_name in char,v_stu_sex in char) return number;
end stu_avg_pk;

重载要受到下列限制:

(1) 如果两个子程序的参数仅在名称和类型上不同,这两个子程序不能重载。例如,下面的函数是不能进行重载:

     procedure overloadMe(p_theparameter IN number);

     procedure overloadMe(p_theparameter OUT number);

(2) 不能仅根据两个子程序不同的返回类型对其进行重载。例如,下面的函数是不能进行重载:

     function overloadMeToo return date;

     function overloaMeToo returen number;

(3) 重载子程序的参数的类族(type family)必须不同。例如,由于CHAR和VARCHAR2属于同一类族,所以下面的过程不能重载:

     procedure overloadChar(p_theparameter IN char);

     poecedure overloadchar(p_theparameter IN varchar2);

根据用户定义的对象类型,打包子程序也可以重载。

 

Oracle内置包:

oracle提供了若干具有特殊功能的内置包。这些具有特殊功能的包为:

DBMS_ALERT包:用于数据库报警,允许会话间通信。

DBMS_JOB包:用于任务调度服务。

DBMS_LOB包:用于大型对象操作。

DBMS_PIPE包:用于数据库管道,允许会话间通信。

DBMS_SQL包:用于执行动态SQL。

UTL_FILE包:用于文本文件的输入与输出。

除了包UTL_FILE既存储在服务器端又存储在客户端,所有的DBMS包都存储在服务器中。此外,在某些客户环境,Oracle还提供一些额外的包。

您可能感兴趣的文档:

--结束END--

本文标题: 包

本文链接: https://lsjlt.com/news/6816.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • easyupload及BurpSuite抓包、改包、放包
    很明显的文件上传题 如果你直接传一句话木马是不行的,无论是图片格式还是文本格式,都会被检测到 要么提示文件有问题   要么提示文件类型有问题    这里需要绕过 第一点 一句话木马里肯定不能有php字样, 这种是不行的 可以用这种  ...
    99+
    2023-09-08
    php 安全
  • vue包不包含jQuery
    这篇文章主要介绍“vue包不包含jQuery”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“vue包不包含jQuery”文章能帮助大家解决问题。 ...
    99+
    2024-04-02
  • html5包不包含css
    这篇文章主要介绍“html5包不包含css”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“html5包不包含css”文章能帮助大家解决问题。 ...
    99+
    2024-04-02
  • 可以利用包(package)将过程和函数安排在逻辑分组中。 包含有两个分离的部件:包说明(规范、包头)和包体(主体)。 包说明和包体都存储在数据字典中。 包与过程和函数的一个明显的区别是,包仅能存储在非本地的数据库中。 用SQL命...
    99+
    2018-01-16
  • Android系统固件包解包、修改、打包
      目录 瑞芯微android固件包介绍 一、解包、打包 二、固件升级 三、固件修改 1、固件精减、添加APK软件 2、提取Root权限 3、修改用户分区大小 A.修改HWDE...
    99+
    2022-06-06
    Android
  • jar包打包成exe安装包的实现
    目录1.介绍2.打包配置mysql配置3.项目配置4.项目打包1.介绍 jar包启动我们通常是部署在服务器上,用户通过访问服务器来使用系统,但是如果用户想弄成电脑本端单机版,这时候部...
    99+
    2024-04-02
  • flutter 打包iOS安装包
    flutter iOS Xcode打包并导出ipa文件安装包 1、 Xcode配置 1、 启动打包 1、 等待打包 1、 打包完成、准备导出ipa 1、 选择模式 1、 选择配置文件 1...
    99+
    2023-09-03
    flutter ios
  • 使用maven war包打包去除jar包瘦身
    1、pom文件配置 1.1 添加maven-dependency-plugin插件用于将引用的jar包拷贝到指定的路径 便于后续tomcat启动指定依赖包路径 <!--拷贝...
    99+
    2024-04-02
  • 如何使用maven war包打包去除jar包
    这篇文章主要介绍“如何使用maven war包打包去除jar包”,在日常操作中,相信很多人在如何使用maven war包打包去除jar包问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”如何使用maven war...
    99+
    2023-06-20
  • Android studio 怎么打包成aar包和引用aar包
    目录 1.首先什么是aar格式 2. 怎么把一个模块编译成一个aar 首先把鼠标放到要编译的模块上 然后再点击:Build ->Build  Module 'xxx' 刚...
    99+
    2022-06-06
    Android Studio studio Android
  • Python中的datetime包与time包包和模块详情
    目录一、datetime包1.timedelta(params…)得到一个时间增量对象2.timezone(timedelta) + timedelta(params&...
    99+
    2024-04-02
  • Java中JAR包、EAR包和WAR包有哪些区别
    这篇文章主要介绍“Java中JAR包、EAR包和WAR包有哪些区别”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Java中JAR包、EAR包和WAR包有哪些区别”文章能帮助大家解决问题。WAR包WA...
    99+
    2023-06-27
  • 项目打包部署之部署jar包和war包
    一、概述:  本文将介绍将Java项目部署到Linux服务器上的步骤。首先,你需要了解服务器的基本知识和安装Java环境的方法。然后,我们就jar包和war包两种应用部署到Linux服务器上来进行讲解,包括如何将应用程序上传到服务器,如何配...
    99+
    2023-08-25
    jar linux java 服务器 运维
  • Android rom解包打包工具
    eMMC主要是针对手机和平板电脑等产品的内嵌式存储器,由于其在封装中集成了一个控制器,且提供标准接口并管理闪存等优势,越来越受到Android手机厂商的青睐,以eMMC为存储...
    99+
    2022-06-06
    工具 rom Android
  • sun包和java包的区别
    sun包和java包的区别是:1. 存在时间不同:sun包是早期JDK版本中的一个包,而java包是从JDK 1.2版本开始引入的。...
    99+
    2023-08-28
    java
  • 说说 TCP的粘包、拆包
    分析&回答 拆包和粘包是在socket编程中经常出现的情况, 在socket通讯过程中,如果通讯的一端一次性连续发送多条数据包,tcp协议会将多个数据包打包成一个tcp报文发送出去,这就是所谓的粘包。如果通讯的一端发送的数据包超过一次tcp...
    99+
    2023-09-05
    tcp/ip 网络 网络协议
  • Android Charles抓包,怎样抓包
    Android端Charles抓包 作者:杨充 来源:https://juejin.cn/post/6874903020677791758 目录介绍 01.下载安装02.抓包代理设置03.抓包Https操作04.抓包原理介绍05.抓包...
    99+
    2023-08-16
    android java 网络
  • 闭包
    返回函数不可以引用后续可能会发生变化的变量 如果引用,则返回函数的返回值是基于变量最新的值计算而得的 如循环变量i,如果返回函数体内用到了i,则i的值是最后一次循环的i的值 使用示例   返回函数引用循环变量   def count(...
    99+
    2023-01-31
  • java中如何打包成jar包
    一、手动打包可直接执行的jar包1)先使用javac编译java文件,得到class文件;2)新建文件,名字任起,比如可以叫manifest,内容如下(注意:1. 冒号后面加一个空格,2. 最后必须回车到新的空行,否则出错,如下面内容就必须...
    99+
    2022-02-12
    java基础 java 打包 jar包
  • 如何使用Idea打包jar包
    小编给大家分享一下如何使用Idea打包jar包,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!一、创建项目创建一个简单的Java项目,其中Main.java为主函数...
    99+
    2023-06-15
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作