【问题标题】:On insert or update i want to update UPDATED_AT column with current timestamp在插入或更新时,我想用当前时间戳更新 UPDATED_AT 列
【发布时间】:2021-03-25 11:04:12
【问题描述】:

我在 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
);

【问题讨论】:

    标签: oracle oracle12c ddl


    【解决方案1】:

    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;
    

    【讨论】:

      【解决方案2】:

      如果您要添加新列,那么:

      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>
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-07-07
        • 2019-05-06
        • 1970-01-01
        • 1970-01-01
        • 2015-08-30
        • 1970-01-01
        • 1970-01-01
        • 2018-02-16
        相关资源
        最近更新 更多