前几天在CSDN里看到
交换表内两列数据的方法,
update table table_name set col1=col2,col2=col1;
觉得很好(现在找不到了,呵呵),只是不知道其中的原理,col1中的值不是被覆盖了吗,怎么还能实现交换呢?不解,
交换表内两列数据的方法,
update table table_name set col1=col2,col2=col1;
觉得很好(现在找不到了,呵呵),只是不知道其中的原理,col1中的值不是被覆盖了吗,怎么还能实现交换呢?不解,
解决方案 »
- 调用存储过程
- 求一个sql语句的些法
- 存储过程中有一数组,想让其成为某一个表的字段,该如何进行
- 动态表面(表明在其他表的字段中)
- 急:如何把oracle中的blob转为本地的jpg文件,请求存储过程,望详细。解决立即送分!
- 我在oem中利用向导进行备份,生成的job总是失败,都不成功,在配制的参数里已经将job_queue_processes设置为大于0的了,在sql/plus中手工
- 求助:IBM x225 志强2.8G,安装oracle9i出错
- 如何将数据导出成xml格式?
- 如何备份和恢复sys表空间下的表、数据、存储过程等。谢谢(70分)
- 急!急!ORACLE 跑PAC成本 期间平均成本时报错,怎么处理?
- undo_management是“AUTO”。为什么OEM中的 “段管理”是MANUAL?
- 一道小的问题....关于查询的...高手来帮帮忙...谢谢了
这就是既有原值,以又变量,所以它能够更新;
这就是既有原值,以又变量,所以它能够更新;
set col1=col2时,
第一步:把col1的值放到回滚段,
第二步:用col2的值覆盖col1原来的空间col2=col1时,(此时不会去访问回滚段,因为是同一事务,且没有rollback);
因为此时col1的空间存放的是col2的值,所以col2的值还是col2的值(没变);
mov col2 buffer2;--此时由于未提交,col1和col2的值仍然不变,数据仅仅交换在缓冲区.
submit;
mov buffer1 col2;
mov buffer2 col1;
--真正意义上实现了数据的交换