update 表A
set (CHECK_DATE, OVER_DATE, BASIC_MONTH, BASIC_MONTH2, LAST_MONITOR_DATE, NEXT_MONITOR_DATE)
= (select CHECK_DATE,
OVER_DATE,
to_number(to_char(CHECK_DATE,
'mm')) BASIC_MONTH,
to_number(to_char(add_months(CHECK_DATE,
7),
'mm')) BASIC_MONTH2,
CHECK_DATE LAST_MONITOR_DATE,
OVER_DATE NEXT_MONITOR_DATE
from 表B t,
表C h
where t.valid_flag = 'Y'
and t.p_code = h.p_code
and 表A.p_code = t.p_code
and 表A.ac_types = t.ac_types)
where exists( select * from 表B t,表C h where t.valid_flag = 'Y'
and t.check_date is not null
and t.p_code = h.p_code
and t_hr_license.p_code = t.p_code
and t_hr_license.ac_types = t.ac_types) ;
如果不加上上面的红色部分内容,则会更新整张表的内容(虽然查询出来的数据是按照我们要求过滤的,但是对于更新的语句,是没有用的)。
所以必须再次加上红色部分的数据才可以,这样只会更新我们查出来的数据,而不会更新整张表