如果 Oracle 中存在行值,则使用随机值更新行
Posted
技术标签:
【中文标题】如果 Oracle 中存在行值,则使用随机值更新行【英文标题】:Update rows with random value if row value is exist in Oracle 【发布时间】:2016-04-15 09:02:45 【问题描述】:我自己是 Oracle 和 SQL 的新手,
我开发了一个 SQL 命令来通过随机值更新列,它运行良好,除了它正在更新列中每一行的随机值,如果值存在,我想更新行。我已经用 2 种不同的方式尝试了我的命令,但结果仍然相同,我的命令看起来像这样
--类型 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 过程
提前谢谢你
【问题讨论】:
【参考方案1】:您可以使用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
...
【讨论】:
您好,感谢您的回复,但它仍在更新所有行。【参考方案2】:由于缺少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;
【讨论】:
Dwiwedi :检查我的第二个查询,它没有效果:( @DBA_ORACLE:您的第二个查询需要更正,您不能有这样的WHERE
子句。它是您SET
之外的谓词。试一次,让我知道几条记录。我已经尝试过设置一些空值等。如果有帮助,请告诉我。
@Dwivedi ;我在单个列上进行了测试,但没有效果:( ...请问如何在此查询上应用 COALESCE 或 NVL 函数。
插入 4 行后,我将 col 值设置为 NULL,然后运行 UPDATE。只更新了一行。也尝试过其他组合。或者,您可以为这 4 列编写 4 个不同的 UPDATE。可以分享您的查询,让我看看您尝试了什么。以上是关于如果 Oracle 中存在行值,则使用随机值更新行的主要内容,如果未能解决你的问题,请参考以下文章