본문 바로가기
IT 개발/에러

[Oracle] ORA-00957: 열명이 중복되었습니다

by Dev.Jeon 2023. 3. 3.
반응형

에러메시지

ORA-00957: 열명이 중복되었습니다

 

현상/원인

		MERGE INTO T_MANAGER_INFO
		USING DUAL
		   ON (CODE = #{code} AND IN_YN = 'Y' AND USER_SEQ = #{userSeq})
		 WHEN MATCHED THEN
		UPDATE SET
			  USER_ID = #{userId, jdbcType=VARCHAR}
			, NAME = #{name, jdbcType=VARCHAR}
			, ORG_CD = #{orgCd, jdbcType=VARCHAR}
			, USE_YN = #{useYn}
			, REG_ID = #{insertSabun, jdbcType=VARCHAR}
			, MDFR_NM = #{updateSabun, jdbcType=VARCHAR}
			, REG_DATE = TO_DATE(#{insertDate},'YYYY-MM-DD HH24:MI:SS')	
			, MOD_DATE = TO_DATE(#{updateDate},'YYYY-MM-DD HH24:MI:SS')	
		WHEN NOT MATCHED THEN
		INSERT(
			SEQ
			, USER_SEQ
			, USER_ID
			, NAME
			, ORG_CD
			, IN_YN
			, CODE
			, SYS_SEQ
			, REG_ID
			, MDFR_NM
			, REG_DATE
			, MOD_DATE
			, USE_YN
			, IN_YN
		) VALUES (
			  SEQ_T_MANAGER_INFO.NEXTVAL
			, #{userSeq}
			, #{userId, jdbcType=VARCHAR}
			, #{name, jdbcType=VARCHAR}
			, #{orgCd, jdbcType=VARCHAR}
			, 'Y'
			, #{code}
			, #{sysSeq}
			, #{insertSabun, jdbcType=VARCHAR}
			, #{updateSabun, jdbcType=VARCHAR}
			, TO_DATE(#{insertDate},'YYYY-MM-DD HH24:MI:SS')	
			, TO_DATE(#{updateDate},'YYYY-MM-DD HH24:MI:SS')	
			, #{useYn}
			, 'Y'
		)

데이터를 inser update 하는 merge문을 작성했습니다.

당연히 되겠지 하고 테스트를 했는데 열명이 중복되었다고 에러가 뜹니다.

 

자세히 보면 in_yn이라는 칼럼을 insert 에 두개 작성된 것을 확인 할 수 있습니다.

이미 넣은 컬럼을 한번 더 정의하니 중복이라고 뜨는 것입니다.

 

해결

		MERGE INTO T_MANAGER_INFO
		USING DUAL
		   ON (CODE = #{code} AND IN_YN = 'Y' AND USER_SEQ = #{userSeq})
		 WHEN MATCHED THEN
		UPDATE SET
			  USER_ID = #{userId, jdbcType=VARCHAR}
			, NAME = #{name, jdbcType=VARCHAR}
			, ORG_CD = #{orgCd, jdbcType=VARCHAR}
			, USE_YN = #{useYn}
			, REG_ID = #{insertSabun, jdbcType=VARCHAR}
			, MDFR_NM = #{updateSabun, jdbcType=VARCHAR}
			, REG_DATE = TO_DATE(#{insertDate},'YYYY-MM-DD HH24:MI:SS')	
			, MOD_DATE = TO_DATE(#{updateDate},'YYYY-MM-DD HH24:MI:SS')	
		WHEN NOT MATCHED THEN
		INSERT(
			SEQ
			, USER_SEQ
			, USER_ID
			, NAME
			, ORG_CD
			, IN_YN
			, CODE
			, SYS_SEQ
			, REG_ID
			, MDFR_NM
			, REG_DATE
			, MOD_DATE
			, USE_YN
		) VALUES (
			  SEQ_T_MANAGER_INFO.NEXTVAL
			, #{userSeq}
			, #{userId, jdbcType=VARCHAR}
			, #{name, jdbcType=VARCHAR}
			, #{orgCd, jdbcType=VARCHAR}
			, 'Y'
			, #{code}
			, #{sysSeq}
			, #{insertSabun, jdbcType=VARCHAR}
			, #{updateSabun, jdbcType=VARCHAR}
			, TO_DATE(#{insertDate},'YYYY-MM-DD HH24:MI:SS')	
			, TO_DATE(#{updateDate},'YYYY-MM-DD HH24:MI:SS')	
			, #{useYn}
		)

중복되는 컬럼을 지워주고 실행하니 잘 들어갑니다.

반응형

댓글