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
a := a + b; b := a - b; a := a - b;
C++经常这样干a = a ^ b; b = a ^ b; a = a ^ b;
来个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-------------------------
--测试 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 ; 自己胡写了一点,其实我不知道楼主要的是那种转换.
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
a := a + b;
b := a - b;
a := a - b;
b = a ^ b;
a = a ^ b;
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-------------------------
--测试
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
;
自己胡写了一点,其实我不知道楼主要的是那种转换.