oracle插入包程序太大,oracle的包和大对象学习笔记

包的概念

包是存储在一起的相关对象组成的P L / S Q L结构

包有两个独立的部分,即说明部分和包体,这两部分独立地存储在数据字典中

包的类型:

自定义包:

oracle内置包:

自定义包:

包的规格说明部分:

CREATE  [OR REPLACE]  PACKAGE 

IS|AS

 -- 公有类型声明

< Public Subprogram specifications>  -- 公有子程序声明

END ;

程序包主体部分 :

CREATE  [OR REPLACE]  PACKAGE BODY

IS|AS

 -- 私有类型声明

< Private  Subprogram bodies>  -- 私有子程序体

< Private  cursor  define>   -- 私有游标定义

< putblic  Subprogram bodies>  -- 公有子程序体

< putblic  cursor  define>   -- 私有游标定义

END ;

ORACLE9i内置包

扩展数据库的功能

为 PL/SQL 提供对 SQL 功能的访问

用户 SYS 拥有所有程序包

可以由任何用户访问

DBMS_ALERT支持数据库事件的异步通知

DBMS_STANDARD提供语言工具

DBMS_DDL某些DDL命令的PL/SQL等效项

CALENDAR提供日历维护功能

DBMS_LOB操纵ORACLE的LOB数据

DBMS_OUTPUT在SQL*PLUS或服务管理器中提供屏幕输出

DBMS_PIPE会话间异步通信

DBMS_ROWID允许从ROWID获得信息

DBMS_SESSIONALTER SESSION的PL/SQL等效项

DBMS_SQL动态PL/SQL和SQL

内置包"DBMS_OUTPUT"

DBMS_OUTPUT是一个拥有几个入口点(API)的程序包,使用最多的是以下几个:

PUT----在输出缓冲区中放置一个字符串,NUMBER或DATE,而不填加新换行符;

PUT_LINE----在输出缓冲区中放置一个STRING,NUMBER或DATE字符串,并加换行符;

NEW_LINE----在输出流中放置一个新换行符;

ENABLE/DISABLE----启用或禁用程序包中的数据缓冲区,有效地从程序上打开和关闭DBMS_OUTPUT。

内置包“DBMS_STANDARD” 和"DBMS_LOB"

“DBMS_STANDARD”程序包提供帮助应用程序与ORACLE进行交互的语言工具

DBMS_LOB数据包提供了访问BLOB、CLOB、NCLOB和BFILE的例程

可以使用DBMS_LOB访问和操作完整的或部分的LOB

DBMS_LOB可以读取也可以修改BLOB、CLOB和NCLOB,而且还提供了对BFILE的只读操作

大型对象类型简介

在Oracle9i中,还可以使用附加的数据类型来存储大型数据

LOB数据类型 描述

BLOB  二进制LOB,为二进制数据,最长可达4GB,存储在数据库中

CLOB  字符LOB,字符数据,最大可达4GB,存储在数据库中

BFILE  二进制文件,存储在数据库之外的只读型二进制数据,最大长度由操作系统限制

NCLOB  支持多字节字符集合的一个CLOB类型

LOB(大型数据对象)由两个部分组成--数据和定位器

LOB数据:存储的实际数据

LOB定位器:指定数据库中对象的位置指示器

在大对象字段中插入值

初始化值

当在包含有LOB的表中插入一个记录时,可以使用DBMS_LOB包中的函数告诉Oracle对于内部存储的LOB列,生成一个空的定位器。

一个空的定位器与一个NULL值不同。如果一个内部存储的LOB列的值为NULL,则在把它更新为一个非NULL值之前,必须先把它设置为一个空的定

位器。

LOB数据类型 空定位器函数

BLOB  EMPTY_BLOB()

CLOB  EMPTY_CLOB()

NCLOB  EMPTY_NCLOB()

在数据库中要创建一个DIRECTORY对象来引用目录

语法:

CREATE DIRECTORY AS

directory:Oracle中的目录对象名

disk_path:磁盘路径

更新大对象字段

在对一个LOB数据值修改之前,必须要锁定被更新的行

通常情况下,行锁定发生在后台,由Oracle自动加锁和解锁。

如果是在更新包含有LOB数据的行,则在执行UPDATE命令之前,需要锁定该行,否则就不能更新无效。

在SELECT语句后加上FOR UPDATE子句,就可以实行对行的加锁。

显示大对象中的数据

无法通过SELECT语句显示LOB中的数据, CLOB和NCLOB数据类型除外

使用DBMS_LOB数据包操作大对象

过程或函数 描述

READ  用来读入一段LOB值的过程

SUBSTR  用来在LOB值上执行SQL SUBSTR函数的函数

INSTR  用来在LOB值上执行SQL INSTR函数的函数

GETLENGTH 用来在LOB值上执行SQL LENGTH函数的函数

COMPARE  用来比较两个LOB值的函数

WRITE  用来在一个LOB值中的指定点写入数据到此LOB值的过程

APPEND  用来在一个LOB值中的内容添加到另一个LOB值的过程

ERASE  用来删除全部或部分LOB值的过程

TRIM  用来减少一个LOB值的大小尺寸,是从值的结尾处开始删除字符或字节

COPY  用来把全部或部分的LOB值从一个LOB列复制到另一个LOB列的过程

DBMS_LOB.READ过程

过程READ读入一个LOB值中的一部分数据。过程READ有4个参数,它们按照以下的顺序来指定:

1.LOB定位器

2.欲读入的字节或字符数

