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
相关产品推荐
相关产品推荐

