近期有个需求,需要读取CSV文件,然后将数据插入到数据库(ORACLE)中。
个人的思路是将CSV文件读取出来保存成List,之后使用MyBatis的foreach来进行数据的插入。
但是却出现了 ORA-00933:Oracle 命令未正确结束的异常。
我出现这个错误的原因是因为使用了MySQL的批量插入语句,改成Oracle的问题就解决了。
<insert id="addPCLoginLogByList" parameterType="java.util.List">
INSERT INTO T_PC_LOGIN_LOG
(
ID,
LOGIN_IP,
LOGIN_USERNAME,
LOGIN_TIME,
ATTRIBUTE1,
ATTRIBUTE2,
ATTRIBUTE3,
ATTRIBUTE4,
ATTRIBUTE5,
ATTRIBUTE6,
ATTRIBUTE7,
LOGIN_SYSTEM
)
SELECT SEQ_PC_LOGIN_LOG.NEXTVAL ID,T.* FROM(
<foreach collection="list" item="item" index="index" separator="UNION ALL">
SELECT
#{item.loginIp} LOGIN_IP,
#{item.loginUsername} LOGIN_USERNAME,
to_date(#{item.loginTime},'YYYY-MM-DD HH24:MI:SS') LOGIN_TIME,
#{item.attribute1,jdbcType=VARCHAR} ATTRIBUTE1,
#{item.attribute2,jdbcType=VARCHAR} ATTRIBUTE2,
#{item.attribute3,jdbcType=VARCHAR} ATTRIBUTE3,
#{item.attribute4,jdbcType=VARCHAR} ATTRIBUTE4,
#{item.attribute5,jdbcType=VARCHAR} ATTRIBUTE5,
#{item.attribute6,jdbcType=VARCHAR} ATTRIBUTE6,
#{item.attribute7,jdbcType=VARCHAR} ATTRIBUTE7,
#{item.loginSystem} LOGIN_SYSTEM
FROM DUAL
</foreach>
) T
</insert>