4

私はいくつかの既存の PL\SQL コードを分析しており、テーブル式を使用したクエリで Oracle コレクションがネストされていないケースを確認できます。

order 句はありません。コードは、アイテムがコレクションに格納されている順序で返されることを明らかに想定しています。「オーダーバイ」がない場合、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

ORDERBYなし=注文保証なし

これは、コレクション内の要素の順序が、特定のコレクションオブジェクトに基づく他のクエリで要素が表示される順序であるとは限らないという事実を証明する例です。

 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 に答える