U voegt geen tijdstempel in een bepaald formaat in. Tijdstempels (en datums) worden in de database opgeslagen met behulp van een interne representatie, die tussen 7 en 11 bytes ligt, afhankelijk van het type en de precisie. Daarover meer in deze vraag , onder andere.
Uw klant of toepassing bepaalt hoe de waarde wordt weergegeven in een voor mensen leesbare tekenreeks.
Wanneer je dat doet:
to_timestamp(localtimestamp,'YYYY/MM/DD')
je converteert impliciet de localtimestamp
naar een tekenreeks, met behulp van de NLS-instellingen van uw sessie en deze vervolgens terug te converteren naar een tijdstempel. Dat kan incidenteel de waarde veranderen - precisie verliezen - maar zal niet veranderen hoe de waarde intern wordt opgeslagen. In uw geval leidt de mismatch tussen de NLS-instelling en het formaat dat u aanlevert tot een ORA-01830-fout.
Dus uw eerste invoeging is correct (ervan uitgaande dat u echt de sessietijd wilt, niet de servertijd). Als je wilt zien de opgeslagen waarden in een bepaald formaat, verander dan ofwel de NLS-instellingen van uw clientsessie, of formatteer het bij voorkeur expliciet wanneer u het opvraagt, bijvoorbeeld:
select to_char(time, 'YYYY-MM-DD HH24:MI:SS.FF3') from activity_log