오라클 같은 쿼리인데 다른 환경에서 오류가 납니다. 0 6 1,172

by 빠바 [2016.10.21 15:49:59]


상황은 이렇습니다.

A 오라클서버 

B 오라클서버가 있습니다.

 

A B 모두 테이블 동일하구요 쿼리도 동일하게 날립니다.

그런데 A쪽은 쿼리결과가 잘나오고 B쪽은 열의정의가애매합니다 라는 오류가 뜨네요.

어떤 원인에 의해서 이럴까요..

 

by 마농 [2016.10.21 16:12:48]

글쎄요?
"열의 정의가 애매합니다" 라는 오류는 명확한 오류입니다.
한쪽에서만 오류날 상황은 아닐 듯 한데요.


해당 오류가 나는 경우는
1. 두테이블에서 동일한 명칭을 가진 컬럼이 있는데 테이블 알리아스 없이 컬럼명만 적은 경우
SELECT deptno FROM emp e, dept d;
2. 동일한 컬럼명을 인라인뷰에서 조회하고 인라인뷰 밖에서 * 로 조회하는 경우
SELECT * FROM (SELECT e.deptno, d.deptno FROM emp e, dept d);


by ley [2016.10.21 21:29:44]

쿼리가 어떤 쿼리인지 알려주시면 답에 도움이 될거 같습니다


by 빠바 [2016.10.24 09:05:47]

A라는 오라클서버에서 expdp로 덤프한 후 B라는 오라클서버에 impdp 합니다..

그럼 모든 테이블이 똑같이 복사가되는데요..

 

