Oracle关于集合和顺序的表表达式

标签 oracle plsql

我正在分析一些现有的 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

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

最佳答案

无 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> 

关于Oracle关于集合和顺序的表表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13987855/

相关文章:

sql - 比较 Oracle SQL 中的两个空字符串

sql - 甲骨文。将 varchar 值 "40.00"转换为数字

c# - 调用时参数的数量或类型错误

oracle - 在 Oracle 中识别具有最大行数的表

javascript - Apex Oracle - 多个动态操作

oracle - 我可以在 PL/SQL 中获得多行错误消息吗?

oracle - 从周数获取一周的第一天

java - 通过 JDBC 调用的匿名 block 执行无误但不运行

asp.net - 如何在 x64 中使用 WebDev.WebServer.exe (VS Web Server)?

Node.js 和 Oracle 数据库 : Insert statement doesn't work