繁体   English   中英

Oracle:更新错误位置

[英]Oracle: Update where error

社区早安。

我已经使用MSSQL一段时间了,并且在MSSQL中还没有遇到这个问题,因此这似乎是Oracle处理sql的一种方式。 基本上,我需要根据where条件更新表DANIEL_ALERT中的两列。 但是,我得到了“ ORA-00904:“ ALERT_CATEORIES”。“ ALERT”:无效的标识符。我确信这只是oracle执行与MSSQL不同的操作的方式。

任何想法将不胜感激。 先感谢您 :)

UPDATE DANIEL_ALERT
SET DANIEL_ALERT.ALERT_CATEGORY = ALERT_CATEGORIES.INDICATION,
DANIEL_ALERT.ALERT_THEME = ALERT_CATEGORIES.THEME
WHERE DANIEL_ALERT.ALERT_NAME = ALERT_CATEGORIES.ALERT;
commit;

不知道表的结构和内容是什么样子,您可以采用这种方法,可以一起使用,也可以替代已经发布的完美的MERGE答案:

UPDATE DANIEL_ALERT DA
SET (DA.ALERT_CATEGORY, DA.ALERT_THEME) = (
    SELECT AC.INDICATION, AC.THEME 
    FROM ALERT_CATEGORIES AC 
    WHERE AC.ALERT = DA.ALERT_NAME
)
WHERE EXISTS (
    SELECT NULL
    FROM ALERT_CATEGORIES AC
    WHERE AC.ALERT = DA.ALERT_NAME
);
UPDATE DANIEL_ALERT DA
SET (DA.ALERT_CATEGORY, DA.ALERT_THEME) = (
    SELECT AC.INDICATION, AC.THEME 
    FROM ALERT_CATEGORIES AC 
    WHERE AC.ALERT = DA.ALERT_NAME
)
WHERE EXISTS (
    SELECT NULL
    FROM ALERT_CATEGORIES AC
    WHERE AC.ALERT = DA.ALERT_NAME
);

在Oracle中,通常最好使用MERGE语句来用另一个表中的值更新表。 就像是:

merge into DANIEL_ALERT d
  using ALERT_CATEGORIES c
     on (d.ALERT_NAME = c.ALERT)
when matched then update 
   set ALERT_CATEGORY = c.INDICATION,
       ALERT_THEME    = c.THEME
;

尝试:

更新DANIEL_ALERT设置t1.ALERT_CATEGORY = t2.INDICATION,t1.ALERT_THEME = t2.THEME from DANIEL_ALERT t1内联接ALERT_CATEGORIES t2在t2.ALERT = t1.ALERT_NAME

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM