UPDATE FRA_SAP
SET FRA_SAP.ENT_ATTRIBUTES = FE.ENT_ATTRIBUTES
FROM FRA_SAP FES
INNER JOIN FRA_ENTITIES FE
ON FES.ID = FE.ID我得到以下错误:
java.sql.SQLSyntaxErrorException: ORA-00933: SQL command not properly ended
at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:450)
at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:399)
at oracle.jdbc.driver.T4C8Oall.processError(T4C8Oall.java:1059)
at oracle.jdbc.driver.T4CTTIfun.receive(T4CTTIfun.java:522)
at oracle.jdbc.driver.T4CTTIfun.doRPC(T4CTTIfun.java:257)
at oracle.jdbc.driver.T4C8Oall.doOALL(T4C8Oall.java:587)
at oracle.jdbc.driver.T4CStatement.doOall8(T4CStatement.java:210)发布于 2019-10-23 22:15:14
Oracle通常不支持UPDATE中的FROM或JOIN。等效项为:
UPDATE FRA_SAP
SET FRA_SAP.ENT_ATTRIBUTES = (SELECT FE.ENT_ATTRIBUTES
FROM FRA_ENTITIES FE
WHERE FES.ID = FE.ID
)
WHERE EXISTS (SELECT 1
FROM FRA_ENTITIES FE
WHERE FES.ID = FE.ID
);注意:如果FRA_ENTITIES中有多个匹配的行,则此查询将返回错误。SQL Server中的等效查询--使用您的语法--将使用任意匹配行进行更新。
发布于 2019-10-23 22:10:41
您似乎正在使用SQL Server update join语法,该语法在Oracle上不起作用。一个可以工作的版本使用相关子查询:
UPDATE FRA_SAP fes
SET ENT_ATTRIBUTES = (SELECT fe.ENT_ATTRIBUTES
FROM FRA_ENTITIES fe
WHERE fes.ID = fe.ID);下面的代码更接近于真正的update join,也可能有效:
UPDATE
(
SELECT fes.ENT_ATTRIBUTES AS OLD, fe.ENT_ATTRIBUTES AS NEW
FROM FRA_SAP fes
INNER JOIN FRA_ENTITIES fe
ON fes.ID = fe.ID
) t
SET t.OLD = t.NEW;https://stackoverflow.com/questions/58524735
复制相似问题