You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Oracle 12c存储过程实现表列数据交叉置换需求

Oracle 12c存储过程实现列数据置换

需求回顾

我们需要把原始表的数据按规则完成列间置换:

原始表结构及数据:

Col1 Col2 Col3 Col4
1    abc  111  AAA
2    def  222  BBB
3    dhi  333  CCC

目标表结构及数据:

Col1 Col2 Col3 Col4
AAA  111  abc  1
BBB  222  def  2
CCC  333  dhi  3

置换规则:

  • Col1的原始数据移至Col4
  • Col2的原始数据移至Col3
  • Col3的原始数据移至Col2
  • Col4的原始数据移至Col1

存储过程实现

直接上可运行的存储过程代码,这里不需要临时表或额外变量——Oracle的UPDATE语句会基于更新前的行数据完成所有列赋值,不会出现中间覆盖的问题:

CREATE OR REPLACE PROCEDURE swap_columns_proc
IS
BEGIN
    -- 执行列数据置换
    UPDATE your_table_name
    SET 
        Col1 = Col4,
        Col2 = Col3,
        Col3 = Col2,
        Col4 = Col1;
    
    -- 提交事务(若不需要自动提交,可删除此句让调用者自行控制)
    COMMIT;
    
    DBMS_OUTPUT.PUT_LINE('列数据置换完成,共更新了 ' || SQL%ROWCOUNT || ' 行数据');
EXCEPTION
    WHEN OTHERS THEN
        ROLLBACK;
        DBMS_OUTPUT.PUT_LINE('置换过程出错:' || SQLERRM);
        RAISE;
END swap_columns_proc;
/

关键说明

  • 记得把代码里的your_table_name替换成你实际的表名
  • Oracle的UPDATE逻辑很贴心:所有SET子句的赋值都基于该行更新前的状态,不用担心Col1被修改后影响Col4的取值,一步到位就能完成置换
  • 异常处理部分做了回滚和错误提示,避免出现数据不一致的情况
  • SQL%ROWCOUNT可以返回本次更新的行数,方便你确认操作效果

执行与验证

执行存储过程:

SET SERVEROUTPUT ON;
EXEC swap_columns_proc;

验证结果:

SELECT Col1, Col2, Col3, Col4 FROM your_table_name;

运行后就能看到符合要求的目标数据啦!

内容的提问来源于stack exchange,提问作者Lakshmi Vinod

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 04:01:57