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

推荐订阅源

Hugging Face - Blog
Hugging Face - Blog
Jina AI
Jina AI
宝玉的分享
宝玉的分享
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
人人都是产品经理
人人都是产品经理
博客园 - 聂微东
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
J
Java Code Geeks
博客园 - 【当耐特】
小众软件
小众软件
博客园 - Franky
S
SegmentFault 最新的问题
WordPress大学
WordPress大学
雷峰网
雷峰网
The Cloudflare Blog
酷 壳 – CoolShell
酷 壳 – CoolShell
量子位
Last Week in AI
Last Week in AI
博客园_首页
月光博客
月光博客
IT之家
IT之家
阮一峰的网络日志
阮一峰的网络日志
Webroot Blog
Webroot Blog
Stack Overflow Blog
Stack Overflow Blog
腾讯CDC
云风的 BLOG
云风的 BLOG
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
W
WeLiveSecurity
Recent Commits to openclaw:main
Recent Commits to openclaw:main
D
Docker
The Last Watchdog
The Last Watchdog
有赞技术团队
有赞技术团队
Hacker News - Newest:
Hacker News - Newest: "LLM"
D
DataBreaches.Net
S
Security @ Cisco Blogs
Blog — PlanetScale
Blog — PlanetScale
GbyAI
GbyAI
TaoSecurity Blog
TaoSecurity Blog
S
Security Affairs
Y
Y Combinator Blog
O
OpenAI News
罗磊的独立博客
MongoDB | Blog
MongoDB | Blog
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
Forbes - Security
Forbes - Security
P
Palo Alto Networks Blog
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
K
Kaspersky official blog
Cloudbric
Cloudbric

博客园 - 笨笨

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.


责任编辑:

李宁