Ваша команда:
UPDATE EMPLOYEE_LOGIN_TIME T1
SET T1.TIME_OUT_HISTORY= (SELECT pk.TIME_OUT
FROM EMPLOYEE_LOGIN_TIME pk
WHERE trunc(punch_date)=trunc(SYSDATE)
) ;
Здесь через внутренний SELECT
вы ищете действительное значение, которое будет присвоено T1.TIME_OUT_HISTORY
. Вы можете найти какое-то значение или нет, и в этом случае результат выбора будет null
.
Чтобы обновить только те записи, которые вы хотите обновить, ваша команда должна выглядеть примерно так:
UPDATE EMPLOYEE_LOGIN_TIME T1
SET T1.TIME_OUT_HISTORY= (SELECT pk.TIME_OUT
FROM EMPLOYEE_LOGIN_TIME pk
WHERE trunc(punch_date)=trunc(SYSDATE)
)
WHERE T1.<column name> ....
AND T1.<column name> .... ;
Добавленный WHERE
определяет правила, которые будут использоваться при выборе записей из EMPLOYEE_LOGIN_TIME
, которые должны быть обновлены.
Как это проясняет ситуацию.