Mybatis를 Oracle 데이터베이스에 일괄 적으로 추가하고 수정할 때 발생하는 문제

일괄 추가 방법을 작성했습니다.

           INSERT INTO CRD_SUBSIDY_AMOUNT (  
              	id,  
              	DELETED,  
              	CREATED_BY,  
              	CREATED_DATE,  
              	ORGANIZATION_ID,  
              	REMARK,  
              	SUBSIDY_GRANT_AMT,  
              	MONTH_OF_YEAR,  
              	SURPLUS_AMT,  
              	USED_AMT,  
              	AMOUNT_ID,  
              	ALLOW_USED_SUBSIDY_AMT,  
              	STAFF_ID,  
              	STAFF_NAME   
              )  
              VALUES  
            <foreach collection='subsidyAmounts' item='item' index='index' separator=','>  
             (  
               #{ item.id }, 
               #{ item.del }, 
               #{ item.createdBy },    
               #{ item.createdDate }, 
               #{ item.organizationId }, 
               #{ item.remark } ,  
               #{ item.subsidyGrantAmt }, 
               #{ item.monthOfYear }, 
               #{ item.surplusAmt }, 
               #{ item.usedAmt }, 
               #{ item.amountId },  
              	#{ item.allowUsedSubsidyAmt },  
              	#{ item.staffId }, 
               #{ item.staffName }   
              	)
						</foreach>

실행 중 이유없이 오류보고

SQL이 올바르게 종료되지 않았다고 가정하십시오.

나중에 이것이 Mysql 용 SQL이라는 것을 알았습니다.

그래서 SQL을 변경했습니다.


INSERT INTO CRD_SUBSIDY_AMOUNT (  
		id,  
		DELETED,  
		CREATED_BY,  
		CREATED_DATE,  
		ORGANIZATION_ID,  
		REMARK,  
		SUBSIDY_GRANT_AMT,  
		MONTH_OF_YEAR,  
		SURPLUS_AMT,  
		USED_AMT,  
		AMOUNT_ID,  
		ALLOW_USED_SUBSIDY_AMT,  
		STAFF_ID,  
		STAFF_NAME   
	)  
SELECT  A.*
FROM(
<foreach collection="list" item="item" index="index" separator="UNION ALL">
 SELECT
			 #{ item.id,jdbcType=VARCHAR } id,  
			 #{ item.del ,jdbcType=NUMBER} DELETED, 
			 #{ item.createdBy,jdbcType=VARCHAR } CREATED_BY,    
			 #{ item.createdDate,jdbcType=TIMESTAMP} CREATED_DATE, 
			 #{ item.organizationId,jdbcType=VARCHAR } ORGANIZATION_ID, 
			 #{ item.remark,jdbcType=VARCHAR } REMARK,  
			 #{ item.subsidyGrantAmt,jdbcType=VARCHAR } SUBSIDY_GRANT_AMT, 
			 #{ item.monthOfYear,jdbcType=VARCHAR } MONTH_OF_YEAR, 
			 #{ item.surplusAmt ,jdbcType=VARCHAR} SURPLUS_AMT, 
			 #{ item.usedAmt,jdbcType=VARCHAR } USED_AMT, 
			 #{ item.amountId ,jdbcType=VARCHAR} AMOUNT_ID,  
			 #{ item.allowUsedSubsidyAmt,jdbcType=VARCHAR } ALLOW_USED_SUBSIDY_AMT,  
			 #{ item.staffId,jdbcType=VARCHAR } STAFF_ID, 
			 #{ item.staffName,jdbcType=VARCHAR } STAFF_NAME  
     FROM dual
   </foreach>
   )A

 

실행 후 오류가보고되었습니다.

매퍼 메서드 'xxx'에 지원되지 않는 반환 유형이 있습니다.

이러한 종류의 오류는 SQL 문이 성공적으로 실행되었지만 반환 유형이 잘못되었음을 나타냅니다.

해결책:

삽입, 삭제 및 업데이트 작업은 기본적으로 int 유형의 정수를 반환하며 추가, 삭제 및 수정을위한 인터페이스를 int 또는 void로 변경할 수 있습니다.

선택 작업에 ​​의해 반환되는 유형은 사용자 지정지도 또는 목록 일 수 있습니다.

반환 값 유형을 변경하십시오.

 

그 후 일괄 수정을 작성했습니다.

                 <foreach collection='list' item='item' index='index' open='begin' 
                         close=';end;' separator=';'> 
                         update CRD_SUBSIDY_AMOUNT t 
                         set 
                         t.ALLOW_USED_SUBSIDY_AMT=#{item.allowUsedSubsidyAmt}, 
                         t.LAST_MODIFIED_BY='system', 
                         t.LAST_MODIFIED_DATE=sysdate 
                         where t.STAFF_ID = #{item.staffId} 
                     </foreach> 

 

 

추신 : Oracle 데이터베이스이기 때문에 now () 함수 는 새로운 시간 필드와 수정 된 시간 필드에 사용할 수 없으므로 sysdate 함수 가 작성 됩니다.

추천

출처blog.csdn.net/admin123404/article/details/107207125