4

我正在分析一些现有的 PL\SQL 代码,并且可以看到 Oracle 集合在使用表表达式的查询中未嵌套的情况。

没有 order 子句,代码显然假定项目将按存储在集合中的顺序返回。我知道如果没有“order by”,您不能假设 select 返回的项目的顺序,但在这种情况下它似乎有效。

示例代码:

create type s_table as table of varchar2(100);

select rownum, t.* from table(s_table('TERM1', 'TERM2', 'TERM3')) t

我应该担心并更改代码吗?

4

1 回答 1

2

No ORDER BY = 无订单保证

这里有一个例子证明了一个事实,集合中元素的顺序不一定是元素在基于给定集合对象的其他查询中出现的顺序。

 SQL> CREATE TYPE str_nestab_ty AS TABLE OF VARCHAR2(20);
 2  /

 Type created.

 SQL> SELECT COLUMN_VALUE
 2  FROM TABLE(
 3                CAST
 4                (
 5                    MULTISET
 6                    (
 7                        SELECT 'e10' AS strval FROM DUAL UNION
 8                        SELECT 'e07' AS strval FROM DUAL UNION
 9                        SELECT 'e04' AS strval FROM DUAL UNION
10                        SELECT 'e20' AS strval FROM DUAL UNION
11                        SELECT 'e14' AS strval FROM DUAL
12                    )
13                    AS str_nestab_ty
14                )
15             );

   COLUMN_VALUE
--------------------
e04
e07
e10
e14
e20

SQL> 
于 2012-12-21T17:49:24.580 回答