gpt4 book ai didi

sql - 在 Oracle 中使用嵌套子查询编写一致性

转载 作者:行者123 更新时间:2023-12-05 01:38:11 26 4
gpt4 key购买 nike

我读过很多 gory写一致性的细节,我理解它在简单情况下的工作原理。我不清楚的是这对嵌套子查询意味着什么。

这是一个具体的例子:

带有 PK id 和其他列 state、temp 和 date 的表。

UPDATE table SET state = DECODE(state, 'rainy', 'snowy', 'sunny', 'frosty') WHERE id IN (
SELECT id FROM (
SELECT id,state,temp from table WHERE date > 50
) WHERE (state='rainy' OR state='sunny') AND temp < 0
)

真实的东西更复杂(在最里面的查询中),但这捕获了本质。

如果我们假设状态列不可为空,此更新是否会因并发修改而失败(即,DECODE 函数未找到匹配项,值为“rainy”或“sunny”,因此尝试将 null 插入到不可为空的列)?

最佳答案

Oracle 支持“语句级读写一致性”(与所有其他严肃的 DBMS 一样)

这意味着整个语句在语句启动后不会看到对数据库的任何更改。

由于您的 UPDATE 是一个单一的语句,因此不应该出现解码返回 null 的情况。

顺便说一句:该语句可以简化,您不需要子查询中的外部 SELECT :

UPDATE table SET state = DECODE(state, 'rainy', 'snowy', 'sunny', 'frosty') 
WHERE id IN (
SELECT id
FROM table
WHERE date > 50
AND (state='rainy' OR state='sunny')
AND temp < 0
)

关于sql - 在 Oracle 中使用嵌套子查询编写一致性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7577836/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com