【发布时间】:2011-01-03 05:37:09
【问题描述】:
我在 oracle XE 中创建了一个表,并且我有一个类型为 date 的字段。如果可能,我希望在我插入一行时,它会自动使用系统中的当前日期填充该字段。
我正在从 SQL 提示插入行。
谢谢
【问题讨论】:
我在 oracle XE 中创建了一个表,并且我有一个类型为 date 的字段。如果可能,我希望在我插入一行时,它会自动使用系统中的当前日期填充该字段。
我正在从 SQL 提示插入行。
谢谢
【问题讨论】:
这里是你需要正确格式化表格的方法:
create table test (first number
, second timestamp default systimestamp
, third varchar2(12));
并且您的默认值始终是格式化为时间戳的当前系统时间。
【讨论】:
timestamp,为什么不默认为systimestamp 而不是sysdate?
sysdate 返回的)仅精确到最接近的秒,时间戳(由systimestamp 返回)具有更高的精度(例如,千分之一秒或更高)跨度>
timestamps 猫鼬中的财产。我需要在创建记录时填充 created_date 并且永远不会更改。并且我希望在首次创建记录时将 update_date 设置为与 created_date 相同的值。然后在记录更新时自动更新它(created_date 不应该更新)。如何在 Oracle xe 中实现这一点?
创建表格后更改字段
ALTER TABLE table MODIFY time_collumn TIMESTAMP DEFAULT CURRENT_TIMESTAMP;
【讨论】:
或者你也可以使用触发器:
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;
【讨论】:
如果我们在创建表时忘记添加约束,下面的 sn-p 可能会有所帮助:
ALTER TABLE TABLE_NAME
ADD CONSTRAINT CONSTRAINT_NAME
COLUMN_NAME DATA_TYPE DEFAULT CURRENT_DATE;
【讨论】:
ADD CONSTRAINT 是用于 Oracle 而不是另一个 DBMS 吗?因为在我的情况下,我收到错误“ORA-01430:正在添加的列已存在于表 01430 中。00000 - “正在添加的列已存在于表中””。 Oracle 尝试添加一个新列,而不仅仅是一个约束。