SQL命令未在具有多个集的update语句中正确结束

时间:2016-08-11 09:13:40

标签: sql oracle

我有以下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语句之间缺少某些东西。

任何?

2 个答案:

答案 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子句更新的表相关联。