여기서 똑같은 쿼리를 날리는데 이러네요 

 

  SELECT
                        DISTINCT A.LOTID          ,
                        CASE 
                            WHEN A.DETAILLOTTYPE = 'Shipping' THEN 'OUT' 
                            ELSE 'IN' 
                        END AS DIVISION             ,
                        TO_CHAR(A.PLANSTARTDATE,
                        'YYYY-MM-DD') AS PLANSTARTDATE             ,
                        TO_CHAR(A.PLANDUEDATE,
                        'YYYY-MM-DD') AS PLANDUEDATE              ,
                        A.RECIPEID             ,
                        A.RETICLEID             ,
                        A.LOTTYPE             ,
                        B.DESCRIPTION AS LOTTYPEDESC                      ,
                        A.DETAILLOTTYPE                      ,
                        A.PROCESSFLOWID                      ,
                        A.PROCESSSPECID                      ,
                        J.DESCRIPTION AS PROCESSSPECDESC                      ,
                        A.VERSION             ,
                        A.QUANTITY             ,
                        A.LOTSTATE                      ,
                        A.PROCESSSTATE                      ,
                        A.REWORKSTATE                      ,
                        A.HOLDSTATE                      ,
                        C.PRODUCTIONTYPE                      ,
                        A.PRODUCTID                      ,
                        C.DESCRIPTION AS PRODUCTDESC                      ,
                        A.PRIORITY                      ,
                        D.DESCRIPTION AS PRIORITYDESC                      ,
                        A.EQUIPMENTID                      ,
                        E.AREAID AS BAYID                      ,
                        F.DESCRIPTION AS BAYDESC                      ,
                        G.AREAID                      ,
                        G.DESCRIPTION AS AREADESC                      ,
                        A.EVENTCOMMENT                      ,
                        A.PROCESSOPERATIONID                      ,
                        A.PROCESSOPERATIONID AS OPERATIONID                      ,
                        I.DESCRIPTION AS OPERDESC                      ,
                        A.PORTID                      ,
                        K.PROCESSFLOWTYPE                      ,
                        A.REWORKPROCESSSPECID                      ,
                        A.REWORKPROCESSVERSION                      ,
                        A.RETURNPROCESSFLOWID                      ,
                        A.RETURNPROCESSOPERATIONID                      ,
                        L.DESCRIPTION AS RETURNOPERDESC                      ,
                        NVL((SELECT
                            PERSONNAME 
                        FROM
                            PERSON 
                        WHERE
                            PERSONID = A.EVENTUSER),
                        A.EVENTUSER) AS EVENTUSER                      ,
                        I.DETAILOPERATIONTYPE                      ,
                        (SELECT
                            DESCRIPTION 
                        FROM
                            VENDOR 
                        WHERE
                            VENDORID = C.VENDORID) AS VENDORNAME                      ,
                        C.DESCRIPTION AS PRODUCTNAME                      ,
                        M.WORKORDERID                      ,
                        C.VENDORID                      ,
                        N.CONSUMABLELOTID                 ,
                        TO_CHAR(N.RECEIVETIME,
                        'YY-MM-DD') AS RECEIVETIME                      ,
                        (SELECT
                            DESCRIPTION 
                        FROM
                            VENDOR 
                        WHERE
                            VENDORID = N.RECEIVEVENDORID) AS RECEIVEVENDORID                  
                    FROM
                        LOT              A             
                    LEFT JOIN
                        ENUMVALUE        B 
                            ON A.LOTTYPE   = B.ENUMVALUE 
                            AND B.ENUMNAME     = 'LotType'             
                    LEFT JOIN
                        PRODUCTDEF       C 
                            ON A.FACTORYID = C.FACTORYID 
                            AND A.PRODUCTID    = C.PRODUCTID             
                    LEFT JOIN
                        ENUMVALUE        D 
                            ON A.PRIORITY  = D.ENUMVALUE 
                            AND D.ENUMNAME     = 'Priority'             
                    LEFT JOIN
                        EQUIPMENTDEF     E 
                            ON A.FACTORYID = E.FACTORYID 
                            AND A.EQUIPMENTID  = E.EQUIPMENTID             
                    LEFT JOIN
                        AREA             F 
                            ON A.FACTORYID = F.FACTORYID 
                            AND E.AREAID       = F.AREAID      
                            AND F.DETAILAREATYPE = 'Bay'             
                    LEFT JOIN
                        AREA             G 
                            ON F.FACTORYID = G.FACTORYID 
                            AND F.PARENTAREAID = G.AREAID      
                            AND G.DETAILAREATYPE = 'Area'             
                    LEFT JOIN
                        PROCESSOPERATION I 
                            ON A.FACTORYID = I.FACTORYID 
                            AND A.PROCESSOPERATIONID = I.PROCESSOPERATIONID             
                    LEFT JOIN
                        PROCESSSPEC      J 
                            ON (
                                (
                                    A.REWORKSTATE = 'NotInRework' 
                                    AND A.PROCESSSPECID       = J.PROCESSSPECID 
                                    AND A.VERSION              = J.VERSION 
                                ) 
                                OR                                              (
                                    A.REWORKSTATE = 'InRework'    
                                    AND A.REWORKPROCESSSPECID = J.PROCESSSPECID 
                                    AND A.REWORKPROCESSVERSION = J.VERSION 
                                )
                            )             
                    LEFT JOIN
                        PROCESSFLOW      K 
                            ON A.PROCESSFLOWID = K.PROCESSFLOWID 
                            AND A.FACTORYID = K.FACTORYID             
                    LEFT JOIN
                        PROCESSOPERATION L 
                            ON A.FACTORYID = L.FACTORYID 
                            AND A.RETURNPROCESSOPERATIONID = L.PROCESSOPERATIONID             
                    LEFT JOIN
                        SUBLOT N 
                            ON A.LOTID = N.LOTID             
                    LEFT JOIN
                        WORKORDER      M 
                            ON A.FACTORYID = M.FACTORYID 
                            AND A.WORKORDERID = M.WORKORDERID             
                    LEFT JOIN
                        CONSUMABLELOT    N 
                            ON A.CONSUMABLELOTID = N.CONSUMABLELOTID   
                    WHERE
                        A.FACTORYID =  'REGEN_FAB01' /**P*/          
                        AND (
                            A.LOTID =  'SH16A2219' /**P*/ 
                            OR A.LOTID IN (
                                (
                                    SELECT
                                        DISTINCT PORT2LOTID                       
                                    FROM
                                        LOTDESTINATION                      
                                    WHERE
                                        PORT1LOTID =  'SH16A2219' /**P*/
                                )                      
                            UNION
                            (
                                SELECT
                                    DISTINCT PORT1LOTID                       
                                FROM
                                    LOTDESTINATION                      
                                WHERE
                                    PORT2LOTID =  'SH16A2219' /**P*/
                            )                      
                        UNION
                        (
                            SELECT
                                DISTINCT TARGETLOTID                           
                            FROM
                                LOTGENEALOGYHISTORY                         
                            WHERE
                                LOTID =  'SH16A2219' /**P*/ 
                                AND GENDIRECTION = 'To'
                        )
                    )
                )         
            ORDER BY
                A.LOTID 

 

쿼리는 이렇구요                     LEFT JOIN
                        CONSUMABLELOT    N 
                            ON A.CONSUMABLELOTID = N.CONSUMABLELOTID    이부분을 제거해주니 정상 실행됩니다..


by 마농 [2016.10.24 10:25:48]

N 테이블이 두개 있네요?
 - sublot n
 - consumablelot n
A 서버에서 오류가 안난게 이상할 정도네요.


by 빠바 [2016.10.26 15:25:49]

감사합니다 다시확인해볼께요!! A에서는 왜안난건지 신기하네요..


by 마농 [2016.10.26 15:59:00]

두테이블에 동일한 알리아스 N 을 준다 하더라도
N.컬럼으로 사용한 항목이 양쪽 테이블에 동시 존재하지만 않으면 에러가 안날수는 있습니다.
에러가 안난다고 이렇게 사용해도 되는건 아니죠.
확실하게 알리아스를 다르게 주는게 맞죠.


쿼리에서 N.컬럼으로 사용한 항목은 아래 총 4개 항목이네요.
N.CONSUMABLELOTID
N.RECEIVETIME
N.RECEIVEVENDORID
N.LOTID

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