特定の形式でタイムスタンプを挿入することはありません。タイムスタンプ(および日付)は、内部表現を使用してデータベースに格納されます。内部表現は、タイプと精度に応じて7バイトから11バイトの間です。 この質問には詳細があります 、とりわけ。
クライアントまたはアプリケーションは、人間が読める文字列形式で値を表示する方法を決定します。
行う場合:
to_timestamp(localtimestamp,'YYYY/MM/DD')
localtimestamp
を暗黙的に変換しています セッションのNLS設定を使用して文字列に変換し、タイムスタンプに変換し直します。これにより、偶然に値が変更されて精度が低下する可能性がありますが、値が内部に保存される方法は変更されません。あなたの場合、NLS設定と提供しているフォーマットの不一致により、ORA-01830エラーが発生します。
したがって、最初の挿入は正しいです(サーバー時間ではなく、セッション時間を本当に必要としていると仮定します)。 見たい場合 保存された値を特定の形式で変更すると、クライアントセッションのNLS設定が変更されるか、クエリ時に明示的にフォーマットされます(例:
)。select to_char(time, 'YYYY-MM-DD HH24:MI:SS.FF3') from activity_log