처음 PL/SQL을 보면서 분석겸 공부중인데.. WITH A AS 이게 무엇인가요 ..? 0 5 1,479

by 날아라갑을 [PL/SQL] ORACLE PL/SQL [2017.07.05 15:55:04]


빨간색으로 칠해놨는데 저게 무엇을 의미하는건가요 ...? AS (별칭)은 알지만 ;; WITH ? 어떤 의미이고 주로 어떨때 사용하는건가요...?

 

LOOP
                    IF X_CURR_DATE > L_E_DATE THEN
                       X_SQL_04 := X_SQL_04 || ', 0 ' || CHR(13) ;
                    ELSE
                       X_SQL_04 := X_SQL_04 || ', A.WORK_' || X_CURR_DATE || CHR(13) ;
                    END IF ;
                   
                    X_CURR_DATE :=  TO_CHAR(TO_DATE(X_CURR_DATE, 'YYYYMMDD') + 1, 'YYYYMMDD') ;
                    X_LOOP_CNT := X_LOOP_CNT + 1 ;

                    EXIT WHEN X_LOOP_CNT  > 31  ;
           END LOOP ;

       X_SQL := X_SQL || ' WITH A AS (    ' || CHR(13) ;
       X_SQL := X_SQL || ' SELECT A.COMP_SEQ , A.EST_SEQ ,  A.CUST_SEQ  ' || CHR(13) ;
       X_SQL := X_SQL || '          , A.FULL_FOOD_NM, A.FOOD_DES, A.FOOD_REMARK, A.FOOD_UNIT_SEQ  ' || CHR(13) ;
       X_SQL := X_SQL || '          , A.ITEM_SEQ, A.UNIT_SEQ , A.TAX_KIND, A.VAT_RATE, A.PRICE_TYPE, A.EST_TYPE , A.EST_NO , A.FINE_YN, A.SORT_ORD,  A.EST_COLOR ' || CHR(13) ;
       X_SQL := X_SQL || '          , A.PROG_STATUS AS  PROG_STATUS_TMP ' || CHR(13) ;    -- 견적 진행상태
       X_SQL := X_SQL || '          , A.MEAL_TYPE  ' || CHR(13) ;
       X_SQL := X_SQL || '          , A.EST_PERIOD_GBN  ' || CHR(13) ;     
       X_SQL := X_SQL || '          , A.UNIT_WEIGHT  ' || CHR(13) ;   -- 현품설명의 단위중량       
      
       X_SQL := X_SQL || '  , (   ' || CHR(13) ;
       X_SQL := X_SQL ||           X_SQL_01   || CHR(13) ;
       X_SQL := X_SQL || '    ) AS QTY  ' || CHR(13) ;

       X_SQL := X_SQL || '  , A.PRICE ' || CHR(13) ;

       X_SQL := X_SQL ||    X_SQL_02   || CHR(13) ;

.... (생략)

by 주킹 [2017.07.05 16:38:12]

CTE 구문으로 SQL에서 사용하는 구문입니다.


by 마농 [2017.07.05 16:39:53]

Inline-View(From 절의 서브쿼리)를 쿼리 상단으로 뺀거라고 보시면 됩니다.
1. 복잡한 서브쿼리를 미리 정의 함으로써 메인쿼리를 단순화 할 수 있습니다.
2. 동일 인라인뷰가 반복 사용될 때 유용합니다.


by 미생 [2017.07.05 16:43:54]

 

오라클에 with 절이라는 문법이 있습니다 쿼리의 결과가 여러번 사용될때 유용한 문법입니다.

 

ex )

with emp_test as (select * from emp),
dept_test as (select * from dept)
select e.ename , d.dname from emp_test e , dept_test d where e.deptno=d.deptno
/

 

참고

http://powerofwriting.tistory.com/entry/Oracle-WITH-구문-예제

 


by 날아라갑을 [2017.07.05 16:47:29]

정말 고맙습니다!

많이 알아가요ㅎㅎ


by 나야나 [2017.07.07 07:43:50]

결론은 마농님 말씀이 정답입니다

다만 with문은 with view 라고 일컷기도 합니다.

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입