zoukankan      html  css  js  c++  java
  • PL/SQL包(Package)

    包(Package)的主要作用是用于逻辑组合相关的PL/SQL类型,一旦创建了包,包就会被存储在Oracle数据库中。

    包由以下两部分组成:

    (1)包规范(Specification):主要是包的一些定义信息,不包含具体的实现,包含类型(type),记录(record),变量(variable),常量(constant),异常(exception)定义,游标(cursor)和子程序(function or procedure)的声明。

    (2)包体(Body):包体是对包规范中声明的子程序的实现部分。

    包规范定义了包需要被公开的声明部分,在创建之后将保存到数据库用户对应的schema中。

    语法 create or replace package package_name is

      -- Author  : HP
      -- Created : 3/19/2018 3:49:59 PM
      -- Purpose : 
      
      -- Public type declarations
      type <TypeName> is <Datatype>;
      
      -- Public constant declarations
      <ConstantName> constant <Datatype> := <Value>;
    
      -- Public variable declarations
      <VariableName> <Datatype>;

     CURSOR cursor_name RETURN return_type; --定义一个游标声明
    exception_name  EXCEPTION;   --定义一个异常
    -- Public function and procedure declarations function <FunctionName>(<Parameter> <Datatype>) return <Datatype>;

    end test_package;

    包体:包体中实现包规范的代码是公开的。

       不在包规范中声明的代码是私有的,只能在本包体内被引用。

     1 create or replace package body test_package is
     2 
     3   -- Private type declarations
     4   type <TypeName> is <Datatype>;
     5   
     6   -- Private constant declarations
     7   <ConstantName> constant <Datatype> := <Value>;
     8 
     9   -- Private variable declarations
    10   <VariableName> <Datatype>;
    11 
    12   -- Function and procedure implementations
    13   function <FunctionName>(<Parameter> <Datatype>) return <Datatype> is
    14     <LocalVariable> <Datatype>;
    15   begin
    16     <Statement>;
    17     return(<Result>);
    18   end;
    19 
    20 begin
    21   -- Initialization 初始化代码块
    22   <Statement>;
    23 end test_package;

    当包第一次被调用时,将进行初始化,将包从硬盘调到内存中,放到系统全局区的共享缓冲池中,包的运行状态则被放入用户全局区的会话存储区中。

    包从第一次调用被初始化,一直到会话结束才释放其运行状态,因此包中的变量具有会话级的作用域

    当会话第一次使用某个包时,会对包进行初始化,此时会初始化所有包级别的数据,对声明中的常量或变量指定赋默认值,初始化单元中的代码块(即begin-end部分的语句块)

    在包中定义游标可分为两种方式:

    (1)在包规范中,定义整个游标,包含查询语句。

    (2)在包规范中仅定义游标头,不包含查询语句。在包体中指定查询语句。

        在包规范中仅定义游标头的话,必须使用return子句指定游标将要提取的数据的元素类型,一般是select语句确定的记录类型。

  • 相关阅读:
    [NOI Online 2021 提高组] 愤怒的小 N
    CF1474F 1 2 3 4 ...
    CF1466H Finding satisfactory solutions
    CF1336F Journey
    [PKUSC2021]代金券
    如何科学地设计对拍随机种子
    CF1168E Xor Permutations
    「JOISC 2019 Day2」两种运输
    springboot json参数
    springboot整合webserver应用
  • 原文地址:https://www.cnblogs.com/ly01/p/8603843.html
Copyright © 2011-2022 走看看