目录

1.Oracle中包

2.包的创建

(1)可视化方式创建包

(2)以命令方式创建包

①创建包头

②创建包体

③删除包

3.包的初始化

4.重载

①相关概念和注意事项

②系统内置的包


Oracle学习的相关知识点(汇总)

1.Oracle中包

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

(2)包有两个分离的部件:包说明(规范和包头)和包体(主体);他们都分别存储在数据字典中;

(3)包与过程和函数的区别:包仅能存储在非本地的数据库中;

(4)除了相关的对象结合组成,包与依赖性较强的存储子程序相比,其所受的限制较少,并且包的效率比较高;

(5)包就是一个命名的声明部分;任何可以出现在声明中的语句都可以在包中使用,包括过程,函数,游标,类型和变量。

2.包的创建

(1)可视化方式创建包

(2)以命令方式创建包

①创建包头

以命令的方式创建包的话,包含创建包头和包体。

CREATE [OR REPLACE]PACKAGE [<用户方案名>.]<包名>
    IS | AS  <PL/SQL程序序列>

提示:<PL/SQL 程序序列>中可以是变量,常量及数据类型定义,游标定义,函数,过程定义和参数列表返回类型等。

定义包头时注意以下几点:

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

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

(3)对过程和函数的声明都只是对子程序及其参数进行描述,而不带任何代码的说明,实现代码只能在包体中。不同于块声明,在块声明中,过程或函数的代码可以同时出现在其声明部分(也就是在包中声明的,可以在包以外使用)。

②创建包体

CREATE [OR REPLACE]PACKAGE BODY[<用户方案名>.]<包名>
    IS | AS  <PL/SQL程序序列>

③删除包

删除包体:DROP PACKAGE BODY <包名>;

如果同时删除包名和包体:

DROP PACKAGE<包名>

根据上面创建包:

例子1:求解学生表中的最高学分。

第一步:创建包头

--创建一个包DEMO_PACKAGE
CREATE OR REPLACE PACKAGE DEMO_PACKAGE
    IS

--这里没有参数
    FUNCTION maxScore
    --定义返回类型
        RETURN NUMBER;
END;

第二步:创建包体(包体中将包头中定义的函数具体实现)

--创建包体
CREATE OR REPLACE PACKAGE BODY DEMO_PACKAGE
    IS
    FUNCTION maxScore
        RETURN NUMBER
    AS 
    maSco number;
    BEGIN 
        SELECT MAX(score) INTO maSco
            FROM XSB;
        return maSco;
    END maxScore;
    END;

第三步:调用包中的函数

--调用包中的函数
DECLARE 
    maSco number;
BEGIN
    maSco:=DEMO_PACKAGE.maxScore();
    DBMS_OUTPUT.PUT_LINE('最高学分: '||to_char(maSco));
END;

例子2:建立一个包packgfp:定义求N!的函数和显示emp表记录个数的过程。

第一步:建立包头

--建立包头
create or replace package demoWorkisfunction fni(nv number)return number;
end;

第二步:建立包体

--建立包体
SET SERVEROUTPUT ON;
create or replace package body demoWorkis function fni(nv number)return numberas factor number:=1;cnt number:=0;BEGIN select count(*) into cnt from emp;DBMS_OUTPUT.PUT_LINE('记录数: '||to_char(cnt));for i in 2..nv loopfactor:=factor*i;end loop;return (factor);end fni;end;

第三步:调用包中的函数

--调用包中的函数
DECLAREv_get number;
BEGIN v_get:=demoWork.fni(10);DBMS_OUTPUT.PUT_LINE('10!='||to_char(v_get));
END;

3.包的初始化

当第一次再调用包子程序时,该包将进行初始化(也就是说,将该包从硬盘中读入内存,并启动调用的子程序编译代码,这时系统会该该包中的定义的所有变量分配内存单元)。

CRETE OR REPLACE PACKAGE BODY<包名>

IS | AS

...

BEGIN

<初始化代码>

END;

4.重载

①相关概念和注意事项

在包的内部,过程和函数都可以被重载,也就是如果C++一样,可以使用一个以上的相同名称,但是参数不同(这里的参数不同,不是指参数名称)。

注意:

(1)两个子程序的参数仅在名称和模式上不同,这个两个子程序是不能进行重载的,例如:

maxScore(ID IN varchar2)和maxScore(ID OUT varchar2);

也就是说不能通过参数名称和模式是否相同来判断可以不可以重载

(2)不能仅仅根据两个子程序的返回类型不同而进行重载,例如:

FUNCTION maxScore RETURN CHAR;

FUNCTION maxScore RETURN NUMBER;

(3)重载子程序的参数类族必须不同,其中的CHAR 和VARCHAR2属于同一个类族。

如maxScore(ID IN char)和maxScore(ID IN varchar2);这两个子程序是不能进行重载的。

②系统内置的包

(1)DBMS_ALERT包:用于数据库报警,允许会话通信;

(2)DBMS_JOB包:用于任务调度服务;

(3)DBMS_LOB包:用于大型对象操作;

(4)DBMS_PIPE包:用于数据库管道,允许会话间通信;

