背景:项目中遇到大表关联修改数据,DBA建议通过临时表关联修改;之前是大表 WHERE ID IN (目标ID),通过传入list的ID来操作的。
数据库:Oracle
操作过程中的重要的点:mybatis 建临时表、数据导入到临时表、获取临时表的数据、根据临时表关联修改大表、删除临时表(或者清空临时表数据)
针对以上几点XML脚本示例如下:
建临时表---空表:
<update id="createTmpTable" >
create table ${tableName} (
ID NUMBER NULL ,
NAME VARCHAR2(20) NULL ,
AGE NUMBER(2) NULL
)
</update>
建临时表---即时导入数据:
<update id="createTmpTable">
CREATE TABLE ${tableName} AS
SELECT ID,NAME,AGE
FROM USERS
WHERE
AGE <18
</update>
往临时表内插入数据:
<insert id="insertTmpTable" >
INSERT INTO ${tableName}(
ID,NAME,AGE )
SELECT ID,NAME,AGE
FROM USERS
WHERE
AGE <18
</insert>
删除临时表:
<update id="dropTmpTable" >
DROP TABLE ${tableName} purge
</update>
清空临时表数据:
<update id="truncateTmpTable" >
TRUNCATE TABLE ${tableName}
</update>
根据DBA建议Oracle中最好使用固定表,临时表删除时一定要带purge才能清理干净库日志;
其它操作同正常表一样。