응용 프로그램에서 SQL 맵을 실행하려고하면 유효하지 않은 열 이름이 나타납니다. 기본적으로 나는 두개의 분리 된 매핑 파일을 가지고있다. 기본적으로 다른 이름을 가진 컬럼을 만드는 것을 제외하고는 같은 일을한다. 이 문제를 설명하기 위해 DROP TABLE을 목적 밖으로 쫓아 버렸습니다. 나는 이것이 나쁜 습관이라는 것을 알고 있지만 이것이 왜 일어나는지를 찾고있다. 이후 모든 SQL 맵에서 테이블을 명시 적으로 삭제하여이 동작을 수정했습니다.iBatis가 임시 테이블이있는 columnName을 유효하지 않습니다.
에 Query1 :
<select id="Query1" parameterClass="query1Criteria">
IF Object_Id('tempdb..##severity') IS NOT NULL
BEGIN
DROP TABLE ##severity
END
CREATE TABLE ##severity(valueCode VARCHAR(255) NOT NULL, displayOrder INT NOT NULL)
INSERT INTO ##severity
SELECT DISTINCT valueCode,MAX(displayOrder) FROM DataDictionaryValue
WHERE zoneID = #zoneID# AND categoryCode = 'SEVERITY'
GROUP BY valueCode
SELECT valueCode FROM ##severity
</select>
질의 2 :
<select id="Query2" parameterClass="query2Criteria">
IF Object_Id('tempdb..##severity') IS NOT NULL
BEGIN
DROP TABLE ##severity
END
CREATE TABLE ##severity(severityCode VARCHAR(255) NOT NULL, displayOrder INT NOT NULL)
INSERT INTO ##severity
SELECT DISTINCT valueCode,MAX(displayOrder) FROM DataDictionaryValue
WHERE zoneID = #zoneID# AND categoryCode = 'SEVERITY'
GROUP BY valueCode
SELECT severityCode FROM ##severity
</select>
응용 프로그램에서, 나는 Query1을 실행합니다. 잘 실행되고 SQL Management Studio에서 임시 테이블이 생성 된 것을 볼 수 있습니다. 그럼 난 QUERY2을 실행하고 다음 스택 추적 얻을 : 나는 SMS에서 QUERY2의 SQL을 실행하면
org.springframework.jdbc.BadSqlGrammarException: SqlMapClient operation; bad SQL grammar []; nested exception is com.ibatis.common.jdbc.exception.NestedSQLException:
--- The error occurred in com/test/model/safety/reports/Query2Map.xml.
--- The error occurred while applying a parameter map.
--- Check the Query2.getResults-InlineParameterMap.
--- Check the statement (query failed).
--- Cause: java.sql.SQLException: Invalid column name 'severityCode'.
at org.springframework.jdbc.support.SQLErrorCodeSQLExceptionTranslator.translate(SQLErrorCodeSQLExceptionTranslator.java:276)
at org.springframework.orm.ibatis.SqlMapClientTemplate.execute(SqlMapClientTemplate.java:212)
at org.springframework.orm.ibatis.SqlMapClientTemplate.executeWithListResult(SqlMapClientTemplate.java:249)
at org.springframework.orm.ibatis.SqlMapClientTemplate.queryForList(SqlMapClientTemplate.java:296)
at com.test.model.BaseSqlMapDao.executeQueryForList(BaseSqlMapDao.java:53)
at com.test.model.safety.reports.Query2SqlMapDao.getOpenIssues(Query2SqlMapDao.java:124)
at com.test.model.safety.reports.Query2SqlMapDao.getResults(Query2SqlMapDao.java:50)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
, 그것은 제대로 실행됩니다. 사실이 두 가지 쿼리는 모두 SMS에서 올바르게 실행됩니다. iBatis가 어떻게 작동하는지 이해할 수 없지만, iBatis는 Query1에서 생성 된 임시 테이블을보고 해당 스키마에 대해 Query2의 구문을 유효하게합니다.이 경우 잘못된 열 이름 예외가 발생합니다. 그러나 이것은 iBatis가 임시 테이블에 대한 참조를 유지하고 있음을 의미합니다. 임시 테이블은 연결에 적용되는 SQL 서버 패러다임과 모순됩니다.
아무도 무슨 일이 일어나고 있는지 설명 할 수 있습니까?
테이블 변수가 작동하지만 임시 테이블을 사용할 때 왜이 예외가 발생했는지 파악하려고했습니다. 테이블 변수가 적절하지 않은 다른 상황 (대용량 데이터 세트)이 있기 때문에 제 자신의 덕목에 대해 무엇이 일어나는지 이해하려고했습니다. –