2016-04-15 25 views
0

に存在している場合は、ランダムな値を更新しています列のすべての行に、値が存在する場合に行を更新する必要があります。私は2種類の方法で私のコマンドを試してみましたが、結果はまだ同じ、私のコマンドは、この更新行、行の値は、OracleやSQLに自分自身を新しいOracle

--type 1

UPDATE my_schema.table 
SET col1 =DBMS_RANDOM.STRING('A', DBMS_RANDOM.VALUE(8, 10)), 
    Col2= DBMS_RANDOM.STRING('A', DBMS_RANDOM.VALUE(1, 28)), 
    Col3= DBMS_RANDOM.STRING('A', DBMS_RANDOM.VALUE(1, 28)), 
    Col4= DBMS_RANDOM.STRING('A', DBMS_RANDOM.VALUE(1, 2)); 

--type2

UPDATE my_schema.table 
SET col1= DBMS_RANDOM.STRING('A', DBMS_RANDOM.VALUE(8, 10)) where col1 IS NOT NULL, col2= DBMS_RANDOM.STRING('A', DBMS_RANDOM.VALUE(10, 15)) where col2 IS NOT NULL, col3= DBMS_RANDOM.STRING('A', DBMS_RANDOM.VALUE(8, 10)) where col4 IS NOT NULL; 

のように見えるどちらのコマンドは、すべての更新します行の列を更新するには、テーブル内の15列を更新する必要があります もっと効率的な方法やPL/SQLプロシージャを書く方法を誰かに教えてください。

ありがとうnはあなたがアップデートすべての列の値をチェックするためにCASEを使用することができます

答えて

0

を進めることだけで、あなたの条件と一致した場合:欠落が原因WHERE句に

update yourTable 
set col1 = case 
      when col1 is not null 
       then DBMS_RANDOM.STRING('A', DBMS_RANDOM.VALUE(1, 28)) 
      else null 
      end, 
    col2 = case 
      when col2 is not null 
       then DBMS_RANDOM.STRING('A', DBMS_RANDOM.VALUE(1, 28)) 
      else null 
      end 
...  
+0

お返事ありがとうございます。でも、まだすべての行が更新されています。 –

0

すべての行が更新されている取得します。以下のようにしてWHERE句の条件をORからANDに変更することができます。それが動作するかどうか私に教えてください。ありがとう!

UPDATE myschema.table 
    SET col1 = DBMS_RANDOM.STRING ('A', DBMS_RANDOM.VALUE (8, 10)), 
     Col2 = DBMS_RANDOM.STRING ('A', DBMS_RANDOM.VALUE (1, 28)), 
     Col3 = DBMS_RANDOM.STRING ('A', DBMS_RANDOM.VALUE (1, 28)), 
     Col4 = DBMS_RANDOM.STRING ('A', DBMS_RANDOM.VALUE (1, 2)) 
WHERE col1 IS NOT NULL 
     OR col2 IS NOT NULL 
     OR col3 IS NOT NULL 
     OR col4 IS NOT NULL; 
+0

Dwiwedi:2番目のクエリをチェックしても何の効果もありません:( –

+0

@DBA_ORACLE:2番目のクエリで修正が必要な場合は、 'WHERE'節を使用することはできません。私はいくつかのレコードについて知っています。いくつかのヌル値を設定して試してみました。それが役に立ったら教えてください。 –

+0

@Dwivedi;個々の列でテストしましたが、効果はありませんでした:(... ... COALESCEまたはNVLこのクエリの関数 –

関連する問題