2013-04-08 2 views
2

동료가 우리가 신의 수없는 이유로 실패한 쿼리를 우리 모두에게 당혹스럽게 만들었습니다. ENOTE.EN_FILTER_VALUE_L.FILTER_VALUE_DECODE이 데이터베이스에 존재하는지 확인할 수 있습니다. 적어도 3 명이 철자가 틀린 것을 찾아 봤습니다.DB2 쿼리 알 수없는 열 이름 ERRORCODE = -4460, SQLSTATE = null

검색어 :

SELECT sub.ID, sub.USER_ID, sub.EN_TYPE_CODE, 
typ.EN_TYPE_DESC, typ.APPL_CD, filterval.FILTER_VALUE_DECODE AGENCY_TYPE, 
sub.EN_TYPE_CODE CONCAT ' | ' CONCAT typ.EN_TYPE_DESC ENOTE_STRING, 
org1.ORG_LVL1_CD, org1.ORG_LVL1_DC, 
org2.ORG_LVL2_CD, org2.ORG_LVL2_DC, 
org3.ORG_LVL3_CD, org3.ORG_LVL3_DC, 
org4.ORG_LVL4_CD, org4.ORG_LVL4_DC 
FROM ENOTE.EN_SUBSCRIPTION_T sub 
LEFT JOIN ENOTE.EN_TYPE_L typ ON sub.EN_TYPE_CODE = typ.EN_TYPE_CODE 
LEFT JOIN ENOTE.EN_FILTER_OFFICE_T filteroffice ON sub.ID = filteroffice.SUBSCRIPTION_ID 
LEFT JOIN UMC.ORG_LVL4_L org4 ON org4.ORG_LVL4_CD = filteroffice.ORG_LVL4_CODE 
     AND org4.ORG_LVL3_CD = filteroffice.ORG_LVL3_CODE 
     AND org4.ORG_LVL2_CD = filteroffice.ORG_LVL2_CODE 
     AND org4.ORG_LVL1_CD = filteroffice.ORG_LVL1_CODE 
     AND org4.STRUCTURE_CD = filteroffice.STRUCTURE_CODE 
LEFT JOIN UMC.ORG_LVL3_L org3 ON org3.ORG_LVL3_CD = filteroffice.ORG_LVL3_CODE 
     AND org3.ORG_LVL2_CD = filteroffice.ORG_LVL2_CODE 
     AND org3.ORG_LVL1_CD = filteroffice.ORG_LVL1_CODE 
     AND org3.STRUCTURE_CD = filteroffice.STRUCTURE_CODE 
LEFT JOIN UMC.ORG_LVL2_L org2 ON org2.ORG_LVL2_CD = filteroffice.ORG_LVL2_CODE 
     AND org2.ORG_LVL1_CD = filteroffice.ORG_LVL1_CODE 
     AND org2.STRUCTURE_CD = filteroffice.STRUCTURE_CODE 
LEFT JOIN UMC.ORG_LVL1_L org1 ON org1.ORG_LVL1_CD = filteroffice.ORG_LVL1_CODE 
     AND org1.STRUCTURE_CD = filteroffice.STRUCTURE_CODE 
LEFT JOIN ENOTE.EN_FILTER_VALUE_L filterval ON 
    (filteroffice.AGENCY_TYPE_CODE = filterval.FILTER_VALUE AND filterval.FILTER_NAME = 'Agency Type') 

예외 :

com.ibm.db2.jcc.a.SqlException [JCC] [10150] [10300] [4.3.111] 잘못된 매개 변수 : 알 수없는 열 이름 FILTER_VALUE_DECODE. ERRORCODE = -4460, SQLSTATE = null가

+0

하지만 잠깐! 그것은 더 심해진다. 이 쿼리는 동료의 워크 스테이션 중 하나에서 작동합니다. 동일한 코드 기반으로 표시됩니다. 우리의 환경은 동일하게 나타납니다. 이 동작은 일부 환경 차이를 나타냅니다. 또한 DB2 제어 센터에 붙여 넣을 때 쿼리가 작동한다고 언급해야합니다. – user1187719

+0

나는이 테이블에 대한 권한이 다른 테이블과 다를 가능성이 있으므로'ENOTE'에 대한 권한을 검사 할 것입니다. –

+0

좋은 생각이지만 우리 모두 개발 환경에서 동일한 사용자 (응용 프로그램 사용자)를 사용하며 하나는 작동하지만 다른 사용자는 실패합니다. 다른 SQL과 HQL은 문제없이이 테이블을 참조합니다. 이제는 동일한 코드에서 동일한 SQL을 실행하는 사용자가 성공적으로 실행할 수있는 것으로 나타났습니다. 해당 사용자는 드라이버/데이터 소스 구성이 약간 다르지만, 깨진 환경 중 하나를 변경하여 동일하게 적용하지 않았습니다. * 호각 Twilight Zone Theme * – user1187719

답변

2

여기 db2jcc4.jar Invalid parameter: Unknown column name이 질문을 묻는 다시하고 대답을 얻었다.

DB2 9.5 이상에서 Hibernate 3.x와 JCC 드라이버의 조합은 스펙 레벨이 일치하지 않습니다. Hibernate 4.x 로의 업그레이드는이 문제를 해결할 것이다. 그러나 단기간에 그렇게 할 수 없다면 useJDBC4ColumnNameAndLabelSemantics = 2의 커스텀 데이터 소스 프로퍼티가 문제를 해결한다.