如果Oracle

时间:2016-04-15 09:02:45

标签: sql oracle plsql

我自己是Oracle以及SQL的新手,

我已经开发了一个SQL命令来通过它正常工作的随机值来更新列,除了它正在将随机值更新到列中的每一行,我想用if值更新行。我以两种不同的方式尝试了我的命令,但结果仍然相同,我的命令看起来像这样

- 输入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程序

提前谢谢

2 个答案:

答案 0 :(得分: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
...    

答案 1 :(得分: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;