【发布时间】:2016-07-06 15:02:09
【问题描述】:
我正在使用 Oracle SQL Developer,我正在尝试将更新和选择语句合并为一个。我知道 Oracle 不直接在更新语句中支持 FROM 或 JOINS,因此我将选择放在子查询中,但它仍然不起作用。
我有两张桌子;可操作且可测试。
MASTERTABLE 包含一个 ID_NUMBER 列和一个 TESTTABLE_ID 列。
TESTTABLE 包含一个 TESTTABLE_ID 列和一个 TEST_COLUMN 列。
我想做的是在只知道 ID_NUMBER 的同时更新 TEST_COLUMN 值。
我的陈述是这样的:
UPDATE TESTTABLE
SET TEST_COLUMN= 'Testvalue'
WHERE TESTTABLE.TESTTABLE_ID IN (SELECT MASTERTABLE.TESTTABLE_ID
FROM MASTERTABLE
WHERE ID_NUMBER=11);
但我陷入了某种循环。我哪里做错了?
【问题讨论】:
-
是什么让您认为自己“陷入了某种循环”?查询永远不会完成吗?您是否收到错误消息?你的桌子有多大?
-
我尝试在 Oracle SQL Developers Worksheet 脚本运行程序中运行查询,它会一直持续下去,看起来好像查询没有完成。我正在使用几个只有 3 行的小型试验表。
-
对于这么小的表,它确实应该几乎立即返回。希望其中一位 Oracle 专家可以在这里为您指出解决方案,因为查询本身对我来说看起来不错。是否有可能您正在运行另一个线程,该线程在表上具有锁定并且正在阻止更新?这可能会帮助您追踪:oraclerecipes.com/monitoring/find-blocking-sessions
-
我在 MASTERTABLE 上运行一个简单的更新查询没有问题,所以至少那部分不应该被阻止。