ITPUB论坛

 找回密码
 注册

用新浪微博连接

一步搞定

QQ登录

只需一步,快速开始

查看: 38733|回复: 334

[每日一题] PL/SQL CHALLENGE 每日一题 [复制链接]

版主

资深新手

精华贴数
25
专家积分
1743
技术积分
42149
社区积分
251
注册时间
2004-6-26
论坛徽章:
182
2010广州亚运会纪念徽章:羽毛球
日期:2013-06-26 17:44:46奥运会纪念徽章:艺术体操
日期:2012-12-10 17:55:46奥运会纪念徽章:棒球
日期:2012-12-10 17:55:46奥运会纪念徽章:羽毛球
日期:2012-12-10 17:55:46奥运会纪念徽章:乒乓球
日期:2012-10-20 00:13:42ITPUB 11周年纪念徽章
日期:2013-01-02 12:47:22ITPUB 11周年纪念徽章
日期:2012-10-09 18:05:37奥运会纪念徽章:体操
日期:2012-10-08 11:34:22奥运会纪念徽章:自行车
日期:2012-10-08 11:34:12奥运会纪念徽章:跆拳道
日期:2012-09-18 13:36:08奥运会纪念徽章:马术
日期:2013-01-18 14:17:54奥运会纪念徽章:跳水
日期:2013-01-18 14:17:54
发表于 2011-10-11 05:49:08 |显示全部楼层
本帖最后由 newkid 于 2012-6-7 03:51 编辑

Steven Feuerstein 是PL/SQL一代宗师,他写的Oracle PL/SQL Programming已经出到第五版,是PL/SQL程序员的宝典。
现在我征得他的同意,把他主办的 www.plsqlchallenge.com 的题目翻译介绍到我们开发版。大家可以到这网站注册并参加比赛,这里是学习PL/SQL的好地方。
这些题目可以说都不难,不是需要费脑筋琢磨的题,而是考知识点的题。但是要全答对很不容易。我曾经以为自己很了解PLSQL,参加了这里的活动之后,才知道自己还存在这么多的知识盲点。

索引:
2012-6-5 TABLE()和集合类型定义
2012-6-4 CASE语句
2012-6-1 异常处理:WHEN子句
2012-5-31 集合元素的计数
2012-5-30 AUTHID 以及编译、执行权限
2012-5-29 MEMBER OF 操作
2012-5-28 含有NULL的IF 条件
2012-5-25 时间戳和INTERVAL运算
2012-5-24 SET TRANSACTION
2012-5-23 TRIM函数
2012-5-22 MULTISET INTERSECT 操作
2012-5-21 BOOLEAN变量的赋值
2012-5-18 隐式游标属性SQL%ROWCOUNT
2012-5-17 OPEN FOR 打开游标变量
2012-5-16 子程序的声明与调用:超前声明
2012-5-15 FOR LOOP循环
2012-5-14 FORALL与稀疏集合
2012-5-11 系统字典视图ALL_PROCEDURES
2012-5-10 出错信息的处理
2012-5-9 记录类型的比较与赋值
2012-5-8 条件编译选项:ERROR
2012-5-7 依赖关系的字典:ALL_DEPENDENCIES

2012-5-4 删除数组元素
2012-5-3 ASCII函数
2012-5-2 集合的遍历
2012-5-1 隐式游标属性
2012-4-30 对象的自定义构造函数
2012-4-27 显式游标的属性
2012-4-26 带RETURNING的DML

2012-4-25 11G新功能:RESULT CACHE 函数
2012-4-24 隐式游标的属性
2012-4-23 条件编译
2012-4-20 NVL 和 COALESCE 对实际参数的求值
2012-4-19 CAST函数在PLSQL和SQL中的不同表现

2012-4-18 PL/SQL分隔符
2012-4-17 MULTISET INTERSECT操作
2012-4-16 嵌套表非空判断

2012-4-13 语句级触发器
2012-4-12 引用包头定义类型是否触发包体初始化代码
2012-4-11 SQL中VARCHAR2的长度限制

2012-4-10 FOR LOOP循环变量
2012-4-9 从SQL中调用PLSQL函数的限制
2012-4-6 对程序单元的访问控制
2012-4-5: 函数未返回值
2012-4-4 动态SQL

2012-4-3 结果缓存函数不支持的数据类型

2012-4-2 自治事务

2012-3-30 求字符串逆序
2012-3-29 列宽度以及参数宽度的约束
2012-3-28 多层次的对象类型