(5)DBMS_SQL包:用于执行动态的SQL;

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

Oracle数据库中的包(七)相关推荐

  1. oracle数据库中索值,Oracle数据库中的索引详解

    Oracle数据库中的索引详解以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 一 ROWID的概念 存储了row在数据文 ...

  2. Oracle数据库中调用Java类开发存储过程、函数的方法

    Oracle数据库中调用Java类开发存储过程.函数的方法 时间:2014年12月24日  浏览:5538次 oracle数据库的开发非常灵活,不仅支持最基本的SQL,而且还提供了独有的PL/SQL, ...

  3. java mysql nclob_java语言操作Oracle数据库中的CLOB数据类型 (转)

    java语言操作Oracle数据库中的CLOB数据类型 (转)[@more@] 有关字段类型的相关信息可以查阅oracle技术网.下面摘抄一些有关blob.clob等类型的说明.又便于大家的了解. 字 ...

  4. oracle传date参数十二小时,Oracle数据库中 to_date()与24小时制表示法及mm分钟的显示...

    一.在使用Oracle的to_date函数来做日期转换时,时候也许会直接的采用"yyyy-MM-dd HH:mm:ss"的格式作为格式进行转换,但是在Oracle中会引起错误:&q ...

  5. oracle blob update,Oracle数据库中对BLOB数据的操作问题

    [TechTarget中国原创]问:请问在Oracle数据库中,如何插入并检索二进制大对象数据(BLOB)? 答:我建议在处理大对象数据之前,先阅读一下"Oracle应用开发者指南" ...

  6. oracle中md5算法,oracle数据库中存储过程使用MD5算法加密

    一.技术点 1. DBMS_OBFUSCATION_TOOLKIT.MD5 DBMS_OBFUSCATION_TOOLKIT.MD5是MD5编码的数据包函数,但偶在使用select DBMS_OBFU ...

  7. oracle数据库中的虚拟表,Oracle10g中的虚拟专用数据库(VPD)

    什么是VPD 所谓虚拟专用数据库(VPD)指的是,通过在数据库里进行配置,从而让不同的用户只能查看某个表里的部分数据.VPD分为以下两个级别: 行级别:在该级别下,可以控制某些用户只能查看到某些行数据 ...

  8. Oracle数据库中的数据加密

    Oracle数据库中的数据加密 / Oracle数据库DES加密 有个需求,需要对某些敏感信息字段进行脱敏,要求在数据库中不能显示明文.如果目的侧重保护数据而非脱敏的话,可以考虑用表空间透明数据加密( ...

  9. oracle实例查询IP,Oracle数据库中获取访问者的IP地址或主机名的方法

    有时我们需要在Oracle数据库中获取访问者的局域网或Internet网的主机名或IP地址.在Oracle中可以使用下面的方法来实现: Oracle包utl_inaddr 作用:用于取得局域网或Int ...

最新文章

  1. PCA计算流程详解与实现(Python详细编码,全部测试正确,与sklearn完全一致,只有7行代码)
  2. 家里用服务器放在哪个位置,路由器摆放在家中哪个位置好 路由器摆放位置【详解】...
  3. 在线便携小电视源码 云电视源码
  4. 4G换5G关口,智能手机如何抢回“失去的一个月”
  5. html目录参数加密,从HTML文件中取出JS加密需要的参数,并调用js内的加密算法
  6. 解决HP t5335z瘦客户机休眠问题
  7. Maven -- dependency详解
  8. python结合mysql 购物管理系统
  9. 最新BXP2006无盘教学办公系统
  10. 微软office办公系列软件的具体用处及办公作用说明指南
  11. synctoy 自动运行_安排SyncToy在Windows 7中使用Task Scheduler自动运行
  12. Civil 3d中的mms文件
  13. 程序员高效的准备HR面试
  14. 采用DotAsterisk(点星PBX)系统组建跨地区总公司和分公司之间的免费VoIP电话呼叫
  15. 透过“500家门店计划”,看华为的“全屋智能”野心
  16. 《屏幕上的聪明决策》:4星。人类在手机/电脑上做选择的心理学研究的综述。不流畅的文本有助于理解和记忆,淘汰赛制可以有效降低选择后懊悔。...
  17. 【AD小知识】PCB快速开窗的方法
  18. 未找到要求的 from 关键字_临沂网站关键字优化工具
  19. 听听Vitalik对token设计的看法
  20. 罗克韦尔 Rockwell RSLogix 500 Crack

热门文章

  1. Unity接入越南社交软件Zalo登录(Android)之SDK接入
  2. 监控平台SkyWalking9入门实践
  3. File类中的list()和listFiles()方法
  4. 应对WannaCry勒索危机之关闭445端口等危险端口——以本人Windows7系统为例
  5. 如何在阿里云上进行备案?
  6. 高频电路模拟电路课程实验配套装置
  7. 2023年第八届数维杯大学生数学建模挑战赛 A题 河流-地下水系统水体污染研究
  8. 2、Motifs and Structural Roles in Networks
  9. 评论星级 php,JS实现评价星级
  10. 中国非酒精类水果饮料市场深度研究分析报告