oracle mybatis 批量插入遇到的问题
1、这是一个很蛋疼的问题,用<insert>的话会一直报sql语法错误,我这里改用<update>测试OK,用<select>貌似也行
2、批量插入带oracle序列递增遇到的错误:java.sql.SQLSyntaxErrorException: ORA-02287: 此处不允许序号
查资料说有很多限制
Restrictions on Sequence Values You cannot use CURRVAL and NEXTVAL in the
following constructs:
■ A subquery in a DELETE, SELECT, or UPDATE statement
■ A query of a view or of a materialized view
■ A SELECT statement with the DISTINCT operator
■ A SELECT statement with a GROUP BY clause or ORDER BY clause
■ A SELECT statement that is combined with another SELECT statement with the
UNION, INTERSECT, or MINUS set operator
■ The WHERE clause of a SELECT statement
■ The DEFAULT value of a column in a CREATE TABLE or ALTER TABLE statement
■ The condition of a CHECK constrain
在mybatis <foreach>外边再套一层解决
<update id="insertBatch" parameterType="java.util.Map" > insert into T_CARD_MAGNETIC_DATA (RECORD_NO, ORDER_NO, ISSUE_ORG_CODE, MANUFACTURER_RECORD_NO, CARD_NO, CARD_BIN, CARD_TYPE, FIRST_STRIPE, SECOND_STRIPE, THIRD_STRIPE, FACE_VALUE, VALID_DATE, SERVICE_CODE, CARD_CVN, INIT_PWD, CREATE_UID, CREATE_TIME, SYN_FLAG, SYN_FROM_TIME, SYN_TO_TIME) select seq.nextval,A.* from( <foreach collection="cards" item="item" index="index" separator="union all"> select #{cardOrder.orderNo,jdbcType=VARCHAR}, #{cardOrder.issueOrgCode,jdbcType=VARCHAR}, #{cardOrder.manufacturerRecordNo,jdbcType=DECIMAL}, #{item.cardNo,jdbcType=VARCHAR}, #{cardOrder.cardBin,jdbcType=VARCHAR}, #{cardOrder.cardType,jdbcType=VARCHAR}, #{firstStripe,jdbcType=VARCHAR}, #{secondStripe,jdbcType=VARCHAR}, #{thirdStripe,jdbcType=VARCHAR}, #{cardOrder.faceValue,jdbcType=DECIMAL}, #{cardOrder.validDate,jdbcType=DATE}, #{serviceCode,jdbcType=CHAR}, #{cardCvn,jdbcType=CHAR}, #{item.initPwd,jdbcType=VARCHAR}, #{createUid,jdbcType=VARCHAR}, #{createTime,jdbcType=TIMESTAMP}, #{synFlag,jdbcType=CHAR}, #{synFromTime,jdbcType=TIMESTAMP}, #{synToTime,jdbcType=TIMESTAMP} from dual </foreach> )A </update>
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。