PL/SQL编程经验小结

转载 2007年09月22日 21:29: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)来取数据,这样的处理速度会提升很多。 

转 PL/SQL编程经验小结

平时在PL/SQL中的编程中遇到一些问题,这里以问答的形式来进行把它们总结下来,以供大家分享。        1、当需要向表中装载大量的数据流或者需要处理大量的数据流的时候,能否使用管道提高处理效...
  • AddisonDing
  • AddisonDing
  • 2012年09月22日 11:17
  • 236

PL/SQL 基本语法

PL/SQL介绍PL/SQL是Oracle对标准数据库语言SQL的过程化扩充,它将数据库技术和过程化程序设计语言联系起来,是一种应用开发语言,可使用循环,分支处理数据,将SQL的数据操纵功能与过程化语...
  • u012414590
  • u012414590
  • 2017年04月06日 17:33
  • 2874

PL/SQL基础(1):语法

目录 1、什么是PL/SQL? 2、PL/SQL基本结构 3、PL/SQL符号定义 4、PL/SQL数据类型 5、PL/SQL条件句法 6、PL/SQL循环 什么是PL/SQL? PL/SQL...
  • dou3516
  • dou3516
  • 2016年09月03日 19:29
  • 707

半个月实训总结

心境变化 来了南京东软培训已有半个月,这半个月学习了一个星期的Oracle数据库,一个星期的Java,Oracle数据库加固了自己的SQL语句,主要对于查询语句有了更深的理解,如《收获不止Oracl...
  • u012157999
  • u012157999
  • 2015年07月19日 22:46
  • 589

PL/SQL简介与简单实用

一、PL/SQL简介: (1)PL/SQL俗称过程化SQL语言(Procedural Language/SQL),是Oracle对SQL的 过程化扩充 而形成的程序开发语言。在普通SQL语句的使用...
  • super_YC
  • super_YC
  • 2017年04月03日 04:59
  • 363

PL/SQL的可用注册码

注册码: Product Code:4t46t6vydkvsxekkvf3fjnpzy5wbuhphqz serial Number:601769 password:xs374ca 在...
  • sundacheng1989
  • sundacheng1989
  • 2016年10月20日 17:26
  • 3013

编程经验小结

 1、采用最自然、最简单的设计。只在必要时才采用精巧的设计。2、平时编程和测试中遇到的错误,一定要清除,否则留到最后,成为难以琢磨的错误,到用户反馈回来再追踪,要花几倍甚至十几倍的功夫。  (这是教训...
  • csb_tom_new
  • csb_tom_new
  • 2007年01月06日 14:41
  • 375

PL/SQL练习题一(基础)

Display the employee records who joins the department before their manager? SELECT emp1.* FROM EMPLO...
  • OnlyQi
  • OnlyQi
  • 2016年04月09日 11:47
  • 1821

在pl/sql中使用exp/imp工具实现oracle数据导出/导入

在pl/sql中使用exp/imp工具实现oracle数据导出/导入2006年11月19日 星期日 10:59 Oracle数据导...
  • wangyun71
  • wangyun71
  • 2006年12月07日 10:09
  • 1639

PL/SQL简单使用——导入、导出数据表

使用PL/SQL导出、导入表在使用PL/SQL操作oracle数据库时,经常使用的一个操作就是将自己写的数据表导出,或者想把他人的数据表导入到自己的数据库中。虽然是很简单的操作,但自己之前一直出错,所...
  • suifengbanshui
  • suifengbanshui
  • 2017年05月18日 08:30
  • 4659
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:PL/SQL编程经验小结
举报原因:
原因补充:

(最多只允许输入30个字)