2009-06-04 3 views
1

경고는 무엇을 의미합니까?Toad for Oracle Formatter에 대한 조언

두 번째 예제가 첫 번째 예제보다 더 나쁜 이유는 무엇입니까?

SELECT product_id, prod.name name, sample_id 
    FROM lims.sample JOIN lims.product prod USING (product_id) 

SELECT product_id, prod.name name, sample_id 
    FROM (SELECT sample_id, product_id FROM lims.sample) 
     JOIN lims.product prod 
/* ADVICE: [131] This item has not been declared, or it refers to a label */ 
      USING (product_id) 

/* ADVICE: 
ADVICE SUMMARY 

Count Recommendation 
----- -------------- 
    1 [131] This item has not been declared, or it refers to a label 
        The Oracle equivalent error messages are PLS-00320 and 
        PLS-0321. 
*/ 

는 참고 : 두 쿼리가 잘 실행하고 동일한 결과를 반환합니다.

+0

추측을 환영합니다. – Steven

답변

1

테이블의 데이터, 색인 및 수집 통계량을 따로 보관합니다. 중첩되지 않은 하위 쿼리이 중첩 된 하위 쿼리보다 우위에 있어야합니다.

0

내 추측 : TOAD가 오라클과 같은 방식으로 쿼리를 구문 분석하지 않는 것 같습니다.

첫 번째 쿼리에서 TOAD는 lims.sample 및 lims.product에 대한 테이블 정의를 확인하고 두 항목 모두에서 "product_id"열을 찾습니다.

두 번째 쿼리에서 TOAD는 중첩 쿼리이기 때문에 조인의 첫 번째 부분에 대한 테이블 정의를 확인할 수 없습니다. 그래서 아마 포기하고 당신에게이 충고를줍니다 (이것이 조언이 "... 또는 그것이 아마도 코압이라고 말하는 레이블을 언급하는 이유입니다).

이 인스턴스의 조언은 무시해도 좋으며 특히 잘 실행되고 동일한 결과를 반환하므로이 조언을 무시합니다.

0

두 번째 쿼리에서 하위 쿼리의 이름이 지정되지 않습니다. 별칭을 지정하십시오. 예 :

SELECT product_id, prod.name name, sample_id 
    FROM (SELECT sample_id, product_id FROM lims.sample) samp 
     JOIN lims.product prod 
      USING (product_id)