데이터 형식 varchar을(를) varbinary(으)로 암시적으로 변환할 수 없습니다. 1 4 17,712

by mp5navy [SQLServer] varbinary 암시적 [2016.05.16 13:25:42]


티베로의 데이터를 mssql로 넣는 작업중에 발생한 오류 사항입니다.(mybatis, 전자정부프레임웤 사용)

오류메세지:데이터 형식 varchar을(를) varbinary(으)로 암시적으로 변환할 수 없습니다. convert 함수를 사용하여 이 쿼리를 실행하십시오

티베로와 mssql을 연동할 테이블명은 동일하고 java에서 db커넥션을 이용하여 데이터를 넣는 작업입니다.

매번 발생하는것이 아니라 간헐적으로 발생하고 있습니다.

 

오류가 나는 곳은 이 부분입니다.

 <insert id="rcmsDao.FAMH0130_SAVE00" parameterClass="inMap">
 <selectKey keyProperty="N_EXCTN_REG_SEQ" resultClass="java.lang.String">
 <![CDATA[
  SELECT ISNULL(MAX(EXCTN_REG_SEQ), 0) + 1
      AS EXCTN_REG_SEQ
    FROM IF_RCMS_BEEX_L_A
   WHERE PMS_ID = #PMS_ID#
     AND AGRMT_SEQ_NO = #AGRMT_SEQ_NO#
     AND AGRMT_INST_ID = #AGRMT_INST_ID#
     AND EXCTN_REG_DT = #EXCTN_REG_DT#
 ]]>
 </selectKey>
 <![CDATA[
  INSERT INTO IF_RCMS_BEEX_L_A (
    PMS_ID       
   ,AGRMT_SEQ_NO     
   ,AGRMT_INST_ID     
   ,EXCTN_REG_DT     
   ,EXCTN_REG_SEQ     
   ,EXCTN_REG_TM     
   ,BZ_EXP_EXCTN_PROC_ST
   ,RCV_BNK_CD      
   ,RCV_ACCT_NO     
   ,RCH_EXP_ACCT_RCV_PSBK_PRT_CTT 
   ,RCH_EXP_ACCT_WDRW_PSBK_PRT_CTT 
   ,BZAQ_ACCT_RCV_PSBK_PRT_CTT  
   ,TRNS_AMT      
   ,SPLY_AMT      
   ,VAT_AMT      
   ,INST_USE_CD     
   ,INST_USE_CD_1     
   ,OWAC_NM      
   ,TEL_NO       
   ,FRC_TRSC_YN     
   ,ERP_CD_1      
   ,ERP_CD_2      
   ,ERP_CD_3      
   ,ERP_CD_4      
   ,LNK_ST       
   ,LNK_REG_DTM     
  ) VALUES (
     #PMS_ID#
    ,#AGRMT_SEQ_NO#
    ,#AGRMT_INST_ID#
    ,#EXCTN_REG_DT#
    ,#N_EXCTN_REG_SEQ#
    ,#EXCTN_REG_TM#
    ,#BZ_EXP_EXCTN_PROC_ST#
    ,#RCV_BNK_CD#
    ,dbo.SF_ENCRYPT(#RCV_ACCT_NO#)
    ,#RCH_EXP_ACCT_RCV_PSBK_PRT_CTT#
    ,#RCH_EXP_ACCT_WDRW_PSBK_PRT_CTT#
    ,#BZAQ_ACCT_RCV_PSBK_PRT_CTT#
    ,#TRNS_AMT#
    ,#SPLY_AMT#
    ,#VAT_AMT#
    ,#INST_USE_CD#
    ,#INST_USE_CD_1#
    ,#OWAC_NM#
    ,#TEL_NO#
    ,ISNULL(#FRC_TRSC_YN#, 'N')
    ,#ERP_CD_1#
    ,#ERP_CD_2#
    ,#ERP_CD_3#
    ,#ERP_CD_4#
    ,#LNK_ST#
    ,GETDATE()
  )
 ]]>
 </insert>

무엇때문에 해당 오류가 나는지 알 수 없어 문의드립니다.

by 마농 [2016.05.16 13:47:22]

우선 해당 테이블 컬럼 중 varbinary 항목이 무었인지 확인하세요.
아마도 RCV_ACCT_NO 가 아닐까 생각되네요.
이 RCV_ACCT_NO 항목의 자료형이 VARBINARY(16) 이라고 가정하고,
이 항목에 대한 입력값을 CAST 나 CONVERT 함수를 이용해 명시적으로 형변환 해주세요.
CAST(dbo.SF_ENCRYPT(#RCV_ACCT_NO#) AS VARBINARY(16))
CONVERT(VARBINARY(16), dbo.SF_ENCRYPT(#RCV_ACCT_NO#))


by mp5navy [2016.05.16 14:10:41]
답변 감사합니다.

PMS_ID char
AGRMT_SEQ_NO varchar
AGRMT_INST_ID varchar
EXCTN_REG_DT char
EXCTN_REG_SEQ decimal
EXCTN_REG_TM char
RCMS_EXCTN_REG_TM char
EXCTN_EXEC_DT char
EXCTN_EXEC_TM char
BZ_EXP_EXCTN_PROC_ST char
RPRCS_NCNT decimal
BZ_EXP_EXCTN_ERR_CD varchar
BZ_EXP_EXCTN_ERR_CTT varchar
RCV_BNK_CD char
RCV_ACCT_NO varchar
TRNS_AMT decimal
SPLY_AMT decimal
VAT_AMT decimal
SRV_FEE decimal
COMM decimal
INST_USE_CD varchar
INST_USE_CD_1 varchar
OWAC_NM varchar
TEL_NO varchar
FRC_TRSC_YN char
RCMS_DCTC_REG_YN char
ERP_CD_1 varchar
ERP_CD_2 varchar
ERP_CD_3 varchar
ERP_CD_4 varchar
LNK_ST char
LNK_REG_DTM datetime
LNK_PROC_DTM datetime

컬럼들의 데이터 타입은 위와 같습니다.

데이터 타입이 varbinary가 아닌데도 저런 오류가 날 수가 있나요?

간헐적으로 생기는 오류라 정확히 어떤 부분에서 오류가 나는지 애매하네요..


by 마농 [2016.05.16 14:24:20]

혹시 해당 함수 입력인자의 타입이 그거 아닐까요?

dbo.SF_ENCRYPT(CAST(#RCV_ACCT_NO# AS VARBINARY(16)))


by mp5navy [2016.05.16 14:34:02]

네... 맞네요ㅠ 감사합니다. 함수의 인자가 varbinary(255)로 되어있네요.

답변 감사드립니다^^

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입