网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > 数据库 > Oracle教程
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
数据库:数据库教程,数据库技巧,Oracle教程,MySQL教程,Sybase教程,Access教程,DB2教程,数据库安全,数据库文摘
本月文章推荐
.轻松学习贯穿Oracle的25条基本知.
.DBA必须熟悉的、最有用的DBA视图.
.如何在相对空闲的rac实例中强制自.
.实例讲解"Oracle"数据库的分页显.
.Oracle 10g R2特性之数据仓库和集.
.新手上路:Oracle基础工具简介.
.为什么我在配置文件里面指定Erro.
.我的备份与恢复实验 (归档模式下.
.从调优强迫症中恢复过来.
.Oracle数据库诊断案例-redo log日.
.Oracle 的位图索引.
.在复杂应用环境下监控 ORACLE 数.
.Oracle Database与Oracle Instan.
.Oracle中SQL语句执行效率的查找与.
.ORACLE在HP-UX下的系列问题处理(.
.带你深入了解Oracle数据库的热备.
.Oracle数据库网络与安全之FAQ汇集.
.网友经验谈之Oracle外部程序触发.
.Oracle 9i新特性研究六(闪回查询).
.在T-SQL中实现Oracle的MINUS集合.

在Oracle9i Release 2中使用PL/SQL的集合增强

发表日期:2008-2-9



  Oracle Release 2提供对PL/SQL集合的增强,它可以通过以前的发布版本进行代码维护。例如,你可以在Release 2中将PL/SQL集合用作一个单一的参数,从而避免了使用一长串的域作为参数。
  
  另外一个优点是记录的集合现在可以是BULK COLLECTION INTO子句的目标。在Release 2以前,我们必须为返回的每个列创建一个集合。例如:
  
  Declare
    type deptno_coll is table of dept.deptno%type;
    type dname_coll is table of dept.dname%type;
    type loc_coll is table of dept.loc%type;
    deptno_listdeptno_coll;
    dname_listdname_coll;
    loc_listloc_coll;
  begin
    select * bulk collect into deptno_list,dname_list,loc_list from dept;
  end;
  
  在Release 2中,可以用下面的代码实现同样的功能:
  
  Declare
    type dept_coll is table of dept%rowtype;
    dept_listdept_coll;
  begin
    select * bulk collect into dept_list from dept;
  end;
  
  注重这里不再有对列名的引用。假如DEPT表的列的个数或者名字被修改,你也不需要对第二段示例代码进行改动。这段代码还比旧版本易于维护。然而,应用程序需要一个Release 2数据库来编译。
  
  现在你可以使用记录以集合方式将一行数据插入到一个表中。在Release 2之前,你必须插入到表中一个PL/SQL记录然而再单独地确定每一列,作法如下:
  
  Declare
    dept_rowdept%rowtype;
  begin
    /* populate dept_row . . . */
    insert into dept values (dept_row.deptno,dept_row.dname,dept_row.loc);
  end;
  
  而在Release 2中你可以将插入语句简化为如下的语句:
  
    insert into dept values dept_row;
  
  记录可以以集合方式更新一个表中的数据。像插入语句一样,你以前必须单独地更新每一列:
    update dept
      set deptno = dept_row.deptno,
        dname = dept_row.dname,
         loc = dept_row.loc
     where deptno = dept_row.deptno;
  
  而在Release 2中,你可以根据在记录中的位置来更新整条数据:
  
    update dept set row = dept_row where deptno = dept_row.deptno;
  
  (注重“SET ROW”是一个新子句。)
  
  你可以使用记录从DML语句的RETURNING子句中提取信息。通常在更新数据的时候保持一个本地副本以备后面的PL/SQL操作会比较有用。在Release 2以前,我们可以在计算和调用完成之后使用RETURNING子句将数据存储到某个地方。而在Release 2中,你可以把数据存储到一条记录中。例如,下面是Release 2之前的作法:
  
  Declare
    foorowfootab%rowtype;
  begin
    insert into footab (foono,fooname) values (fooseq.nextval,'Foo')
     returning foono,fooname into foorow.foono,foorow.fooname;
  end;
  
  而现在你可以把插入语句简化为:
  
    insert into footab (foono,fooname) values (fooseq.nextval,'Foo')
      returning foono,fooname into foorow;
  
  这些增强使得语法更加易读,并能帮助我们避免由于在返回语句中将表匹配错误所引起的程序错误。但是要记住这些增强要依靠于表和记录中第一列的物理位置。假如一个表的列的位置发生改变,那么列的顺序也会改变。因此,在一个数据库表中使用ROWTYPE匹配列比显式地列出列名要好。
上一篇:如何分析SQL语句 人气:686
下一篇:日常监测分析数据库的DBA_Monitor.sql程序 人气:677
浏览全部Oracle教程的内容 Dreamweaver插件下载 网页广告代码 祝你圣诞节快乐 2009年新年快乐