3.从LOB数据起点开始的位移(即读入开始的位置)

4.从READ过程输出的数据。该参数是一个输出参数。

如果在指定的字节读入之前,遇到此LOB数据的结尾,则READ过程将返回一个错误。

需要选取检索LOB定位器数值,并把它作为参数提供给READ过程,最后通过DBMS_OUTPUT显示读入的文本书。

举例:对于WORK_TYPE表中,读取CRITERION字段的前8个字符

DBMS_LOB.SUBSTR函数

包DBMS_LOB中的SUBSTR函数在一个LOB数据值上执行SQL SUBSTR函数。

此函数具有三个输入参数,且必须按照下面的顺序来指定:

1.LOB定位器

2.欲读入的字节或字符个数

3.从此LOB数据值开始处计算的位移(即读入的开始位置)

由于SUBSTR是一个函数,所以与READ过程不同,将不会有输出变量值,直接从SUBSTR中返回。

DBMS_LOB.INSTR函数

INSTR函数在一个LOB数据值上执行函数SQL INSTR。函数INSTR有四个参数,且必须按照如下顺序指定:

1.LOB定位器

2.对应LOB数据值的测试模式(对于BLOB为RAW字节,      CLOB为字符串)

3.从此LOB数据值起始处开始的位移(读入操作的起点)

4.在此LOB数据值中出现的某个模式

INSTR函数搜索LOB数据以寻找由字节或字符构成的特定模式,函数返回的是在被检索的字符串中此模式的起始位置。

例如:INSTR(’ABCABC’,’A’,1,1)。

GETLENGTH函数返回某个LOB数据值的长度。这个函数只需要一个参数,就是LOB定位器。

DBMS_LOB.COMPARE函数

COMPARE函数对两个LOB的值作比较。如果这两个LOB的值相同,则COMPARE函数返回一个值0;否则它将返回1个非0的整数(通常为1或-1)。

为了执行COMPARE函数,DBMS_LOB包必须执行两个READ函数并比较其结果。所以,对于每个欲被比较的LOB数据值,需要分别提供其定位器的值

或位移(offset)值;而对于这两个LOB数据值来说,要比较字节或字符串个数是相同的。

COMPARE函数只能比较相同数据类型的LOB。

COMPARE函数有5个参数,它们必须按照下面的顺序指定:

1.对应第一个LOB定位器

2.对应第二个LOB定位器

3.总数变量(即需要比较的字节或字符个数)

4.从第一个LOB值起始处算起的位移(即读操作的起始点)

5.从第二个LOB值起始处算起的位移(即读操作的起始点)

由于被比较的两个LOB具有不同的位移值,所以能够将一个LOB值中的某一部分与另外一个不同的LOB值中的另外不同的部分作比较。

DBMS_LOB.WRITE过程

WRITE过程允许在LOB中指定的位置写入数据。例如,可以在一个BLOB列的某一部分中写入二进制数据,并覆盖掉已有的数据。也可以使用WRITE

过程写入字符数据到CLOB中。此过程有4个输入参数,并且必须按照下面的顺序指定:

1.此LOB的定位器

2.总数变量(即要写入的字节或字符个数)

3.从LOB值的起始处算起的位移(即写操作的起始点)

4.分配被写入的字符串或二进制数据的缓冲区变量

由于WRITE过程会更新LOB的值,所以必须用SELECT FOR UPDATE命令来锁定行数据。

DBMS_LOB.APPEND过程

APPEND过程把1个LOB中的数据添加到第2个LOB中。由于需要对1个LOB值进行更新操作,所以在执行APPEND过程前,被更新的记录必须要锁定。

这个过程需要两个参数,并且必须按照下面的顺序指定:

1.目的LOB的定位器

2.源LOB的定位器

如果这两个参数都是NULL值,APPEND过程将返回1个错误。

DBMS_LOB.ERASE过程

ERASE过程来删除一个LOB中任何位置的字符(串)或字节。可以使用ERASE来删除整个LOB值,也可以指定此LOB中哪个部分被删除。在功能上

ERASE与WRITE很相似。如果删除一个BLOB值中的数据,则代之以空格填充此CLOB。由于对一个LOB值执行了更新,所以应该遵从LOB更新的标准

过程―即锁定数据行和当过程结束时提交记录。此ERASE过程有3个参数,顺序为:

1.LOB的定位器

2.总数变量(即要删除的字节或字符个数)

3.从此LOB值开始计数的位移(即删除的开始处)

DBMS_LOB.TRIM过程

TRIM过程来减少一个LOB值的大小尺寸,是从值的结尾处开始删除字符或字节(与SQL RTRIM函数类似)。该过程更新LOB列,所以需要锁定和解

锁。TRIM过程需要2个参数,顺序如下:

1.LOB的定位器

2.此LOB的新长度

DBMS_LOB.COPY过程

COPY可以把一个LOB中的某一部分数据拷贝到另一个LOB中。与APPEND过程不同,并不需要把一个LOB的全部数据拷贝到另一个LOB中。在COPY过

程中,可以指定读出和写入操作的位移。COPY过程需要5个参数,依次为:

1.目的LOB的定位器

2.源LOB的定位器

3.总数(即要拷贝的字节或字符个数)

4.在目的LOB值中欲开始写入数据的位移

5.在源LOB值中开始读入的位移

COPY是READ和WRITE能力的结合。与WRITE过程相同,COPY过程改变了LOB值。所以必须首先被锁定,并且在执行完成后要用一条COMMIT命令解锁

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值