2012-08-16 4 views
0

내가 함께 여러 차례에 별칭을 통해 테이블을 참조하는 쿼리를 가하고있어, 그러나 그 다음 상태로 진행 ​​:오라클 SQL 쿼리 - 제발 도와주세요

* ORA-00904 : "MPAN_STATUS" "MPANCORE". : 유효하지 않은 식별자 00904. 00000 - "% s의 : 유효하지 않은 식별자" * 원인 :
작업 : 라인에서 오류 : 43 칼럼 : 126

쿼리는 다음과 같다 :

SELECT readings.mpancore, mtds.meterid, (SELECT CASE 
                WHEN meter_type 
                LIKE 'RCAM%' AND 
                 retrieval_method = 'R' 
                THEN 'TRUE' 
                ELSE 'FALSE' END 
                FROM edmgr.mtds 
               WHERE meter_removed IS NULL) "IS_SMART", 
              (SELECT CASE 
                WHEN flowversion = 'D0010'   AND 
                 readings.filename IS NOT NULL AND 
                 readings.filedate >= mpan_status.ssd 
                THEN 'TRUE' 
                ELSE 'FALSE' END 
                FROM edmgr.readings, edmgr.mpan_status 
               WHERE readings.mpancore = mpan_status.mpancore) "D0010_RECEIVED", 
              (SELECT CASE 
                WHEN effective_from_date >= mpan_status.ssd AND 
                 dc_id = mpan_status.confirmed_dc_id   
                THEN 'TRUE' 
                ELSE 'FALSE' END 
                FROM edmgr.D0019_reg, edmgr.mpan_status) "D0019_RECEIVED", 
              (SELECT CASE 
                WHEN file_date_time <= SYSDATE-409  
                THEN 'TRUE' 
                ELSE 'FALSE' END 
                FROM edmgr.D0019_reg) "RF_READ", 
              (SELECT CASE 
                WHEN file_date_time <= SYSDATE-220  
                THEN 'TRUE' 
                ELSE 'FALSE' END 
                FROM edmgr.D0019_reg) "R3_READ", 
              (SELECT CASE 
                WHEN file_date_time <= SYSDATE-118  
                THEN 'TRUE' 
                ELSE 'FALSE' END 
                FROM edmgr.D0019_reg) "R2_READ", 
              (SELECT CASE 
                WHEN file_date_time <= SYSDATE-56   
                THEN 'TRUE' 
                ELSE 'FALSE' END 
                FROM edmgr.D0019_reg) "R1_READ" 
     FROM edmgr.mpan_status "mpan_status" LEFT JOIN edmgr.D0019_reg "D0019" ON mpan_status.mpancore = D0019.metering_system_id 
              LEFT JOIN edmgr.readings "readings" ON mpan_status.mpancore = readings.mpancore 
              LEFT JOIN edmgr.mtds "mtds"   ON readings.mpancore = mtds.mpancore 
                AND D0019.metering_system_id       = mtds.mpancore 
                AND mtds.meterid          = readings.meterid 

저는 정말 초보자이기 때문에 도움을 주시면 대단히 감사하겠습니다.

답변

0

ORA-00904 error 정의 시작하자 : (. 인수에서, 당신은 따옴표로 mpan_status을 넣어)

또한

ORA-00904 string: invalid identifier Cause: The column name entered is either missing or invalid.

Action: Enter a valid column name. A valid column name must begin with a letter, be less than or equal to 30 characters, and consist of only alphanumeric characters and the special characters $, _, and #.

If it contains other characters, then it must be enclosed in double quotation marks. It may not be a reserved word.

이 될 것 대소 문자 구분 문제를 오라클에서 열 이름은 대소 - 인용 부호로 묶을 때만 - 민감합니다.

편집 :

여기 (ANSI 조인의 사용을 피하고, 서브 쿼리) 내가 쿼리를 작성합니다의 제안입니다.

SELECT readings.mpancore, 
     mtds.meterid, 
     CASE 
      WHEN meter_type LIKE 'RCAM%' AND retrieval_method = 'R' THEN 'TRUE' 
      ELSE 'FALSE' 
     END AS "IS_SMART" 
FROM edmgr.mpan_status, 
     edmgr.mtds, 
     edmgr.D0019_reg, 
     edmgr.readings 
WHERE mpan_status.mpancore = D0019_reg.metering_system_id 
    AND mpan_status.mpancore = readings.mpancore 
    AND readings.mpancore = mtds.mpancore 
    AND D0019_reg.metering_system_id = mtds.mpancore; 
+0

아침 Pjama, 답변 해 주셔서 대단히 감사합니다. 그러나 저는 대소 문자를 구분했으며 이는 쿼리 전체에서 일관됩니다 - 대문자를 사용하는 오류 코드 일뿐입니다! 쿼리의 모든 텍스트를 대문자로 변환해야합니까? – HendrixAndChill

+0

아니요, 모두 대문자로 변환하지 마십시오. 대문자의 불일치가 있는지 확인하십시오. 모든 조인에서 테이블 별칭을 만드는 이유가 있습니까? (예를 들어, edmgr.D0019_reg "D0019"... D0019.metering_system_id로 참조하십시오.) – pjama

+0

별칭을 피하십시오 (지금은 쿼리를 단순화하기 위해). D0019 별칭 대신 D0019_reg를 사용하십시오. – pjama

관련 문제