Вставьте SYSTIMESTAMP для поля Timestamp

У меня есть три метки времени в моей таблице SQL.

      Column Name     Data Type   Nullable Data_Default

STATUS_TIMSTM   TIMESTAMP(6)    No  (null)
CREATED_TIMSTM  TIMESTAMP(6)    No  SYSTIMESTAMP  
UPDATED_TIMSTM  TIMESTAMP(6)    No  (null)
      INSERT INTO "TABLE_NAME" ("STATUS_TIMSTM","CREATED_TIMSTM","UPDATED_TIMSTM")
VALUES(TIMESTAMP '2020-12-10 00:00:00', TIMESTAMP '2020-06-15 00:00:00',TIMESTAMP '2020-06-15 00:00:00');

Вышеупомянутое работает правильно.

Как вставить текущий systimestamp?

Я пробовал несколько вариантов: curdate(), now(), systimestamp().

Обычно я получаю такие ошибки, как отчет об ошибке — ошибка SQL: ORA-00904: «СЕЙЧАС»: неверный идентификатор 00904. 00000 — «%s: неверный идентификатор»

3 ответа

Вы должны быть в состоянии использовать current_timestamp:

      create table t (x   TIMESTAMP(6));

insert into t (x) values (current_timestamp);

Конечно, systimestampтоже должно работать.

Вот скрипка db<>.

В Oracle вы бы

      insert into my_table(timestamp_column) values (systimestamp);

Обратите внимание, что вызов функции не включает круглые скобки после имени функции. Oracle довольно странный в этом отношении; функции, не принимающие параметров, но определяемые вами самостоятельно, должны использовать пустые круглые скобки, но аналогичные функции (без параметров), предоставляемые Oracle, должны использоваться без круглых скобок. Только Oracle знает, почему это несовместимо. Это объясняет, почему ваша попытка не удалась.

(На самом деле, некоторые эксперименты с показывают, что он может принимать аргумент — положительное целое число, которое показывает, сколько десятичных разрядов вы хотите для секунд! В любом случае, вы не можете использовать его с пустыми скобками.)

Существуют и другие «текущие» функции отметки времени, но они делают разные вещи. возвращает отметку времени компьютерной системы, на которой размещен сервер базы данных. (Обратите внимание, что это может и часто отличается от временной метки базы данных.) В любом случае, это наиболее часто используемый из них; похожий на для дат.

Однако остерегайтесь часового пояса. возвращает временную метку с часовым поясом . Вставив его в столбец, вы теряете информацию. Это нормально для вашего бизнес-приложения?

Поскольку у вас уже есть ДАННЫЕ ПО УМОЛЧАНИЮ, только вставка данных в формате ниже должна заполнить CREATED_TIMSTMколонка с током TIMESTAMP.

      INSERT INTO "TABLE_NAME" ("STATUS_TIMSTM","UPDATED_TIMSTM")
VALUES(TIMESTAMP '2020-12-10 00:00:00', TIMESTAMP '2020-06-15 00:00:00');

Вот упрощенная скрипта БД, демонстрирующая то же самое.

Другие вопросы по тегам