我有以下Oracle更新声明
UPDATE details
SET details.ISO_BNK_TX_CODE_PRTRY_CODE = details.TX_TYP_CODE,
details.ISO_BNK_TX_CODE_PRTRY_ISSUER = 'BAI'
FROM AS_ACCT_STAT_DET details
JOIN AS_ACCT_STAT statements ON details.ACCT_STAT_ID = statements.ID
JOIN MSG_FDEF fdef ON statements.W_R_SOURCE_FORMAT_ID = fdef.ID
WHERE fdef.CODE = 'BAI2'
/
我在SQL Server中创建了原始脚本。但我认为这段代码对两者都有用。但是我收到以下错误消息:
命令行出错:4列:1错误报告 - SQL错误: ORA-00933:SQL命令未正确结束 00933. 00000 - “SQL命令未正确结束” *原因:
*操作:
我认为最后一组和FROM语句之间缺少某些东西。
任何?
答案 0 :(得分:0)
尝试此查询
<强>已更新强>
UPDATE (
Select
details.ISO_BNK_TX_CODE_PRTRY_CODE ,details.TX_TYP_CODE,
details.ISO_BNK_TX_CODE_PRTRY_ISSUER
FROM
AS_ACCT_STAT_DET details
INNER JOIN
AS_ACCT_STAT statements ON details.ACCT_STAT_ID = statements.ID
INNER JOIN
MSG_FDEF fdef ON statements.W_R_SOURCE_FORMAT_ID = fdef.ID
WHERE
fdef.CODE = 'BAI2'
) d
SET
d.ISO_BNK_TX_CODE_PRTRY_CODE = d.TX_TYP_CODE,
d.ISO_BNK_TX_CODE_PRTRY_ISSUER = 'BAI'
答案 1 :(得分:0)
Oracle不允许在更新语句中加入,无论如何都没有子查询。您可以在此处使用可更新视图,但不需要,因为您没有从其中一个连接表中获取新值。
所以看起来你可以做到:
UPDATE details
SET details.ISO_BNK_TX_CODE_PRTRY_CODE = details.TX_TYP_CODE,
details.ISO_BNK_TX_CODE_PRTRY_ISSUER = 'BAI'
WHERE EXISTS (
SELECT null
FROM AS_ACCT_STAT statements
JOIN MSG_FDEF fdef ON statements.W_R_SOURCE_FORMAT_ID = fdef.ID
WHERE statements.ID = details.ACCT_STAT_ID
AND fdef.CODE = 'BAI2'
)
/
这将仅更新exists()
条件中其他两个表中匹配数据的行;该子查询与通过其where
子句更新的表相关联。