2012-3-27 数组的遍历访问

2012-3-26 时间戳数据类型

2012-3-23数字表达式
2012-3-22 空串做数组下标

2012-3-21 删除数组元素

2012-3-20 SQL%BULK_EXCEPTIONS

2012-3-19 记录类型的插入
2012-3-16 NVL函数

2012-3-15 NOCOPY 参数

2012-3-14 引用未经初始化的集合
2012-3-13 NO_DATA_FOUND 异常

2012-3-12 TOO_MANY_ROWS 异常

2012-3-9 存储过程传参

2012-3-8 ROLLBACK TO SAVEPOINT及阻塞

2012-3-7 查询中不带别名的表达式的引用

2012-3-6 应用上下文(Application Context)的设置

2012-3-5 TIMESTAMP常量

2012-3-2 自治事务

2012-3-1 游标变量(REF CURSOR)的限制

2012-2-29 SAVEPOINT
2012-2-28 RESULT_CACHE和动态SQL

2012-2-27 SUBSTR参数为零的表现

2012-2-24 带参数的显式游标

2012-2-23 INSTR函数

342楼:2012-2-22 DBMS_UTILITY.FORMAT_CALL_STACK

340楼:2012-2-21 INDEX BY数组用空串做下标

339楼:2012-2-20 日期运算
338 楼:2012-2-17 DBMS_OUTPUT.PUT_LINE的数据类型

333楼:2012-2-16 FORALL中的VALUES OF子句

332楼:2012-2-15 删除数组元素

331楼:2012-2-14 打开游标后ROLLBACK的影响

330楼:2012-2-13 CONSTANT变量的声明

328楼:2012-2-10 SUBSTR函数

327楼:2012-2-9  NOCOPY Hint何时忽略

325楼:2012-2-8 显式游标/隐式游标

324楼:2012-2-7 布尔型变量的显示

318楼:SQL中调用PLSQL函数

316楼:2012-2-3 集合去重

314楼:2012-2-2 日期的四舍五入

312楼:2012-2-1 编译器优化

309楼:2012-1-31 11GR2下的RESULT_CACHE函数

308楼:2012-1-30 BULK COLLECT 获取多行数据

306楼:2012-1-27 带行数限制的BULK FETCH操作

304楼:2012-1-26: 触发器中的UPDATING函数和带引号列名

303楼:2012-1-25: 不完整的创建过程语句

302楼:2012-1-24 动态SQL中引用标识符

301楼:2012-1-23 重复异常定义

300楼:带标记的EXIT语句

299楼:2012-1-19 DBMS_SQL的出错处理

298楼:2012-1-18 FORMAT_CALL_STACK相关

297楼:2012-1-17 定制并行化操作:DBMS_PARALLEL_EXECUTE包的使用

294楼:2012-1-16 CASE表达式

293楼: 2012-1-13 COLLECTIONS

290楼:2012-1-12 不规则表名

288楼:2012-1-11 UTL_FILE读文件

285楼:2012-1-10 事务隔离级别:serializable

283楼:2012-1-9 数组的遍历

281楼:2012-1-6 乘方和开方函数

279楼:2012-1-5 触发器和变异表异常

274楼:2012-1-4 简单判断

272楼:2012-1-3 自治事务, 在声明部分调用子过程

270楼:2012-1-2 SUBSTR的负数参数

269楼:2011-12-30 锁表语句LOCK TABLE

265楼:2011-12-29 RAISE_APPLICATION_ERROR

263楼:2011-12-28 用记录类型修改整行数据(SET ROW)

261楼:2011-12-27 子程序重载
260楼:2011-12-26 在SQL中使用名字表示法(Named Notation)

257楼:2011-12-23 日期常量

252楼:2011-12-22 嵌套表的初始化

249楼:2011-12-21 LEAST函数的不同参数类型

248楼:2011-12-20 求月末日期

247楼:2011-12-19 变量、参数的声明及初始化

245楼:2011-12-16 MONTHS_BETWEEN函数在月末的表现

243楼:2011-12-15 11G新功能:RESULT_CACHE函数

239楼:2011-12-14 集合去重

236楼:2011-12-13 逻辑运算优先级

235楼:2011-12-12 11G新功能:CONTINUE语句

231楼:2011-12-09 Inner capture

229楼:2011-12-8 DBMS_SQL相关
227楼:2011-12-7 USER_ARGUMENTS相关

