【问题标题】:Automatically populate date in oracle table在 oracle 表中自动填充日期
【发布时间】:2011-01-03 05:37:09
【问题描述】:

我在 oracle XE 中创建了一个表,并且我有一个类型为 date 的字段。如果可能,我希望在我插入一行时,它会自动使用系统中的当前日期填充该字段。

我正在从 SQL 提示插入行。

谢谢

【问题讨论】:

    标签: oracle time timestamp


    【解决方案1】:

    这里是你需要正确格式化表格的方法:

    create table test (first number
                       , second timestamp default systimestamp
                       , third varchar2(12));
    

    并且您的默认值始终是格式化为时间戳的当前系统时间。

    【讨论】:

    • 如果列的数据类型为timestamp,为什么不默认为systimestamp 而不是sysdate
    • 有什么区别?我使用 sysdate,如果你能解释一下,这对我以及提出问题的 Andan 来说都很好
    • 日期(这是sysdate 返回的)仅精确到最接近的秒,时间戳(由systimestamp 返回)具有更高的精度(例如,千分之一秒或更高)跨度>
    • @ant 我需要自动填充 updated_date 和 created_date 。像 timestamps 猫鼬中的财产。我需要在创建记录时填充 created_date 并且永远不会更改。并且我希望在首次创建记录时将 update_date 设置为与 created_date 相同的值。然后在记录更新时自动更新它(created_date 不应该更新)。如何在 Oracle xe 中实现这一点?
    【解决方案2】:

    创建表格后更改字段

    ALTER TABLE table MODIFY time_collumn TIMESTAMP DEFAULT CURRENT_TIMESTAMP;
    

    【讨论】:

      【解决方案3】:

      或者你也可以使用触发器:

      CREATE OR REPLACE TRIGGER date_trigger
      
      BEFORE INSERT
      
      ON table_name
      
      REFERENCING NEW AS NEW
      
      FOR EACH ROW
      
      BEGIN
      
      SELECT sysdate INTO :NEW.column_name FROM dual;
      
      END;
      

      【讨论】:

      • 如果您需要确保从不手动输入时间戳,这会更好。虽然这种情况可能很少见。
      【解决方案4】:

      如果我们在创建表时忘记添加约束,下面的 sn-p 可能会有所帮助:

      ALTER TABLE TABLE_NAME 
      ADD CONSTRAINT CONSTRAINT_NAME
      COLUMN_NAME DATA_TYPE DEFAULT CURRENT_DATE;
      

      【讨论】:

      • stackoverflow.com/a/10300790/4040068 说 Oracle 没有将 DEFAULT 实现为 CONSTRAINTS。我使用的是一个非常旧的 Oracle 版本 (11g),但快速的谷歌搜索也无助于找出这是否是一个新特性。你确定你的ADD CONSTRAINT 是用于 Oracle 而不是另一个 DBMS 吗?因为在我的情况下,我收到错误“ORA-01430:正在添加的列已存在于表 01430 中。00000 - “正在添加的列已存在于表中””。 Oracle 尝试添加一个新列,而不仅仅是一个约束。
      猜你喜欢
      • 2018-11-25
      • 1970-01-01
      • 2020-01-06
      • 2020-11-07
      • 1970-01-01
      • 2017-09-25
      • 1970-01-01
      • 2014-02-09
      相关资源
      最近更新 更多