欢迎来到天天文库
浏览记录
ID:6206456
大小:31.50 KB
页数:9页
时间:2018-01-06
《浅议oracle数据库视图应用技巧》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库。
1、浅议Oracle数据库视图应用技巧 摘要:本文介绍了视图的定义、分类和基本功能,并结合开发设备材料管理系统的实际情况,从Oracle数据库本身的特点出发,深入阐述了视图在数据统计、计算、查询、更新等方面的设计方法和应用技巧,通过视图技术的灵活巧妙应用更加完善了应用系统的功能。关键词视图存储过程虚拟列关联更新中图分类号:C37文献标识码:A引言Oracle数据库作为目前世界上最通用的数据库系统之一,已经在多个领域得到了广泛的应用,视图是它最基本的、也是最重要的功能之一。视图是基于一个表或多个表或视图的逻辑表,本身不包含数据,也可以看作是虚拟表或存储查询,通过它可以对表里面的数据进行查询
2、和修改。可通过视图访问的数据不作为独特的对象存储在数据库内,数据库内存储的是SELECT语句。用户可以用引用表时所使用的方法,在SQL语句中通过引用视图名称来使用虚拟表。2视图的分类2.1表视图9视图的数据从单个基本表中取部分行、列,视图行列与基本表行列对应,这样定义的视图可以进行查询和更改数据操作;或者取自多个基本表中,这样定义的视图一般只用于查询。2.2在已有视图上定义的新视图在一个或者多个视图上再建立视图,或者在几个表和视图上建立视图,这时作为数据源的视图必须是已经建立好的。2.3带表达式的视图在定义基本表时,为减少数据库中的冗余数据,表中只存放基本数据,由基本数据经过各种计算派
3、生出的数据一般是不存储的。但由于视图中的数据并不实际存储,所以定义视图时可以根据需要设置一些派生属性列,在这些派生属性列中保存经过计算的值。这些派生属性由于在基本表中并不实际存在,因此,也称它们为虚拟列。包含虚拟列的视图称为带表达式的视图[1]。2.4含分组统计信息的视图用带有SUM、AVG、COUNT等聚集函数和GROUPBY子句的查询语句定义的视图,这样的视图只能用于查询,不能用于修改数据。3视图的基本功能3.1视图的安全保护功能9视图可以对数据提供安全保护,将用户限定在表中的特定行或者列上,使数据只出现在有权限看到这些数据的用户的视图上。3.2视图的数据隐藏功能视图可以隐藏数据的
4、复杂性。Oracle数据库由许多表组成,视图可以将多个表或者视图中的列联接起来,使它们看起来象一个表,同时维护了数据的独立性。3.2视图的独立性视图保证了应用程序一定的独立性。如果组成视图任一个基础表中增加了一列,这对视图的定义不产生影响,也不会影响涉及到此视图的应用程序。4视图的应用实际的系统开发中,视图的功能却可以有更多的延伸和扩展,下面结合已开发的设备材料管理系统,深入阐述数据库视图在系统开发中的具体应用。4.1较复杂剩余量的统计及计算问题设备材料管理系统中的入库信息是根据合同里的采购信息生成的,每个合同中的采购明细可以有多条记录,每次办理入库时,入库的物资可以是某个合同中未入库
5、的任何一种或几种物资,入库数量不能超过合同数量减去已入库物资数量的剩余量,如何由数据库来自动计算出合同的剩余量?(1)SQLSever数据库解决方案可以通过视图和存储过程相结合来计算。为了使问题看起来更简洁,例子中只列出最主要的几个字段。9首先,建立视图V_inStore_total从入库信息中统计出合同入库中每种物资的入库量合计:CREATEVIEWV_inStore_totalASSELECTa.contra_coding,a.mater_coding,sum(a.inStore_amount)asinStore_amountFROMT_inStore_listaGROUPBYa.
6、contra_coding,a.mater_coding;接下来,建立视图V_not_inStore计算出有入库记录的物资还未办理完入库的物资的剩余合同数量:CREATEVIEWV_not_inStoreASSELECTa.contra_coding,a.mater_coding,(a.contra_amount-b.inStore_amount)ascontra_amountFROMT_purchase_lista,V_inStore_totalbWHEREa.contra_coding=a.contra_codinganda.mater_coding=b.mater_coding;
7、最后,建立存储过程P_contra_remain_amount,把合同中有入库记录但未全部入库的物资的剩余合同数量和从未办理过入库的物资的合同数量合并,即为该合同还能入库的物资及数量:9CREATEPROCEDUREP_contra_remain_amount@contra_codingvarchar(14)=‘100’ASSELECTa.contra_coding,a.mater_coding,a.contra_amountFROMT_pur
此文档下载收益归作者所有