224楼:2011-12-6 非空约束和VALUE_ERROR异常
219楼:2011-12-05 动态SQL

216楼:2011-12-02 带约束的SUBTYPE

214楼:2011-12-01 SQL注入的防备

209楼:2011-11-30 一致读

204楼:2011-11-29 11G新功能:PL/SCOPE

201楼:2011-11-28 取单行数据

198楼:2011-11-25 包的初始化
191楼:2011-11-24 RESULT_CACHE函数

184楼:2011-11-23 DETERMINISTIC函数
178楼:2011-11-22 OUT 参数

173楼:2011-11-21 未捕获异常

164楼:2011-11-17 AUTHID(定义者权限与使用者权限)

156楼:2011-11-16 %ROWTYPE的声明与使用

147楼:2011-11-15 过程与函数

141楼:2011-11-14 PACKAGE相关

137楼:2011-11-11 集合元素的删除

131楼:2011-11-10 CLOB为空的判断

127楼:2011-11-9 11G新功能:PL/SCOPE

120楼:2011-11-8 包变量的初始化

117楼:2011-11-7 包和包体的删除语法

114楼:2011-11-4 LEAST函数

110楼:2011-11-3 触发器

106楼:2011-11-2 游标和管道函数

102楼:2011-11-1 求嵌套表平均值

99楼:2011-10-31 对集合的密集性判断

94楼:2011-10-28 LIKE条件中的通配符


90楼:2011-10-27 CONSTANT变量与INDEX BY数组

86楼:2011-10-26 自治事务

81 楼:2011-10-25 NULL与循环

77楼:2011-10-24 REF CURSOR作为过程参数的表现

71楼:2011-10-21 自定义异常的捕获

66楼:2011-10-20 %TYPE的使用

65楼:2011-10-19: 对REF CURSOR 的理解

62楼:2011-10-18 TO_CHAR格式转换

57楼:2011-10-17 记录类型判断非空的办法

47楼:2011-10-14 对变量的引用
41楼:2011-10-13 10G新特性DML ERROR LOG

33楼 2011-10-12 各种带锁游标加锁的时机
25楼 2011-10-11 字符串转换格式
16楼 2011-10-10 COLLECTION的EXISTS接受NULL参数的表现
15楼 2011-10-07 PLSQL的命名方法
14楼 2011-10-06 修改包头后对变量的引用


旧题目有很多,我将来会选一些介绍过来。先从2011-10-05的题目开始吧:

作者:Steven Feuerstein
哪一个PLSQL块执行之后会显示下面的三行数字?
0
1
2

(A)
DECLARE
   TYPE numbers_t IS TABLE OF NUMBER;

   l_numbers   numbers_t := numbers_t ();
BEGIN
   DBMS_OUTPUT.put_line (l_numbers.COUNT);
   l_numbers.EXTEND ();
   l_numbers (1) := 100;
   DBMS_OUTPUT.put_line (l_numbers.COUNT);
   l_numbers.EXTEND ();
   DBMS_OUTPUT.put_line (l_numbers.COUNT);
END;
/


(B)
DECLARE
   TYPE numbers_t IS TABLE OF NUMBER;

   l_numbers   numbers_t := numbers_t ();
BEGIN
   DBMS_OUTPUT.put_line (l_numbers.COUNT);
   l_numbers.EXTEND (2);
   l_numbers (1) := 100;
   DBMS_OUTPUT.put_line (l_numbers.COUNT);
   l_numbers (2) := 100;
   DBMS_OUTPUT.put_line (l_numbers.COUNT);
END;
/

(C)
DECLARE
   TYPE numbers_t IS TABLE OF NUMBER;

   l_numbers   numbers_t := numbers_t ();
BEGIN
   DBMS_OUTPUT.put_line (l_numbers.COUNT);
   l_numbers.EXTEND (2);
   l_numbers (1) := 100;
   l_numbers.DELETE (1);
   DBMS_OUTPUT.put_line (l_numbers.COUNT);
   l_numbers (2) := 100;
   DBMS_OUTPUT.put_line (l_numbers.COUNT);
END;
/


(D)
DECLARE
   TYPE numbers_t IS TABLE OF NUMBER;

   l_numbers   numbers_t := numbers_t ();
