首先搞清楚俩概念 存储过程(procedure)&程序包(package)

  • 存储过程:数据库对象之一,可以理解为数据库的子程序,在客户端和服务器端可以直接调用它。触发器是与表直接关联的特殊存储过程,是在对表记录进行操作时触发的。
    • 优点
      1. 存储过程在服务器端运行,执行速度快。
      2. 存储过程执行一次后,代码就驻留在高速缓存,以后的操作只需从高速缓存中调用已编译的代码执行,提高了系统性能。
      3. 确保数据库的安全。可以不授权用户直接访问应用程序中的一些表,而是授权用户执行访问这些表的存储过程。非授权的用户除非通过存储过程,否则不能访问这些表。
      4. 自动完成需要预先执行的任务。存储过程可以在系统启动时自动执行,而不必在系统启动后再进行手工操作,大大方便了用户使用,可以自动完成一些需要预先执行的任务。
    • 存储过程的创建
      1.  CREATE[OR REPLACE]PROCEDURE<过程名> /*定义过程名*/
        [(<参数名><参数类型><数据类型>[DEFAULT<默认值>][,...N])]
        /*定义参数类型及属性*/
        {IS|AS}
        [<变量声明>]
        BEGIN
        <过程体>
        END[<过程名>][;]

        说明:

        1. 过程名:存储过程名称要符合标识符规则,并且在所属方案中必须是唯一的。关键字OR REPLACE表示在创建过程中,如果已存在同名的存储过程,则重新创建。
        2. 参数名:
    • 存储过程的调用
       [{EXEC|EXECUTE}]<过程名>
      [([<参数名>=>]<实参>|@<实参变量>[,...n])][;]
      CREATE PROCEDURE proc
      AS
      BEGIN
      DBMS_OUTPUT.PUT_LINE('hello world');
      END; EXEC proc;
      ;OR
      BEGIN
      proc;
      END;
    • 创建包头

       CREATE [OR REPLACE] PACKAGE [<用户方案名>.]<包名>   /*包头名称*/
      IS|AS <PL/SQL 程序序列> /*定义过程、函数等*/
    • 创建包体
       CREATE [OR REPLACE] PACKAGE BODY[<用户方案名>.]<包名>
      IS|AS<PL/SQL 程序序列>
    • 删除包
       /*删除包体*/
      DROP PACKAGE BODY <包名>;
      /*删除包头及包体*/
      DROP PACKAGE <包名>;
    • 包的创建&调用eg:
       /*包头部分*/
      CREATE OR REPALCE PACKAGE TEST_PACKAGE
      IS
      FUNCTION average (cnum IN char)
      RETURN NUMBER;
      END; /*包体部分*/
      CREATE OR REPALCE PACKAGE BODY TEST_PACKAGE
      IS
      FUNCTION average (cnum IN char)
      RETURN NUMBER
      AS
      avger NUMBER;
      BEGIN
      SELECT AVG(成绩) INTO avger
      FROM CJB WHERE 课程号=cnum GROUP BY 课程号;
      RETURN(avger);
      END avgerage;
      END; /*调用包*/
      DECLARE
      num number;
      BEGIN
      num:=TEST_PACKAGE.average('');
      DBMS_OUTPUT.PUT_LINE(TO CHAR(num));
      END;
    • 包的初始化:当第一次调用打包子程序时,该包将进行初始化。也就是说将该包从硬盘读入内存,并启动调用的子程序的编译代码。这时系统为该包中定义的所有变量分配内存单元。每个会话都有其打包变量的副本,以确保执行同一包子程序两个会话使用不同的内存单元。大多数情况下,初始化代码要在包第一次初始化时运行。为实现这种功能,可以在包体中的所有对象之后加入一个初始化部分。语法格式为:
       CREATE OR  REPLACE PACKAGE BODY<包名>
      IS|AS
      ...
      BEGIN
      <初始化代码>;
      END;
    • 重载:在包的内部,过程和函数可以被重载。名称相同参数不同。
      • 限制:
        1. 如果两个子程序的参数仅在名称和模式上不同,这两个子程序不能重载。
        2. 不能仅根据两个子程序不同的返回类型对其进行重载。
        3. 重载子程序的参数的类族(type family)必须不同。例如CHAR 和 VARCHAR2属于同一类族,故不能对他们进行唯一的参数重载。

