2012-12-21 3 views
3

기존 PL \ SQL 코드를 분석 중이며 테이블 표현식을 사용하여 쿼리에서 Oracle 콜렉션이 중첩되지 않은 경우를 볼 수 있습니다.오라클 테이블 수거 및 주문

주문 절이없고 코드는 항목이 컬렉션에 저장 될 때 순서대로 반환된다는 것을 분명히 가정합니다. "주문"이 없으면 select에 의해 반환 된 상품의 주문을 맡을 수 없다는 것을 알고 있지만이 경우에는 효과가있는 것 같습니다.

예제 코드 : 나는

create type s_table as table of varchar2(100); 

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

걱정하고 코드를 변경해야합니까?

+0

병렬 처리 (t 8)에서도 "정렬 해제"하지 못합니다. 이 구조는 순수한 pl/sql이며 순차적으로 반복하므로 순서가 유지됩니다. 하지만 나는 이것에 대해 아무 것도 모른다. –

답변

2

= 아니오 위해 보증 여기

그리고 BY 없음 ORDER 컬렉션의 요소의 순서가되는 요소가 다른 쿼리에서 를 표시 할 수있어서 순서가 반드시 아니라고, 사실을 증명하는 예입니다 지정된 컬렉션 객체에 근거 해

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> 
+0

예, 동의합니다. "주문하지 않음 = 주문 보증 없음"문제는 코드가 약간의 시간 동안 프로덕션에 있었고 더 간단한 경우 작동한다는 것입니다. 그러나 나는 그것이 작동하기를 멈 추면 서서히 그것을 대체 할 것이라고 봅니다. 귀하의 예를 들어 주셔서 감사합니다. – WaldiMen