BEGIN
   DBMS_OUTPUT.put_line (l_numbers.COUNT);
   l_numbers.EXTEND (2);
   l_numbers (1) := 100;
   l_numbers.DELETE (1);
   DBMS_OUTPUT.put_line (l_numbers.COUNT);
   l_numbers (1) := 200;
   l_numbers (2) := 100;
   DBMS_OUTPUT.put_line (l_numbers.COUNT);
END;
/

这道题考察的是COLLECTION的知识,当你删除一个元素后,是否还能将其恢复,COUNT值又会如何变化?




世界上只有两种编程方法:Oracle的方法和错误的方法。

剑破冰山—Oracle开发艺术 即将隆重推出
http://www.china-pub.com/197199
http://www.huachu.com.cn/itbook/itbookinfo.asp?lbbh=10114321

注册会员

柠檬加酸橙

精华贴数
0
专家积分
37
技术积分
1830
社区积分
56
注册时间
2010-6-23
论坛徽章:
19
ITPUB官方微博粉丝徽章
日期:2011-08-17 10:35:36马上有房
日期:2014-02-18 16:42:022014年新春福章
日期:2014-02-18 16:42:02林肯
日期:2013-10-11 17:30:48劳斯莱斯
日期:2013-10-07 18:49:31迷宫蛋
日期:2013-05-30 10:44:082013年新春福章
日期:2013-02-25 14:51:242013年新春福章
日期:2013-02-25 11:02:12ITPUB 11周年纪念徽章
日期:2012-10-09 18:07:31复活蛋
日期:2013-01-21 17:45:32ITPUB十周年纪念徽章
日期:2011-11-01 16:23:262012新春纪念徽章
日期:2012-01-04 11:53:29
发表于 2011-10-11 08:27:15 |显示全部楼层
太感谢了,上面的问题好多都看不懂。英文太差

选个D

笨鸟也要飞~!

使用道具 举报

注册会员

柠檬加酸橙

精华贴数
0
专家积分
37
技术积分
1830
社区积分
56
注册时间
2010-6-23
论坛徽章:
19
ITPUB官方微博粉丝徽章
日期:2011-08-17 10:35:36马上有房
日期:2014-02-18 16:42:022014年新春福章
日期:2014-02-18 16:42:02林肯
日期:2013-10-11 17:30:48劳斯莱斯
日期:2013-10-07 18:49:31迷宫蛋
日期:2013-05-30 10:44:082013年新春福章
日期:2013-02-25 14:51:242013年新春福章
日期:2013-02-25 11:02:12ITPUB 11周年纪念徽章
日期:2012-10-09 18:07:31复活蛋
日期:2013-01-21 17:45:32ITPUB十周年纪念徽章
日期:2011-11-01 16:23:262012新春纪念徽章
日期:2012-01-04 11:53:29
发表于 2011-10-11 08:38:38 |显示全部楼层
被最后一句话忽悠了“当你删除一个元素后” ,直接跑去研究C D两个答案了
笨鸟也要飞~!

使用道具 举报

注册会员

黃金之箭

精华贴数
0
专家积分
43
技术积分
3246
社区积分
83995
注册时间
2008-3-9
论坛徽章:
5924
洛杉矶湖人
日期:2014-07-24 17:29:50迈阿密热火
日期:2014-07-24 17:29:50克里夫兰骑士
日期:2014-07-24 17:29:50洛杉矶快船
日期:2014-07-24 17:29:50纽约尼克斯
日期:2014-07-24 17:29:50俄克拉荷马雷霆
日期:2014-07-24 17:29:50圣安东尼奥马刺
日期:2014-07-24 17:29:50休斯顿火箭
日期:2014-07-24 17:29:50奥兰多魔术
日期:2014-07-24 17:29:50芝加哥公牛
日期:2014-07-24 17:29:50丹佛掘金
日期:2014-07-24 17:29:50亚特兰大老鹰
日期:2014-07-24 17:29:50
发表于 2011-10-11 09:00:31 |显示全部楼层
English没学好
看英文看得累死

这道题(A)应该是对的
(D)不确定

试了下,本以为(D)会报下标超出数量的错误。。。
真是基础不扎实啊

l_numbers.DELETE 和
l_numbers.DELETE (1);有那么大区别啊




                             【十二宮黃金聖鬥士】

使用道具 举报

注册会员

newbie

