Вставьте 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: неверный идентификатор


person overlord9314    schedule 19.01.2021    source источник
comment
Оракул != mysql. Пожалуйста, исправьте тег.   -  person OldProgrammer    schedule 20.01.2021
comment
если вы вставляете строку '2020-12-10 00:00:00', все, что вам нужно, это использовать To_date('2020-12-10 00:00:00', 'yyyy-mm-dd hh:mi:ss') ‹-- проверьте точный синтаксис с оракулом   -  person T.S.    schedule 20.01.2021
comment
Извинения - я не собираюсь вставлять даты выше - просто заполнители. Я хочу, чтобы текущее системное время вводилось как часть записи для меток времени. Я хочу заменить жестко заданные даты на (now(), systimestamp() - IDK, похоже, они не работают.)   -  person overlord9314    schedule 20.01.2021
comment
@Т.С. localdate не является функцией Oracle, и вы пропустили current_timestamp   -  person Wernfried Domscheit    schedule 20.01.2021
comment
sysdate, systimestamp, localtimestamp, current_timestamp ____ @WernfriedDomscheit --› Данке   -  person T.S.    schedule 20.01.2021


Ответы (3)


Поскольку у вас уже есть ДАННЫЕ ПО УМОЛЧАНИЮ, только вставка данных в формате ниже должна заполнить столбец 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');

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

person Saiprasad Bane    schedule 19.01.2021

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

create table t (x   TIMESTAMP(6));

insert into t (x) values (current_timestamp);

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

Вот скрипт db‹›.

person Gordon Linoff    schedule 19.01.2021
comment
Если бы ОП спросил о systimestamp, почему бы вам показать ему, как использовать current_timestamp, и только упомянуть systimestamp в конце как запоздалую мысль? По крайней мере, вы могли бы объяснить ему, что эти двое делают разные вещи. Один возвращает временную метку сеанса, другой — временную метку ОС (сервера базы данных). Они могут отражать разные часовые пояса. - person mathguy; 20.01.2021

В Oracle вы бы

insert into my_table(timestamp_column) values (systimestamp);

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

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

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

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

person mathguy    schedule 19.01.2021