使用联接更新oracle查询问题

使用联接更新oracle查询问题,oracle,Oracle,我不明白为什么它的Sql命令没有正确结束 Update Table1 Set LS.SECU_CHECKER_CODE = '1000', LS.SECU_CHECKER_DATE = To_Char(SysDate, 'YYYYMMDDHH24MISS'), LS.SECU_RECORD_STATUS = 98

我不明白为什么它的Sql命令没有正确结束

              Update Table1
                 Set LS.SECU_CHECKER_CODE  = '1000',
                     LS.SECU_CHECKER_DATE  = To_Char(SysDate, 'YYYYMMDDHH24MISS'),
                     LS.SECU_RECORD_STATUS = 98 
                From Table1 LS
                Join Table2 LS2
                  On LS2.SECC_SECURITY_ID = LS.SECU_SECURITY_ID
               Where LS2.SECC_LIMIT_ID    = '00010101010101';

在Oracle中,从视图更新的语法与您使用的语法不同。但是,在本例中,您甚至不应该从视图进行更新,因为您没有使用另一个表的内容,而只是检查是否存在您应该使用
EXISTS
in
的记录:

update table1
set secu_checker_code  = '1000'
  , secu_checker_date  = to_char(sysdate, 'yyyymmddhh24miss')
  , secu_record_status = 98 
where secu_security_id in
(
  select secc_security_id
  from table2
  where secc_limit_id = '00010101010101'
);

看起来您正在尝试更新表1的选择。你需要一个where子句。 可能是这样的:

update table1 t1
   set ls.secu_checker_code  = '1000'
      ,ls.secu_checker_date  = to_char(sysdate, 'YYYYMMDDHH24MISS')
      ,ls.secu_record_status = 98
 where t1.secu_security_id in (select t2.secc_security_id
                                 from table2 t2
                                where t2.secc_limit_id = '00010101010101');

这也很有效

UPDATE table1 
   SET (SECU_CHECKER_CODE, 
        SECU_CHECKER_DATE, 
        SECU_RECORD_STATUS) = (
                                Select '1000',
                                       To_Date(SysDate), 
                                       98
                                   From table1
                                   Join table2 
                                     On SECC_SECURITY_ID = SECU_SECURITY_ID
                                  Where SECC_LIMIT_ID    = '00010101010101')

旁注:为什么要将日期存储为字符串?你不应该。