First - there's no point making the join of RKAP_MASTER_KODE an outer join. The presence of b.KET_KD_GAS = 'BJU'
in the WHERE clause turns it into an inner join because no row which doesn't have b.KET_KD_GAS = 'BJU'
can be accepted by the query, thus requiring the row in RKAP_MASTER_KODE to exist. If you really want the join to be optional then move the b.KET_KD_GAS
predicate into the join clause - but if you do that, what's the point of joining RKAP_MASTER_KODE anyways since you use it to optionally limit the results, which isn't really a "limit".
Besides that, though, Oracle doesn't allow joins in an UPDATE statement. The workaround is to use a sub-SELECT to limit the updates to the appropriate rows:
UPDATE WFINANCE.RKAP_PROYEKSI a
SET a.STATUS = 'Waiting Approval',
a.T_ID = 'TR1234'
WHERE a.TAHUN = '2018' AND
a.KODE_ANGGARAN IN (SELECT b.ID_KODE
FROM WFINANCE.RKAP_MASTER_KODE b
WHERE b.KET_KD_GAS = 'BJU')
If you really don't care if there's a matching row in RKAP_MASTER_KODE, just drop that part of the UPDATE:
UPDATE WFINANCE.RKAP_PROYEKSI a
SET a.STATUS = 'Waiting Approval',
a.T_ID = 'TR1234'
WHERE a.TAHUN = '2018'