惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Simon Willison's Weblog
Simon Willison's Weblog
Help Net Security
Help Net Security
P
Privacy International News Feed
T
Threat Research - Cisco Blogs
C
Cisco Blogs
C
CERT Recently Published Vulnerability Notes
NISL@THU
NISL@THU
L
LINUX DO - 热门话题
Security Latest
Security Latest
A
Arctic Wolf
G
GRAHAM CLULEY
月光博客
月光博客
S
Securelist
D
Docker
J
Java Code Geeks
T
Troy Hunt's Blog
T
Tenable Blog
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
SecWiki News
SecWiki News
S
Security @ Cisco Blogs
量子位
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
L
LINUX DO - 最新话题
Recent Commits to openclaw:main
Recent Commits to openclaw:main
aimingoo的专栏
aimingoo的专栏
博客园 - 【当耐特】
H
Heimdal Security Blog
The Hacker News
The Hacker News
博客园 - 三生石上(FineUI控件)
Application and Cybersecurity Blog
Application and Cybersecurity Blog
N
Netflix TechBlog - Medium
Vercel News
Vercel News
Forbes - Security
Forbes - Security
B
Blog RSS Feed
H
Hackread – Cybersecurity News, Data Breaches, AI and More
IT之家
IT之家
B
Blog
MongoDB | Blog
MongoDB | Blog
博客园 - 聂微东
Google DeepMind News
Google DeepMind News
S
Secure Thoughts
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
C
Check Point Blog
云风的 BLOG
云风的 BLOG
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
T
The Blog of Author Tim Ferriss
L
Lohrmann on Cybersecurity
F
Full Disclosure
D
Darknet – Hacking Tools, Hacker News & Cyber Security
P
Proofpoint News Feed

博客园 - 笨笨

BlogJava好像不能贴图 应聘技巧 .net 代码生成 报表相关链接 WebWork2相关链接 Oracle 系统package Oracle基本数据类型存储格式浅析(一)——字符类型 RenderX java的xml打印 用 Preferences API 存储对象 hibernate and spring links JavaScript的Prototype实现 Eclipse 运行命令行参数大全 js调试 嵌套表和可变数组 Spring 调用ORACLE存储过程的结果集 http://www.cnoug.org/viewthread.php?tid=9292 使用jsp实现word、excel格式报表打印 用户中心 - 博客园 使用工具类实现通用分页处理
[Oracle] PL/SQL集合增强
笨笨 · 2005-02-01 · via 博客园 - 笨笨

[Oracle] PL/SQL集合增强
Builder.com
29/12/2004
URL: http://www.zdnet.com.cn/developer/database/story/0,3800066906,39265363,00.htm

本文译自Builder.com,未经许可请勿转载

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_list deptno_coll;
    dname_list dname_coll;
    loc_list loc_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_list dept_coll;
begin
    select * bulk collect into dept_list from dept;
end;

注意这里不再是对字段名的引用。如果DEPT 表的字段个数或者名称被修改,也不需要对第二段示例代码进行改动。这段代码还比旧版本易于维护。然而,应用程序需要一个Release 2 数据库来编译。

现在可以使用记录以集合方式将一行数据插入到一个表中。在Release 2 之前,必须插入到表中一个PL/SQL 记录然后再单独地确定每一个字段,作法如下:

Declare
    dept_row dept%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
    foorow footab%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 匹配字段比显式地列出字段名要好。


本文作者:Scott Stephens已经在Oracle工作了13年有余,他曾经在技术支持、电子商务、市场和软件开发等部门工作。更多Scott Stephens 的 Oracle 技巧,请访问我们的Oracle Dev Tips Library.


责任编辑:

李宁