在插入或更新时,我想用当前时间戳更新 UPDATED_AT 列

On insert or update i want to update UPDATED_AT column with current timestamp

我在 oracledb

更新查询附近收到此错误 缺少右括号

与 Mysql 一起工作正常:

ALTER TABLE EMPLOYEE
    ADD COLUMN `updated_at` `updated_at` TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CurrENT_TIMESTAMP();

不使用 Oracle:

ALTER TABLE EMPLOYEE
ADD (
  UPDATED_AT DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);

如果您要添加新列,则:

SQL> create table employee (id number);

Table created.

SQL> alter table employee add updated_at date default sysdate;

Table altered.

这导致

SQL> insert into employee(id) values (1);

1 row created.

SQL> select * from employee;

        ID UPDATED_AT
---------- -------------------
         1 25.03.2021 12:05:31

SQL>

Oracle 中没有 datetime 的数据类型。有一个 date 总是有日期和时间到秒。或 timestamp 其中包括小数秒。或包含时区的 timestamp with [local] time zone。由于您使用的是 current_timestamp,我猜您希望数据类型为 timestamp with time zone

也没有 on update 属性 列。如果您希望在更新行时更新列,则需要为此编写一个触发器。

ALTER TABLE EMPLOYEE
ADD (
  UPDATED_AT TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP
);

create trigger set_updated_at
  before update on employee
  for each row
begin
  :new.updated_at := current_timestamp();
end;