1.Oracle 、SqlServer 不支持这种批量添加
insert into a (id,name) values
(1,'aaa'),
(2,'bbb')
2.Oracle支持这种添加方法
insert into a(id, name)
select 1, 'aaa' from dual
union select 2,'bbb' from dual
mapper层数据
/**
* 批量插入工单数据
*
* @param workOrders 列表数据
* @return 行数
*/
int batchInsert(@Param("list") List<WorkOrder> workOrders);
xml层数据
<insert id="batchInsert" parameterType="java.util.List" useGeneratedKeys="false">
insert into GL_WORK_ORDER (ID, WORK_NUMBER, WORK_NAME,
AREA_CODE, EQUIPMENT_CODE,EQUIPMENT_NAME ,WORK_DETAILS,
WORK_PHOTO, WORK_STATE, WORK_TYPE,
ALARM_RECORD_ID, SEND_TIME, SEND_USER,
WORK_CIRCULATION, FEEBACK_RESULT, IS_REPLACE,
IS_LSSUED, COMPREHENSIVE_REPLACE, EQUIPMENT_REPLACE_ID,
CREATE_BY, CREATE_BY_DEPT, CREATE_TIME,ASSIGN_DEPT_ID,
REASON,EVENT_NAME,STAKE_NUM,PATROL_ID,BROKEN_RECORD_ID
)
SELECT SEQ_GL_WORD.NEXTVAL,a.* FROM (
<foreach collection="list" item="item" separator="union all">
SELECT
#{item.workNumber},
#{item.workName},
#{item.areaCode},
#{item.equipmentCode},
#{item.equipmentName},
#{item.workDetails},
#{item.workPhoto},
#{item.workState},
#{item.workType},
#{item.alarmRecordId},
#{item.sendTime},
#{item.sendUser},
#{item.workCirculation},
#{item.feebackResult},
#{item.isReplace},
#{item.isLssued},
#{item.comprehensiveReplace},
#{item.equipmentReplaceId},
#{item.createBy},
#{item.createByDept},
#{item.createTime},
#{item.assignDeptId},
#{item.reason},
#{item.eventName},
#{item.stakeNum},
#{item.patrolId},
#{item.brokenRecordId}
FROM dual
</foreach>
) a
</insert>
4.Oracle提示错误:插入的值太大的问题
原来这与ORACLE的字符集设置有关。
字符集设置成ZHS16GBK:汉字占2个字节。
字符集设置成AL32UTF8:汉字占3个字节。
查询字符集:
select * from v$nls_parameters t where t.PARAMETER='NLS_CHARACTERSET';
5.Oracle和MySql varchar的不同处
oracle:varchar2(6)
mysql:varchar(6)
解释:oracle长度是6,只能存3个汉字;mysql设置成6,则可以存6个汉字(1个中文为2个字节)
区别:oracle长度表示字节长度,mysql的长度表示字符长度
字符大于字节:一个字符可以是一个英文,也可以是一个中文
6.Oracle数据表删除重复数据
delete from 表名 d1
where d1.rowid
< (select max(rowid) from
表名 d2 where d1.列名 = d2.列名)
7.Linux下Oracle导出数据
7.1找不到exp命令
编辑 /etc/profile文件 添加以下配置
# Oracle 修改配置
#Oracle安装位置
ORACLE_BASE=/opt/oracle; export ORACLE_BASE
#Oracle版本
ORACLE_HOME=$ORACLE_BASE/product/19c/dbhome_1; export ORACLE_HOME
ORACLE_SID=orcl; export ORACLE_SID
PATH=$ORACLE_HOME/bin:$PATH; export PATH
刷新配置
source /etc/profile
重新导出oracle数据
exp admin/admin@mywork file=/opt/zdgl.dmp full=y
8.MyBatis中Oracle的in函数不能高于1000解决办法
8.1使用MyBatis的 if 标签来解决
<select id="findByGalleryRegisterIds" resultMap="BaseResultMap">
select <include refid="Base_Column_List"/>
from GL_GALLERY_KEY
where GALLERY_REGISTER_ID in
<foreach item="id" collection="galleryRegisterIds" open="(" separator="," close=")" index="index">
<if test="(index % 999) == 998"> NULL) OR GALLERY_REGISTER_ID IN(</if>#{id}
</foreach>
</select>
9.列名是数据库中关键字导致sql失败
列名使用 ``引用起来
-
如果使用的是mybatis-plus,解决办法如下
@TableField("`asc`") private String asc;
-
如果使用的是mybatis的话
select `asc` from test