Oracle 包(package)

1、

包是一组相关过程、函数、变量、常量#SinaEditor_Temp_FontName、类型和游标等PL/SQL程序设计元素的组合。包具有面向对象设计的特点,是对这些PL/SQL程序设计元素的封装。一个包由两个分开的部分组成:

(1)包package声明或定义:包定义部分是创建包的规范说明,声明包内数据类型、变量、常量、游标等元素。这部分也是为使用者提供了透明的接口。

(2)包体packpage body:包体是包定义部分的具体实现。

(3)将有联系的对象打成包,方便使用

(4)包中对象包括储存过程,函数,游标,自定义类型和变量,可以在PL_SQL块中应用这些对象.

2、包的使用

(1)定义包规范,包规范可单独存在。

--定义包规范
create or replace package p_stu
as
    --定义结构体
    type re_stu is record(
        rname student.name%type,
        rage  student.age%type
    );
    --定义游标
    type c_stu is ref cursor;
    --定义函数
    function numAdd(num1 number,num2 number)return number;
    --定义过程
    procedure GetStuList(cid in varchar2,c_st out c_stu);
end;

(2)实现包规范,即包体,名称必须一致,同样的游标定义不能出现,但结构体可以,方法、过程必须实现。

--实现包体,名称一致。
create or replace package body p_stu
as
    --游标和结构体,包规范中已声明,包体中不用再声明,直接使用。

    --实现方法
    function numAdd(num1 number,num2 number)return number
    as
        num number;
    begin
        num:=num1+num2;
        return num;
    end;

    --实现过程
    procedure GetStuList(cid varchar2,c_st out c_stu)
    as
        r_stu re_stu; --直接使用包规范中的结构
    begin
        open c_st for select name,age from student where classid=cid;
       -- 如果已经在过程中遍历了游标,在使用这个过程的块中,将没有值。
       -- loop
       --     fetch c_st into r_stu;
       --     exit when c_st%notfound;
       --     dbms_output.put_line(‘姓名=‘||r_stu.rname);
       -- end loop;
    end;
end;
只有当包头编辑成功后才能编辑包体,其中的函数名与过程名须和包头中的函数过程一样。

1 包说明和包体必须有相同的名字

2 包的开始没有begin语句,与存储过程和函数不同。

3 在包的说明部分定义函数和过程的名称和参数,具体实现在包体中定义。

4 在包内声明常量、变量、类型定义、异常、及游标时不使用declare。

5 包内的过程和函数的定义不要create or replace语句。

6 包声明和包体两者分离。

(3)使用

declare
    c_stu p_stu.c_stu;   --定义包中游标变量
    r_stu p_stu.re_stu;  --定义包中结构体变量
    num number;
begin
    --使用及遍历包中过程返回的结果集
    p_stu.GetStuList(‘C001‘,c_stu);
    loop
        fetch c_stu into r_stu;
        exit when c_stu%notfound;
        dbms_output.put_line(‘姓名=‘||r_stu.rname);
    end loop;

    --使用包中的方法
    select p_stu.numAdd(5,6) into num from dual;
    dbms_output.put_line(‘Num=‘||num);
end;
时间: 2024-11-03 05:27:40

Oracle 包(package)的相关文章

oracle包package的使用

创建包 包头: CREATE OR REPLACE PACKAGE test_pkg IS PROCEDURE update_sal(e_name VARCHAR2,newsal NUMBER);     --  定义一个函数 FUNCTION ann_income(e_name VARCHAR2) RETURN NUMBER;    -- 定义一个存储过程 END; 包体: CREATE OR REPLACE PACKAGE BODY test_pkg IS PROCEDURE update_

Oracle包Package调用Package

Package左侧文件: create or replace package CALL_DETAILS is strdatarange varchar2(1) := '1'; numrow_num number(5) := 1; numcol_num number(5) := 1; total_currency varchar2(2) := '01'; strgranularity_five varchar2(1) := '4'; procedure start_cal(strgranulari

plsql的程序包package

9. 程序包--PACKAGE 9.1 包的定义和编译 包:一个PLSQL相关对象的逻辑分组和单个对象存储在数据库对象中的数据单元.相关的PLSQL对象包括:常量.变量.游标.异常.SP.FUN 包由两部分组成: 规范部分(包头.调用接口)  +  主体部分(包体.实现部分) (1) 包头的创建: create or replace package org_Master is     max_sites_for_an_org number;    type rc is ref cursor;  

Oracle——包

包用于在逻辑上组合过程和函数,它由包规范和包体两个部分组成.(1)首先用CREATE PACKAGE创建包规范,只包含过程和函数的说明,但没有过程和函数的实现代码 --创建一个包名称为sp_package--声明该包含有一个过程update_sal--声明该包含有一个函数annual_incomeCREATE OR REPLACE PACKAGE sp_package ISPROCEDURE update_sal(spname VARCHAR2, sal NUMBER);FUNCTION  an

Java调用Oracle存储Package

Oracle的包Package中可以有很多存储,可通过该包的总调入口在java中直接调用. //java调用oracle的package代码 public boolean cal() throws java.lang.Exception { CallableStatement cstmt = null; String procedure = "{call G_IMPORT_CAL.g_entry(?,?,?) }"; cstmt = conn.prepareCall(procedure

编写第一个ROS(创建工作空间workspace和功能包package)

刚接触ROS,学着写了第一个程序,怕以后忘记,就将其步骤记录下来.. 首先你必须保证你电脑已安装配置好ROS. 1.创建工作空间(workspace) 我们所创建功能包package,应该全部放到一个叫做工作空间(workspace)的目录中 .你可以把目录存储在你账号的任何位置例如,我所创建的工作空间的是路径/home,同时你可以用任何你喜欢的名字命名你的工作空间,我的工作空间名为 test,现在请使用标准的mkdir命令行去创建一个工作空间.我首先建立一个工作空间,名字为test, 此处创建

项目工程的包package与文件夹的关系

项目工程的包package与文件夹的关系: 1. 包名与文件夹是分层关系,包名只是一个字符串而已,包名.对应的是层级的文件夹. 如,com.Immoc.Access包,只是一个字符串.但他对应的windows存储文件夹层级关系则是,src/com/Imooc/Access多个文件夹.

Java包(Package)的详细用法(转)

Java包(Package)的详细用法 http://wenwen.soso.com/z/q229375145.htm 当一个大型程序交由数个不同的程序人员开发时,用到相同的类名是很有可能的,那么如果发生了这样的事件我们该怎么办那?,在我们java程序开发中为了避免上述事件,提供了一个包的概念(package),那么既然有了这样一种方法能避免上述事件,那么我们怎样使用package那?,使用方法很简单我们只需要在我们写的程序第一行使用package关键字来声明一个包就行了,例如我们来声明一个名为

Lua中的模块(module)和包(package)详解1

这篇文章主要介绍了Lua中的模块(module)和包(package)详解,本文讲解了require函数.写一个模块.package.loaded.module函数等内容,需要的朋友可以参考下 前言 从Lua5.1版本开始,就对模块和包添加了新的支持,可是使用require和module来定义和使用模块和包.require用于使用模块,module用于创建模块.简单的说,一个模块就是一个程序库,可以通过require来加载.然后便得到了一个全局变量,表示一个table.这个table就像是一个命