2011-07-15 2 views
1

私はmyCというテーブルを持つOracle DBを持っています。この表では、いくつかの行があり、そのうちの2つがmyCheight, myCwidthと呼ばれています。Oracle SQL:2列のすべての値を比較して交換してください

IF myCheight > myCwidth DO switch the values.

に私は1つの行から値を読み取ろうとしましたが、それは仕事を得るdidntのように私は、これらの値を読み込み、それらを比較する必要があります。 Oracles Oracle SQL Developerを使用しています。

これは私がこれまでに思い付いたものです:

set serveroutput on; 
DECLARE 
    cursor h is select * from MyC; 
    type htype is table of h%rowtype index by number; 

    stage_tab htype; 
    master_tab htype; 
BEGIN 
    open h; 
    loop 
     fetch h bulk collect into stage_tab limit 500; 

     for i in 1 .. stage_tab.count loop 
      master_tab(stage_tab(i).id) := stage_tabe(i); 
     end loop; 

     exit when h%notfound; 
    end loop; 
    close h; 

end; 

答えて

10

は、あなただけのこの操作を行うことができませんか?

UPDATE myC 
    SET myCheight = myCwidth, 
     myCwidth = myCheight 
    WHERE myCheight > myCwidth 
+0

+1:同意。 'SET myCheight = myCwidth'は' myCwidth = myCheight'の前に完了していませんが、同時に発生するように見えます。 – MatBailie

+0

+1。また、記号を追加することもできます:* "これを家庭で(またはMySQLで)試してはいけません" * –

+0

ニース、うまくいきました。 – nottinhill

関連する問題