2016-04-15 117 views
0

存在我自己剛接觸Oracle以及SQL,隨機值更新行,如果行值是Oracle

我開發了一個SQL命令來更新由隨機數列是除了它的工作以及正在更新的隨機值到列中的每一行,如果值存在,我想更新行。我有兩種不同的方式嘗試我的命令,但結果還是一樣,我的命令看起來像這樣

--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使

回答

0

您可以使用CASE檢查每個列的值更新它只有它,如果你的條件相匹配:

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條款。您可以在下面嘗試,並根據需要將您的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:檢查我的第二個查詢,它沒有效果:( –

+0

@DBA_ORACLE:你的第二個查詢需要更正,你不能有'WHERE'這樣的子句,它是你的'SET'之外的謂詞。我知道了幾條記錄,我曾試着用一些空值設置等等。讓我知道它是否有幫助。 –

+0

@Dwivedi;我在單個列上測試,但沒有影響:(...可以請怎麼應用COALESCE或NVL –