精华贴数
0
专家积分
124
技术积分
2874
社区积分
1432
注册时间
2010-8-17
论坛徽章:
224
红宝石
日期:2012-02-16 15:04:46萤石
日期:2012-06-04 11:32:41祖母绿
日期:2012-06-05 09:19:14蓝锆石
日期:2013-07-31 11:30:08海蓝宝石
日期:2013-07-31 11:28:45紫水晶
日期:2012-06-11 12:23:55九尾狐狸
日期:2014-07-18 11:17:35铁扇公主
日期:2013-12-07 10:49:07玉石琵琶
日期:2014-03-04 16:46:07蓝色妖姬
日期:2014-07-18 11:17:35玉兔
日期:2013-12-08 16:51:18紫蜘蛛
日期:2014-07-18 11:17:35
发表于 2011-10-11 09:40:06 |显示全部楼层
总结下,EXTEND会分配一个NULL,EXTEND(N) 会分配N个NULL,COUNT 会计算NULL,DELETE(N) 会删除第N行,用占位符代替,COUNT不会计算占位符,DELETE直接释放内存,这样的理解对么

使用道具 举报

注册会员

高阶督军

精华贴数
0
专家积分
11
技术积分
520
社区积分
44
注册时间
2008-8-30
论坛徽章:
3
ITPUB十周年纪念徽章
日期:2011-11-01 16:24:512012新春纪念徽章
日期:2012-01-04 11:54:26蛋疼蛋
日期:2012-04-11 10:25:43
发表于 2011-10-11 09:44:07 |显示全部楼层
我选A,我觉得删除后应该还会保留,所以count时是不会发生变化的,我没有动手实验,只是凭感觉选的,不知道对不!
oracle ebs中

使用道具 举报

注册会员

柠檬加酸橙

精华贴数
0
专家积分
37
技术积分
1830
社区积分
56
注册时间
2010-6-23
论坛徽章:
19
ITPUB官方微博粉丝徽章
日期:2011-08-17 10:35:36马上有房
日期:2014-02-18 16:42:022014年新春福章
日期:2014-02-18 16:42:02林肯
日期:2013-10-11 17:30:48劳斯莱斯
日期:2013-10-07 18:49:31迷宫蛋
日期:2013-05-30 10:44:082013年新春福章
日期:2013-02-25 14:51:242013年新春福章
日期:2013-02-25 11:02:12ITPUB 11周年纪念徽章
日期:2012-10-09 18:07:31复活蛋
日期:2013-01-21 17:45:32ITPUB十周年纪念徽章
日期:2011-11-01 16:23:262012新春纪念徽章
日期:2012-01-04 11:53:29
发表于 2011-10-11 09:51:12 |显示全部楼层
本帖最后由 gyhgood 于 2011-10-11 09:51 编辑

我觉得这个DELETE(N)的时候有点像C里的memset
笨鸟也要飞~!

使用道具 举报

版主

djゆoracle

精华贴数
24
专家积分
1900
技术积分
46168
社区积分
61454
注册时间
2006-7-28
论坛徽章:
1024
金色在线徽章
日期:2007-04-25 04:02:08金色在线徽章
日期:2007-06-29 04:02:43金色在线徽章
日期:2007-03-11 04:02:02在线时间
日期:2007-04-11 04:01:02在线时间
日期:2007-04-12 04:01:02在线时间
日期:2007-03-07 04:01:022008版在线时间
日期:2010-05-01 00:01:152008版在线时间
日期:2011-05-01 00:01:342008版在线时间
日期:2008-06-03 11:59:43ITPUB年度最佳技术原创精华奖
日期:2013-03-22 13:18:30ITPUB年度最佳技术原创精华奖
日期:2012-03-13 17:12:05ITPUB年度最佳技术原创精华奖
日期:2011-04-08 18:37:54
发表于 2011-10-11 11:00:36 |显示全部楼层
所以,学好一门技术,难在细节啊
这些东西plsql reference都是有的
My BLOG: http://blog.chinaunix.net/uid/7655508.html

ORACLE是个分外妖娆的女人,她总能勾起你的欲望,去探索她!
                                                                                     --BY DJ
About me:optimistic,passionate and harmonious
focus on  oracle sql and plsql programming,peformance tuning,db design, j2ee,Linux/AIX,web2.0 tech,etc


长期不限数量收鲨鱼章和各种蛋章,600每个,卖的短消息我

使用道具 举报

