我自己是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程序
提前谢谢
答案 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;