ORACLE:主键重复,循环查出批量修改

前提:oracle表主键没有进行唯一标识,导致主键重复,根据主键查询数据报错
优化:批量修改主键重复的字段,进行修改
缺陷:该方法只能适用于没有关联其他表的数据,否则会丢失数据

declare
    balance_Id number;
begin
    --循环info记录中的主键查询重复的数据(查询结果集循环)--
    for item in (select * from (select INFO_ID, count(1) num from INFO I group by INFO_ID) where num > 1)
        loop
            -- 将查询到的数据赋值给变量 --
            balance_Id := item.INFO_ID;
            update INFO set INFO_ID=INFO_SEQ.nextval where INFO_ID = balance_Id;

        end loop;
end ;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在 MyBatis-Plus 中处理 Oracle 数据库的联合大数据量批量更新,可以按照以下步骤进行操作: 1. 确保你已经定义了对应的实体类,并在实体类中使用 `@TableId` 注解标识联合字段。 ```java @Data @TableName("your_table_name") public class YourEntity { @TableId(type = IdType.INPUT) private Long key1; @TableId(type = IdType.INPUT) private Long key2; // 其他属性 } ``` 2. 创建一个 Mapper 接口,继承自 `BaseMapper` 并指定实体类作为泛型参数。 ```java @Repository public interface YourMapper extends BaseMapper<YourEntity> { } ``` 3. 在 Service 层中使用 MyBatis-Plus 提供的方法进行批量更新操作。具体来说,可以使用 `updateBatchById` 方法。 ```java @Service public class YourService { private final YourMapper yourMapper; @Autowired public YourService(YourMapper yourMapper) { this.yourMapper = yourMapper; } public void batchUpdate(List<YourEntity> entityList) { yourMapper.updateBatchById(entityList); } } ``` 4. 在 Oracle 数据库中,由于不支持直接使用 `(key1, key2) in` 的语法,可以通过使用临时表来实现批量更新。首先,创建一个临时表,用于存储批量更新的数据。 ```sql CREATE GLOBAL TEMPORARY TABLE temp_table ( key1 NUMBER, key2 NUMBER ) ON COMMIT PRESERVE ROWS; ``` 5. 接下来,在批量更新方法中使用原生 SQL 来执行批量更新操作。 ```java @Repository public interface YourMapper extends BaseMapper<YourEntity> { @Update("INSERT INTO temp_table (key1, key2) VALUES (#{item.key1}, #{item.key2})") void insertIntoTempTable(@Param("item") YourEntity item); @Update("UPDATE your_table_name t SET column1 = ?, column2 = ? WHERE EXISTS (SELECT 1 FROM temp_table WHERE t.key1 = temp_table.key1 AND t.key2 = temp_table.key2)") void batchUpdate(); } ``` 在上述示例中,我们使用 `insertIntoTempTable` 方法将批量更新的数据插入临时表中,然后使用 `batchUpdate` 方法执行批量更新操作。在 `batchUpdate` 方法中,我们使用原生 SQL 来更新目标表的数据,通过与临时表的关联来实现根据联合批量更新的效果。 最后,调用 `batchUpdate` 方法即可执行批量更新操作。 请确保在配置文件中配置好数据库连接信息和相关的 MyBatis-Plus 配置。希望对你有所帮助!如果有任何疑问,请随时提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值