在插入或更新时,我想用当前时间戳更新 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;
我在 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;