精华贴数
13
专家积分
2122
技术积分
91275
社区积分
20597
注册时间
2008-1-16
论坛徽章:
344
比亚迪
日期:2013-07-30 17:57:36三菱
日期:2013-09-29 09:46:51比亚迪
日期:2013-10-10 18:45:31劳斯莱斯
日期:2013-10-20 20:22:38奔驰
日期:2013-10-25 18:50:53宝马
日期:2013-10-30 12:02:48宝马
日期:2013-11-18 10:01:57奔驰
日期:2013-11-18 14:06:28路虎
日期:2013-11-18 14:24:33宝马
日期:2013-11-22 20:41:54比亚迪
日期:2013-09-22 19:26:17劳斯莱斯
日期:2013-09-11 16:38:36
发表于 2011-10-11 11:04:33 |显示全部楼层
http://download.oracle.com/docs/cd/B13789_01/appdev.101/b10807/05_colls.htm#i27396
Counting the Elements in a Collection (COUNT Method)COUNT returns the number of elements that a collection currently contains:
DECLARE   TYPE NumList IS TABLE OF NUMBER;   n NumList := NumList(2,4,6,8); -- Collection starts with 4 elements.BEGIN   dbms_output.put_line('There are ' || n.COUNT || ' elements in N.');   n.EXTEND(3); -- Add 3 new elements at the end.   dbms_output.put_line('Now there are ' || n.COUNT || ' elements in N.');   n := NumList(86,99); -- Assign a completely new value with 2 elements.   dbms_output.put_line('Now there are ' || n.COUNT || ' elements in N.');   n.TRIM(2); -- Remove the last 2 elements, leaving none.   dbms_output.put_line('Now there are ' || n.COUNT || ' elements in N.');END;/COUNT is useful because the current size of a collection is not always known. For example, you can fetch a column of Oracle data into a nested table, where the number of elements depends on the size of the result set.
For varrays, COUNT always equals LAST. You can increase or decrease the size of a varray using the EXTEND and TRIM methods, so the value of COUNT can change, up to the value of the LIMIT method.
For nested tables, COUNT normally equals LAST. But, if you delete elements from the middle of a nested table, COUNT becomes smaller than LAST. When tallying elements, COUNT ignores deleted elements.

Increasing the Size of a Collection (EXTEND Method)To increase the size of a nested table or varray, use EXTEND.
You cannot use EXTEND with index-by tables.
This procedure has three forms:

    EXTEND appends one null element to a collection.
    EXTEND(n) appends n null elements to a collection.
  • EXTEND(n,i) appends n copies of the ith element to a collection.

You cannot use EXTEND to add elements to an uninitialized.
If you impose the NOT NULL constraint on a TABLE or VARRAY type, you cannot apply the first two forms of EXTEND to collections of that type.
EXTEND operates on the internal size of a collection, which includes any deleted elements. If EXTEND encounters deleted elements, it includes them in its tally. PL/SQL keeps placeholders for deleted elements so that you can re-create them by assigning new values.
DECLARE   TYPE NumList IS TABLE OF INTEGER;   n NumList := NumList(2,4,6,8);   x NumList := NumList(1,3);   PROCEDURE print_numlist(the_list NumList) IS      output VARCHAR2(128);   BEGIN      FOR i IN the_list.FIRST .. the_list.LAST      LOOP         output := output || NVL(TO_CHAR(the_list(i)),'NULL') || ' ';      END LOOP;      dbms_output.put_line(output);   END;BEGIN   dbms_output.put_line('At first, N has ' || n.COUNT || ' elements.');   n.EXTEND(5); -- Add 5 elements at the end.   dbms_output.put_line('Now N has ' || n.COUNT || ' elements.');-- Elements 5, 6, 7, 8, and 9 are all NULL.   print_numlist(n);   dbms_output.put_line('At first, X has ' || x.COUNT || ' elements.');   x.EXTEND(4,2); -- Add 4 elements at the end.   dbms_output.put_line('Now X has ' || x.COUNT || ' elements.');-- Elements 3, 4, 5, and 6 are copies of element #2.   print_numlist(x);END;/When it includes deleted elements, the internal size of a nested table differs from the values returned by COUNT and LAST. For instance, if you initialize a nested table with five elements, then delete elements 2 and 5, the internal size is 5, COUNT returns 3, and LAST returns 4. All deleted elements, regardless of position, are treated alike.

Deleting Collection Elements (DELETE Method)This procedure has various forms:

    DELETE removes all elements from a collection.
    DELETE(n) removes the nth element from an associative array with a numeric key or a nested table. If the associative array has a string key, the element corresponding to the key value is deleted. If n is null, DELETE(n) does nothing.
  • DELETE(m,n) removes all elements in the range m..n from an associative array or nested table. If m is larger than n or if m or n is null, DELETE(m,n) does nothing.

