ASP教程之ORACLE中LOB字段的利用和保护
Windows本身的所有问题都会一成不变的也累加到了它的身上。安全性、稳定性、跨平台性都会因为与NT的捆绑而显现出来;oracle择要:本文经由过程实例先容了在ORACLE数据库中经由过程DBMS_LOB包利用和保护LOB数据范例的基础办法。关头词:ORACLEDBMS_LOBLOB保护
中图分类号:TP31
1、弁言
跟着社会的开展,在古代信息体系的开辟中,必要存储的已不单单是复杂的笔墨信息,同时还包含一些图片和音像材料大概是超长的文本。好比开辟一套旅游信息体系,每个景点都有丰厚的图片、音像材料和大批的笔墨先容。这就请求背景数据库要有存储这些数据的才能。ORACLE公司在其Oracle8i中经由过程供应LOB字段完成了该功效。
为了便于读者的了解,我们先先容一些基础的观点:
在ORACLE数据库中,LOB(LargeObjects―年夜工具)是用来存储大批的二进制和文本数据的一种数据范例(一个LOB字段可存储可多达4GB的数据)。今朝,它又分为两品种型:外部LOB和内部LOB。外部LOB将数据以字撙节的情势存储在数据库的外部。因此,外部LOB的很多操纵都能够介入事件,也能够像处置一般数据一样对其举行备份和恢复操纵。Oracle8i撑持三品种型的外部LOB:BLOB(二进制数据)、CLOB(单字节字符数据)、NCLOB(多字节国度字符数据)。个中CLOB和NCLOB范例合用于存储超长的文本数据,BLOB字段合用于存储大批的二进制数据,如图象、视频、音频等。今朝,Oracle8i只撑持一种内部LOB范例,即BFILE范例。在数据库内,该范例仅存储数据在操纵体系中的地位信息,而数据的实体之外部文件的情势存在于操纵体系的文件体系中。因此,该范例所暗示的数据是只读的,不介入事件。该范例可匡助用户办理大批的由内部程序会见的文件。
为了便利下文的叙说,我们假定利用以下语句在数据库中创立了一张表。
CREATETABLEview_sites_info
(
site_idNUMBER(3),
audioBLOBDEFAULTempty_blob(),
documentCLOBDEFAULTempty_clob(),
video_fileBFILEDEFAULTNULL,
constraintPK_TAB_view_sites_infoprimarykey(site_id)
);
2、LOB的利用和保护
ORACL供应了多种利用和保护LOB的体例,如利用PL/SQLDBMS_LOB包、挪用OCI(OracleCallInterface)、利用Proc*C/C++、利用JDBC等。个中最为便利无效的是利用PL/SQL挪用DBMS_LOB包,本文就将先容该办法。
在Oracle中,存储在LOB中数据称为LOB的值,如利用Select对某一LOB字段举行选择,则前往的不是LOB的值,而是该LOB字段的定位器(能够了解为指向LOB值的指针)。如实行以下的SQL语句:
DELCARE
AUDIO_INFOBLOB;
BENGIN
SELECTaudioINTOAUDIO_INFOFROMview_sites_info
WHEREsite_id=100;
END;
/
存储在AUDIO_INFO变量中的就是LOB定位器,而不是LOB的值。而要对某一LOB的值举行会见和保护操纵,必须经由过程其定位器来举行。DBMS_LOB包中供应的一切函数和历程都以LOB定位器作为参数。
2.1外部LOB
DBMS_LOB包中次要供应了以下几个历程供用户对外部LOB字段举行保护。
APPEND()将源LOB中的内容加到目标LOB中
COPY()从源LOB中复制数据到目标LOB
ERASE()删除LOB中全体或部份内容
TRIM()将LOB值削减到指定的长度
WRITE()向LOB中写进数据
COMPARE()对照两个同种数据范例的LOB的部分或全体值是不是不异
GETLENGTH()猎取LOB的长度
READ()从LOB中读出数据
上面我们以最为经常使用的读和写为例具体先容这些历程的用法。
起首先容一下写历程。该历程的语法为:
PROCEDUREWRITE(
lob_locINOUTBLOB,
amountINBINARY_INTEGER,
offsetININTEGER,
bufferINRAW);
PROCEDUREWRITE(
lob_locINOUTCLOBCHARACTERSETANY_CS,
amountINBINARY_INTEGER,
offsetININTEGER,
bufferINVARCHAR2CHARACTERSETlob_loc%CHARSET);
各参数的寄义为:
lob_loc:要写进的LOB定位器
amount:写进LOB中的字节数
offset:指定入手下手操纵的偏移量
buffer:指定写操纵的缓冲区
上面的代码就是使用该历程向LOB字段写进数据的示例。
DECLARE
loblocCLOB;
bufferVARCHAR2(2000);
amountNUMBER:=20;
offsetNUMBER:=1;
BEGIN
--初始化要写进的数据
buffer:=Thisisawritingexample;
amount:=length(buffer);
SELECTdocumentINTOlobloc--猎取定位器并锁定行
FROMview_sites_info
WHEREsite_id=100FORUPDATE;
dbms_lob.write(lobloc,amount,1,buffer);
COMMIT;
END;
/
必要出格指出的是:
I.在挪用写历程前必定要利用SELECT语句检索到定位器且用FORUPDATE子句锁定行,不然不克不及更新LOB;
II.写历程从offset指定的地位入手下手,向LOB中写进长度为amount的数据,原LOB中在这个局限内的任何数据都将被掩盖。
III.缓冲区的最年夜容量为32767字节,因而在写进大批数据时需屡次挪用该历程。
上面再来先容一下读历程:
该历程的语法为:
PROCEDUREREAD(
lob_locINBLOB,
amountINOUTBINARY_INTEGER,
offsetININTEGER,
bufferOUTRAW);
PROCEDUREREAD(
lob_locINCLOBCHARACTERSETANY_CS,
amountINOUTBINARY_INTEGER,
offsetININTEGER,
bufferOUTVARCHAR2CHARACTERSETlob_loc%CHARSET);
各参数的寄义为:
lob_loc:要读取的LOB定位器
amount:要读取的字节数
offset:入手下手读取操纵的偏移量
</p>优点:简单易学、开发速度快、有很多年“历史”,能找到非常多别人做好的程序来用、配合activeX功能强大,很多php做不到的asp+activeX能做到,例如银行安全控件 用户端的浏览器不需要提供任何别的支持,这样大提高了用户与服务器之间的交互的速度。 掌握asp的特性而且一定要知道为什么。 我可以结合自己的经验大致给你说一说,希望对你有所帮助,少走些弯路。 ASP.Net和ASP的最大区别在于编程思维的转换,而不仅仅在于功能的增强。ASP使用VBS/JS这样的脚本语言混合html来编程,而那些脚本语言属于弱类型、面向结构的编程语言,而非面向对象,这就明显产生以下几个问题: 我想问如何掌握学习节奏(先学什么再学什么)最好详细点? 兴趣爱好,那么你无须学编程,申请一个域名和空间,在网上下载一些免费开源的CMS系统,你不用改代码,只须熟悉它们的后台操作,像office一样简单方便,很快就能建一个站点,很多站长都是这样做的 Server:这个表示的服务器,操作服务器的一些东西使用这个,如Server.Mappath转换服务器路径,Server.CreateObject实例化一个组件 我就感觉到ASP和一些常用的数据库编程以及软件工程方面的思想是非常重要的。我现在也在尝试自己做网页,这其中就用到了ASP,我想它的作用是可想而知的。
页:
[1]