数据库中数值的转化

changshawei 2010-07-13 11:07:45
在数据库中,
如 a =1,b =2
在不调用第三方参数的情况下
用什么方法实现 a ,b 值的互换?
...全文
88 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
碧水幽幽泉 2010-07-21
  • 打赏
  • 举报
回复
记得之前java有这样一道面试题:关于两个值的互换!
czfxwpy 2010-07-21
  • 打赏
  • 举报
回复
用这个 最简洁 三个update

[Quote=引用 5 楼 chensi05 的回复:]
SQL code

a := a + b;
b := a - b;
a := a - b;
[/Quote]
student_2008 2010-07-15
  • 打赏
  • 举报
回复
哈哈,都是强人.
lzf616 2010-07-15
  • 打赏
  • 举报
回复



--测试
select decode(1,(select 1 from dual),2) from dual;


create table table1
(
a int,
b int

)
;
insert into table1
select 9, 10
from dual
union all
select 3, 4
from dual
union all
select 5, 6
from dual
union all
select 7, 8
from dual
union all
select 9, 10 from dual;
commit;

--自己闹着玩
select decode(a, (select a from table1 t1 where t1.a = t.a), b) as a,
decode(b, (select b from table1 t1 where t1.b = t.b), a) as b
from table1 t
;

--乱写,哈哈
select b as a, a as b from table1
;




自己胡写了一点,其实我不知道楼主要的是那种转换.
ngx20080110 2010-07-15
  • 打赏
  • 举报
回复
来个Oracle位运算

declare
a number := 123;
b number := 435;
begin
dbms_output.put_line('交换前');
dbms_output.put_line('a = ' || a);
dbms_output.put_line('b = ' || b);
a := to_number(UTL_RAW.BIT_XOR(to_char(a), to_char(b)));
b := to_number(UTL_RAW.BIT_XOR(to_char(a), to_char(b)));
a := to_number(UTL_RAW.BIT_XOR(to_char(a), to_char(b)));
/*
a := a + b;
b := a - b;
a := a - b;
*/
dbms_output.put_line('交换后');
dbms_output.put_line('a = ' || a);
dbms_output.put_line('b = ' || b);
end;

结果:

-------------------------

交换前
a = 123
b = 435
交换后
a = 435
b = 123

-------------------------
zzxxj008 2010-07-14
  • 打赏
  • 举报
回复
C++经常这样干。。。

a = a ^ b;
b = a ^ b;
a = a ^ b;
mahanso 2010-07-14
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 ngx20080110 的回复:]
SQL code

declare
a number := 123;
b number := 435;
begin
dbms_output.put_line('交换前');
dbms_output.put_line('a = ' || a);
dbms_output.put_line('b = ' || b);
a := a + b;
b := a - b;
……
[/Quote]

呵呵,服了。
chensi05 2010-07-14
  • 打赏
  • 举报
回复

a := a + b;
b := a - b;
a := a - b;
xzxw1115 2010-07-14
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 ngx20080110 的回复:]

SQL code

declare
a number := 123;
b number := 435;
begin
dbms_output.put_line('交换前');
dbms_output.put_line('a = ' || a);
dbms_output.put_line('b = ' || b);
a := a + b;
b := a - b;
a := a - ……
[/Quote]

神人也!
璇之星 2010-07-14
  • 打赏
  • 举报
回复
如果要交换两列的值,就直接把表的列明调换一下!
ngx20080110 2010-07-14
  • 打赏
  • 举报
回复

declare
a number := 123;
b number := 435;
begin
dbms_output.put_line('交换前');
dbms_output.put_line('a = ' || a);
dbms_output.put_line('b = ' || b);
a := a + b;
b := a - b;
a := a - b;
dbms_output.put_line('交换后');
dbms_output.put_line('a = ' || a);
dbms_output.put_line('b = ' || b);
end;

交换前
a = 123
b = 435
交换后
a = 435
b = 123
liuyi8903 2010-07-14
  • 打赏
  • 举报
回复
那没办法,怎么样都要一个临时变量,这与是不是pl/sql没有关系。

3,491

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 高级技术相关讨论专区
社区管理员
  • 高级技术社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