For example:
DECLARE   TYPE NumList IS TABLE OF NUMBER;   n NumList := NumList(10,20,30,40,50,60,70,80,90,100);   TYPE NickList IS TABLE OF VARCHAR2(64) INDEX BY VARCHAR2(32);   nicknames NickList;BEGIN   n.DELETE(2);    -- deletes element 2    n.DELETE(3,6);  -- deletes elements 3 through 6    n.DELETE(7,7);  -- deletes element 7    n.DELETE(6,3);  -- does nothing since 6 > 3   n.DELETE;      -- deletes all elements   nicknames('Bob') := 'Robert';   nicknames('Buffy') := 'Esmerelda';   nicknames('Chip') := 'Charles';   nicknames('Dan') := 'Daniel';   nicknames('Fluffy') := 'Ernestina';   nicknames('Rob') := 'Robert';   nicknames.DELETE('Chip'); -- deletes element denoted by this key   nicknames.DELETE('Buffy','Fluffy'); -- deletes elements with keys in this alphabetic rangeEND;/Varrays always have consecutive subscripts, so you cannot delete individual elements except from the end (by using the TRIM method).
If an element to be deleted does not exist, DELETE simply skips it; no exception is raised. PL/SQL keeps placeholders for deleted elements, so you can replace a deleted element by assigning it a new value.
DELETE lets you maintain sparse nested tables. You can store sparse nested tables in the database, just like any other nested tables.
The amount of memory allocated to a nested table can increase or decrease dynamically. As you delete elements, memory is freed page by page. If you delete the entire table, all the memory is freed.



我的新浪微博,目前被冻结:http://weibo.com/lu01

译作Oracle PL/SQL实战已经上架销售
网购地址:china-pub|京东图灵社区(源代码)卓越亚马逊当当

剑破冰山—Oracle开发艺术 已经上架销售
网购地址:互动|京东电子工业出版社书店卓越亚马逊当当华储
在线阅读:5lcto华储
源代码:博文视点ITPUB

使用道具 举报

注册会员

咖啡猫

精华贴数
3
专家积分
165
技术积分
5293
社区积分
12322
注册时间
2006-5-14
论坛徽章:
109
奥迪
日期:2014-05-13 20:14:25Jeep
日期:2013-11-18 15:42:59一汽
日期:2013-11-18 15:42:59凯迪拉克
日期:2013-11-18 15:43:22奔驰
日期:2013-11-18 11:23:08奔驰
日期:2013-11-26 19:05:46雪铁龙
日期:2013-11-28 10:51:34SQL大赛参与纪念
日期:2013-12-06 14:03:45保时捷
日期:2013-12-11 20:56:08奔驰
日期:2013-12-17 18:48:15奔驰
日期:2013-11-18 15:42:59奥迪
日期:2013-11-13 10:25:47
发表于 2011-10-11 16:44:23 |显示全部楼层
A,D (经执行。。。)
猫言猫语:
             人生无非是笑笑人家,再被人家笑笑而已.
             男人是用来靠的,所以要可靠;女人是用来爱的,所以要可爱.
             发怒一分钟便失去六十秒的幸福.
             人品就象内裤,表面看不出来,如果你没有还显摆,就挺讨厌.
             ......

使用道具 举报


您需要登录后才可以回帖 登录 | 注册

2014中国系统架构师大会(9.17-19)
SACC2014正式启动 会员购票7.8折

大会时间:2014年9月17日-19日
大会地点:北京五洲皇冠国际酒店
大会主题:发现架构之美
金秋9月,2014第六届中国系统架构师大会将如期而至。新的场地新的规模,欢迎参与,报名从速~~

查看详情>>
TOP技术积分榜 社区积分榜 徽章 电子杂志 团队 统计 邮箱 虎吧 老博客 知识索引树 读书频道 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档 | IT博客
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛 | IXPUB | SAP ERP系统
CopyRight 1999-2011 itpub.net All Right Reserved. 北京皓辰网域网络信息技术有限公司版权所有 联系我们 网站律师 隐私政策 知识产权声明
京ICP证:060528号 北京市公安局海淀分局网监中心备案编号:1101082001 广播电视节目制作经营许可证:编号(京)字第1149号
  
回顶部