Oracle9iPL/SQL编程的经验小结
来源:asp之家 发布时间:2010-07-23 12:49:00
平时在PL/SQL中的编程中遇到一些问题,这里以问答的形式来进行把它们总结下来,以供大家分享。
1、当需要向表中装载大量的数据流或者需要处理大量的数据流的时候,能否使用管道提高处理效率?
管道函数对于改善并行查询的性能非常方便,它加快往表中加载数据的速度。管道函数的使用总结如下两点:
每当在查询里使用PL/SQL函数时,该查询将被序列化,即一个处理器只能运行一个查询实例,那么在这种情况下不可能使用并行查询(比如在数据仓库中要经常使用这项技术)。因此,为了使用并行查询就必须使用管道函数,这样也就加快了执行的速度。
管道函数的输入参数必须是一个引用记录集类型(即ref cursor),而返回的是嵌套表类型(其表中每一行对应每一个引用记录)。在使用管道函数之前,必须先在程序头写上PARALLEL_ENABLE,这样才能在查询语句中使用管道函数来处理了。
2. 如何使PL/SQL程序等待一段时间执行?
方法就是使用DBMS_LOCK包的SLEEP函数,可以进行精确定时,其语法为:
DBMS_LOCK.SLEEP (seconds IN NUMBER);
3.需要在一张表插入一条记录之后等若干秒后再执行另外一个操作,如何在PL/SQL程序里进行定时操作?
一般的做法是用循环作延迟,利用 DBMS_UTILITY的gettime函数来检测当前的时间,程序代码如下:
DECLARE
v_delaytime CONSTANT INTEGER := 100;
v_starttime INTEGER ;
v_endtime INTEGER ;
BEGIN
V_starttime := DBMS_UTILITY.get_time;
V_endtime := DBMS_UTILITY.get_time;
While abs(V_endtime- V_starttime)< v_delaytime loop
/*空循环或者简单的耗时执行语句*/
End loop;
END;
/
另外如果是不同会话(session)之间的定时,就必须使用DBMS_PIPE包的函数来实现会话间的消息传递。
4.当PL/SQL返回一个数据集的时候,该使用集合还是游标?
一般情况下,有以下两点作为依据:
1) 如果PL/SQL程序返回多多行数据给另外一个PL/SQL程序的话,这里就建议使用集合,因为这样可以利用集合的批收集(bulk collection)来提高从数据库提取数据的速度。
2) 如果需要在PL/SQL程序的环境中把数据返回到宿主语言环境中(如Sql*plus,c,delphi等),这时应该使用游标变量来返回这些数据,因为几乎所有的宿主语言都支持游标变量,但不是所有的宿主语言都支持集合。这样可以增强程序的可移植性。
5.如何更有效的在PL/SQL中使用游标?
游标是PL/SQL中一个非常重要的概念,对数据库的检索主要依靠游标来操作。在PL/SQL中有两类游标,一类是隐式游标,如select clno into v_clno from table_detail.另外一类是显式游标,如cursor v_cur is select clno from table_detail。对于游标的使用这里给出以下几点建议:
1) 尽可能的使用bulk collection。它能够较大的提高运行性能,在Oracl9i的第二版,甚至可以使用bulk collection来直接将数据写入到记录表
2) 尽量使用显式游标来处理,因为相对于隐式游标来说,显式游标的速度更快一些。
3) 如果查询的表很小或者是静态的,可以把该表缓存到一个包级的集合里。这样,你的查询函数就直接从集合里(即进程全局区,PGA cache),而不是从系统全局区(SGA)来取数据,这样的处理速度会提升很多。
猜你喜欢
- 大家好,我叫斑马纹列表中使用两种相同的样式但颜色不同的背景,来间隔显示的内容。当然这个释义我是借鉴《designing interfaces
- 邻近算法,或者说K最近邻(kNN,k-NearestNeighbor)分类算法是数据挖掘分类技术中最简单的方法之一。所谓K最近邻,就是k个最
- wheel文件Wheel和Egg都是python的打包格式,目的是支持不需要编译或制作的安装过程,实际上也是一种压缩文件,将.whl的后缀改
- 最近遇到这样一个问题,在页面上要显示一段自定义的文本,文本如果较长的话需要换行显示。在HTML中可以通过<br/>标签换行,也可
- 学习前言在SSD的框架中,除去tfrecord处理是非常重要的一环之外,slim框架的使用也是非常重要的一环,于是我开始学习slim啦sli
- 一、DataLoader理解在深度学习模型训练中,数据的预处理和读取是一个非常重要的问题。PyTorch作为深度学习框架之一,提供了Data
- 如下所示:# the basic ways = 0for x in range(10): s += x# the right ways =
- 1.SQL Server2019安装包下载1.1进入官网SQL Server 20191.2下载安装包1点击Continue2.填写个人信息
- 一、概述Python Flask是一个轻量级的Web应用程序框架,它是使用Python编写的,用于快速开发Web应用程序和API。它的设计理
- 当单台MYSQL服务器无法满足当前网站流量时的优化方案。需要搭建mysql集群技术。一、功能:当向主服务器插入|修改|删除数据时,数据会自动
- 本文实例讲述了Python数据分析之双色球统计两个红和蓝球哪组合比例高的方法。分享给大家供大家参考,具体如下:统计两个红球和蓝球,哪个组合最
- Python2 和 Python3 是不兼容的,如果碰到无法升级到 Python2 代码,或者同事中有坚守 Python2 阵营的情况,就要
- XML即可扩展标记语言(eXtensible Markup Language)。标记是指计算机所能理解的信息符号,通过此种标记,计算机之间可
- JPGjpg全名是JPEG 。JPEG 图片以 24 位颜色存储单个光栅图像。JPEG 是与平台无关的格式,支持最高级别的压缩,不过,这种压
- 如何向 pandas.DataFrame 添加新的列或行通过指定新的列名/行名来添加,或者用pandas.DataFrame的assign(
- Python的环境变量环境变量说明PYTHONSTARTUP在交互式启动时执行的文件(无默认值)PYTHONPATH‘:' - 以默
- 从百度查到在django中,使用post方法时,需要先生成随机码,以防止CSRF(Cross-site request forgery)跨站
- 阅读上一篇:FrontPage2002简明教程五:css样式表的应用 用户可以快速和容易地创建图片库,以显示图片或图像。他们可以将图像添加到
- gRPCgRPC远程过程调用框架是基于动作的模式,类似远程调用微服务。这使得gRPC成为一种围绕Protobufs构建的进程间通信(IPC)
- 5位数日期戳读取 .mat 文件处理里面数据时,发现里面的日期数据全部都是 “5位数” 数字,很不解;后来查到可以在excel中通过设置单元