[英]Oracle SQL - Unable to Update when using WITH statement
I am trying to update a column based on virtual dataset created via a WITH statement. 我正在尝试根据通过WITH语句创建的虚拟数据集更新列。 I have simplified the statement as much as possible to get to the root issue.
我已经尽可能简化了声明,以解决根本问题。 It appears that UPDATE does not work when using a WITH statement, but I can't believe this is accurate.
似乎在使用WITH语句时UPDATE无法正常工作,但是我不敢相信这是正确的。 The error I am getting is
我得到的错误是
ORA-00928: missing SELECT keyword
ORA-00928:缺少SELECT关键字
Here is my SQL statement. 这是我的SQL语句。
with TEMP1 as (
select NN_NAME
from SMB.ACCOUNTS
)
update SALES_PLAY_MATRIX_WORKING
set FY16_FOCUS = 'Y' where NN_NAME in ( select TEMP1.NN_NAME from TEMP1)
If I convert the 2nd portion of the statement to just a pure SELECT, it works... 如果我将语句的第二部分转换为纯SELECT,它将起作用...
with TEMP1 as (
select NN_NAME
from SMB.ACCOUNTS
)
(
select TEMP1.NN_NAME
from TEMP1)
In Oracle, with
does not go just at the beginning of a query. 在Oracle中,
with
并不仅仅出现在查询开始时。 It can go before any select
. 它可以在任何
select
之前进行。 So: 所以:
update SALES_PLAY_MATRIX_WORKING
set FY16_FOCUS = 'Y'
where NN_NAME in (
with TEMP1 as (
select NN_NAME
from SMB.ACCOUNTS
)
select TEMP1.NN_NAME
from TEMP1
);
I will suggest go for nested query that may solve your issue 我建议您进行嵌套查询,以解决您的问题
UPDATE SALES_PLAY_MATRIX_WORKING
SET FY16_FOCUS = 'Y'
WHERE NN_NAME IN ( SELECT NN_NAME FROM SMB.ACCOUNTS)
You could use a merge statement: 您可以使用合并语句:
MERGE INTO SALES_PLAY_MATRIX_WORKING dst
USING ( SELECT NN_NAME FROM SMB.ACCOUNTS ) src
ON ( dst.NN_NAME = src.NN_NAME )
WHEN MATCHED THEN
UPDATE SET FY16_FOCUS = 'Y';
or more simply: 或更简单地说:
MERGE INTO SALES_PLAY_MATRIX_WORKING dst
USING SMB.ACCOUNTS src
ON ( dst.NN_NAME = src.NN_NAME )
WHEN MATCHED THEN
UPDATE SET FY16_FOCUS = 'Y';
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.