PL/SQL Challenge 每日一题:2016-12-13 嵌套表的SET函数

[复制链接]
查看11 | 回复4 | 2008-9-15 01:28:12 | 显示全部楼层 |阅读模式
(原发表于 2011-6-6)
最先答对且答案未经编辑的puber将获得纪念章一枚(答案不可编辑但可发新贴补充或纠正),其他会员如果提供有价值的分析、讨论也可获得纪念章一枚。
每两周的优胜者可获得itpub奖励的技术图书一本。
以往旧题索引:
http://www.itpub.net/forum.php?m ... eid&typeid=1808
原始出处:
http://www.plsqlchallenge.com/
作者:Steven Feuerstein
运行环境:SQLPLUS, SERVEROUTPUT已打开
注:本题给出答案时候要求给予简要说明才能得到奖品
这个代码块执行之后屏幕上会显示什么?
DECLARE
TYPE clients_list_t IS TABLE OF VARCHAR2 (30);
l_clients1 clients_list_t
:= clients_list_t ('Customer 1', 'Customer 3', 'Customer 1');

l_clients2 clients_list_t

:= clients_list_t ('Customer 1'

, NULL

, 'Customer 3'

, NULL

, 'Customer 1');
BEGIN
sys.DBMS_OUTPUT.put_line (SET (l_clients1).COUNT);
sys.DBMS_OUTPUT.put_line (SET (l_clients2).COUNT);
END;
/
(A)
2
3
(B)
2
4
(C)
2
0
(D)
3
4
(E)
3
5
(F)
2
2

回复

使用道具 举报

千问 | 2008-9-15 01:28:12 | 显示全部楼层
A,set作用是去重。
回复

使用道具 举报

千问 | 2008-9-15 01:28:12 | 显示全部楼层
多个null也当作一个
回复

使用道具 举报

千问 | 2008-9-15 01:28:12 | 显示全部楼层
A选项正确,set可以用来判断一个值是否出现过
回复

使用道具 举报

千问 | 2008-9-15 01:28:12 | 显示全部楼层
答案A, 2楼得奖。
C: 如果集合为空,COUNT会返回0。然而,当SET被应用于一个含有一个或多个NULL值的集合,它不会返回一个空集合。它仅仅是去掉了重复的NULL。
----------------
SET 将一个嵌套表(一个 "multiset")去除重复,转换成一个集合(set, 不再有"multi")。这个函数返回了一个嵌套表,其中的元素和其它都不相同。返回的嵌套表和输入的嵌套表类型相同。嵌套表中的元素类型必须是可比较的。
注意:重复的NULL也会被“削减”为单独的一个NULL。
SET给了你一个强大而简单的方法来去除一个嵌套表中的重复值。这比起写代码来迭代集合的内容并且删除重复元素要好得多。甚至,为了使用SET, 从关联数组转换成嵌套表也是值得的。
回复

使用道具 举报

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

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行