oracle 学习(五)pl/sql语言存储过程&包的更多相关文章

  1. 学习笔记:oracle学习三:SQL语言基础之sql语言简介、用户模式

    目录 1.sql语言简介 1.1 sql语言特点 1.2 sql语言分类 1.3 sql语言的编写规则 2.用户模式 2.1 模式与模式对象 2.2 实例模式scott 本系列是作为学习笔记,用于记录 ...

  2. 学习笔记:oracle学习三:SQL语言基础之检索数据:简单查询、筛选查询

    目录 1. 检索数据 1.1 简单查询 1.1.1 检索所有列 1.1.2 检索指定的列 1.1.3 查询日期列 1.1.4 带有表达式的select语句 1.1.5 为列指定别名 1.1.6 显示不 ...

  3. oracle学习之pl/sql使用==转载

    PLSQL循序渐进全面学习教程(全):https://blog.csdn.net/spark998/article/details/2065269

  4. Oracle11g R2学习系列 之九 PL/SQL语言

    这是个重头戏,如果精通了PL/SQL,毫不夸张的说明精通了Oracle了.PL/SQL由以下三个部分组成(Definition,Manipulation,Control): DDL:数据定义语言,Cr ...

  5. Oracle数据库之开发PL/SQL子程序和包

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

  6. Oracle PL/SQL 语言(Procedural Language/SQL)

    Oracle PL/SQL 语言(Procedural Language/SQL)是结合了结构化查询与 Oracle 自身过程控制为一体的强大语言,PL/SQL 不但支持更多的数据类型,拥有自身的变量 ...

  7. Oracle数据库之PL/SQL包

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

  8. 开发PL/SQL子程序和包及使用PL/SQL编写触发器、在JDBC中应用Oracle

    1.  子程序的各个部分: 声明部分.可执行部分.异常处理部分(可选) 2.子程序的分类: A.  过程 - 执行某些操作 a.  创建过程的语法: CREATE [OR REPLACE]  PROC ...

  9. PL/SQL语言的学习笔记

    一.PL/SQL简介1.什么是PL/SQL程序?(PL/SQL是对SQL语言的一个扩展,从而形成的一个语言) 2.PL/SQL语言的特点(操作Orcale数据库效率最高的就是PL/SQL语言,而不是C ...

随机推荐

  1. 如何通过模仿提升Paper写作能力?

    对于大部分初到国外留学的中国留学生们来说要想自己独立完成一篇Paper可能难度会很大,从Paper字体字号要求.Paper写作格式.Paper写作结构等等诸多因素都会影响留学生们写Paper的效率.对 ...

  2. 【剑指Offer】面试题07. 重建二叉树

    题目 输入某二叉树的前序遍历和中序遍历的结果,请重建该二叉树.假设输入的前序遍历和中序遍历的结果中都不含重复的数字. 例如,给出 前序遍历 preorder = [3,9,20,15,7] 中序遍历 ...

  3. UVA - 11572 Unique Snowflakes(唯一的雪花)(滑动窗口)

    题意:输入一个长度为n(n <= 10^6)的序列A,找到一个尽量长的连续子序列AL~AR,使得该序列中没有相同的元素. 分析: 法一:从r=0开始不断增加r,当a[r+1]在子序列a[l~r] ...

  4. jquery播放mp3

    $("button").on("click",function(){    $('embed').remove();            $('body'). ...

  5. mybatis初步配置容易出现的问题

    The server time zone value 'Öйú±ê׼ʱ¼ä' is unrecognized or represents more than one time zone. You ...

  6. 2.11 DataBinding 简单使用

    DataBindIng 在我理解看来类似于其他语言当中的全局变量,只修改一处就可全部修改 添加位置和代码如下: 打开DataBinding 开关: dataBinding { enabled true ...

  7. 十一、CI框架之输出用户IP地址

    一.代码如下: 二.效果如下: 不忘初心,如果您认为这篇文章有价值,认同作者的付出,可以微信二维码打赏任意金额给作者(微信号:382477247)哦,谢谢.

  8. SQL的查询结果复制到Excel 带标题Head 有换行符导致换行错乱 的解决方案

    将SQL查询到的结果保存为excel有很多方法,其中最简单的就是直接复制粘贴了 1.带Head的复制粘贴 1)先左击红色区域实现选择所有数据 2)随后右击选择Copy with Headers  再粘 ...

  9. HandyJSON.Metadata.Class Xcode10.2, swift5.0 报错 linker command failed with exit code 1

    https://blog.csdn.net/weiwandaixu_/article/details/88842491 2019年03月27日 13:35:40 一如初夏丿 阅读数:31 标签: li ...

  10. C++命名规范——谷歌规范

    1.文件命名规则 文件名全部小写,可以含下划线或连字符,按项目约定命名,且尽量保证文件名明确.比如: cmd_save_player_info_class.cc ,my_use_full_class. ...