Oracle数据库处理多媒体信息
正在看的ORACLE教程是:Oracle数据库处理多媒体信息。 引文: 长期以来,多媒体信息在计算机中都是以文件形式存放,由操作系统管理的,但是随着计算机网络,分布式计算的发展,对多媒体信息进行高效的管理,存取,查询已经成了一种迫切需求。而关系数据库却有着强大的数据管理能力。两方面结合,多媒体数据库由此应运而生。本文将就Oracle对多媒体信息进行处理的方式,工具,特色以及一些基本原理做一个综述。 但是我们不能不遗憾的看到,现有数据库对一些多媒体数据所特有的操作能力还是很有限的。针对多媒体数据库的性能调优现在也遇到了新的问题。虽然如此,多媒体数据库仍旧产生了广阔的应用价值和前景。
[NextPage] 三.多媒体大对象存取例程举例 按照如下步骤来完成各个操作: (1)先建立一个数据库表: createtablelobdemo(keyNUMBERKEY,clob_colCLOB,blob_colBLOB,bifle_colBFILE); 这个数据库第一列存储一个码,另外三列存储lob型数据。 (2)表建好以后,往表中插入一条数据: insertintolobdemo(key,clob_col,blob_col,bfile_col)values(10,'abcdefghijklmnopqrsatuvwxyzasdffasfsdafsdafsdfadfsadfsdfsdfdsdsffds',empty_blob(),null); 在这一条数据中,第二列我们插入一个字符串,它被格式化为clob类型数据进行存储;第二列我们使用empty_blob()函数来初始化一个定位符,以后就可以获取这个定位符进行比如select,update等操作了;第三列赋空值,它并没有获得一个定位符,这是与empty_blob()函数的区别。 (3)查询插入表中的数据 selectblob_colfromboldemowherekey=20; 注意:这一sql语句的返回结果是一个定位符(locator),而不是实际的数据本身。 (4)修改数据库中数据 updatelobdemoSETblob_col='aedevbagddgagdfdfasasdfdsa'wherekey=10; 从这些sql语句当中,我们看到了lob型数据处理的基本方法,发现与其他类型数据处理相似。但是sql语句中lob型数据处理的特殊性在于以下方面: (1)bfile文件的处理: bfile类型有着特殊性,跟clob,blob不同。实际的数据文件存储在操作系统的外面:所以有两个特点:1.没有事务性控制2.bfile是只读的,不能用dbms_lob或oracl8oci进行修改。让我们来看对bfile的操作步骤: <1>为了访问外部文件,服务器需要知道文件在操作系统中的位置。下面我们建立一个目录: [1][2]下一页 正在看的ORACLE教程是:Oracle数据库处理多媒体信息。_FileLocator:=BFILEOPEN(p_Derectory,p_Filename); --用dbms_lob包的fileopen打开一个操作系统文件 DBMS_LOB.FILEOPEN(v_FileLocator,DBMS_LOB.FILE_READONLY); --将整个操作系统文件装入lob中 DBMS_LOB.LOADFROMFILE(v_CLOBLocator,v_FileLocator,DBMS_LOB.GETLENGTH(v_FileLocator)); ENDFileExec; 四.OracleInterMedia工具介绍 interMedia是Oracle推出的对Oracle8i多媒体功能进行扩充的一个集成部件,它使得Oracle能够更方便的管理图象、音频、视频、文本等信息。使得Oracle在internet,电子商务等领域多媒体数据的管理上可靠性与可用性增强。它包括image,audio,video三部份。interMedia使用对象类型,类似于JAVA或C++,来描述image,video类型数据,Oracle在这三类对象类型中定义了许多方法来操作这些数据,如对于image类型数据来说,你可以很方便地进行图形格式转换,压缩,拷贝,截取图形的任何一部份等,而这些是普通LOB类型数据所无法比拟的,普通sql语句也无法完成这些操作。 Internet的发展更突出了interMedia在WEB应用中的价值,现有的WEB应用绝大多数将image,video等多媒体信息存在文件系统中,其优点是操作简单,速度快,缺点是管理复杂,尤其是管理大量image时就受到目录数等的限制。如果将image保存在数据库中,由数据库来统一维护,统一备份,这样就可以简化管理。 Intermedia中定义了几个多媒体对象类型,例如ORDAUDIO就是其中一个,它提供一些audio对象类型数据的操纵函数。下面我们来看一个例子,在这个例子中我们定义一个歌曲对象,建立一个歌曲对象的表,并对该表进行插入与查询操作。 (1)定义一个歌曲对象: CREATETYPEsongObjectasOBJECT(songIdVARCHAR2(20),--歌曲号 titleVARCHAR2(4000),--题目 artistVARCHAR2(4000),--作家 awardsVARCHAR2(4000),--奖项 timePeriodVARCHAR2(20),--日期时间 txtinroductionCLOB,--简介 audioSourceORDSYS.ORDAUDIO--音频数据,这个字段由ORDAUDIO对象来定义。 ); (2)建立一个名为songtable的表: CREATETABLESongsTableofsongObject(UNIQUE(songId),songIdNOTNULL); (3)插入一行数据到SongsTable表中 INSERTINTOSongsTableVALUES('00', 'UnderPressure', 'Queen', 'noawards', '80-90', 243, NULL, EMPTY_CLOB(), ORDSYS.ORDAudio(NULL, ORDSYS.ORDSource(EMPTY_BLOB(),NULL,NULL),EMPTY_CLOB(),NULL)); 注意:。EMPTY_CLOB,EMPTY_BLOB()函数只是初始化一个lob数据定位符,而没有存储实际的数据。 (4)向SongsTable表中载入一行数据: DECLARE audioObjORDSYS.ORDAUDIO; ctxRAW(4000):=NULL; BEGIN --取得audioSource字段定位符 SELECTS.audioSourceINTOaudioObj FROMSongsTableS WHERES.songId='00' FORUPDATE; --下面的四个函数是ORDAUDIO对象的成员函数,具体功能请查看Oracle开发手册 audioObj.setSource('FILE','AUDDIR','UnderPressure.au');--设定文件 audioObj.setMimeType('audio/basic');--设定类型 audioObj.import(ctx);--载入ctx audioObj.setProperties(ctx);--设置属性 --将歌曲对象载入到数据库表中 UPDATESongsTableS SETS.audioSource=audioObj WHERES.songId='00'; COMMIT; END;
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |