Informix 7.3-声明日期列数据类型,默认情况下为插入更新时的当前日期

Informix 7.3-声明日期列数据类型,默认情况下为插入更新时的当前日期,第1张

Informix 7.3-声明日期列数据类型,默认情况下为插入/更新时的当前日期

我不知道问题中使用的元语言,因此我不确定与DBMS可以比较的功能。

CREATE TABLE ExampleDatesAndTimes(    rownumber     SERIAL NOT NULL PRIMARY KEY,    date_column   DATE DEFAULT TODAY NOT NULL,    datetime_yd   DATETIME YEAR TO DAY       DEFAULT CURRENT YEAR TO DAY NOT NULL,    datetime_ys   DATETIME YEAR TO SECOND       DEFAULT CURRENT YEAR TO SECOND NOT NULL,    datetime_hs   DATETIME HOUR TO SECOND       DEFAULT CURRENT HOUR TO SECOND NOT NULL,    payload       VARCHAr(255) NOT NULL);

这为您提供了一个表,如果您未在INSERT *** 作中指定它,则将为这四个时态列中的每一个分配一个默认值:

INSERT INTO ExampleDatesAndTimes(Payload) VALUES ("Hello");

另一方面,如果指定列,则指定的值优先。我假设使用DBDATE =“ Y4MD-”,以便DATE值看起来像DATETIME YEAR TO DAY值:

INSERT INTO ExampleDatesAndTimes    VALUES(0, '1066-10-14', '2001-01-01', '2012-11-10 09:08:07','23:23:21', "Gezundheit");

此处,所有值均已指定,因此这些值即为已存储的值。请注意,诸如ISQL
Perform等程序(以及大多数典型的I4GL程序)将为所有列提供值,因此默认机制不会生效。

您可以使用触发器来更改UPDATe上的值,因此可以插入日期和“最后更新”列(如果需要,还可以添加whodunnit列-
created_by和updated_by)。同样,您必须担心默认值与显式提供的值之间的关系。

现在,由于您使用的IDS 7.3x最终在一两年前就停止了服务,因此您所具有的功能与IDS 11.70中提供的功能略有不同。您应该在考虑升级。


我找到了此代码(最终)是用于在更新时使用触发器。它可以追溯到2006年。

CREATE TABLE talx_000(    i       SERIAL NOT NULL PRIMARY KEY,    s       CHAr(30) NOT NULL,    m_user  VARCHAr(32) DEFAULT USER NOT NULL,    m_time  DATETIME YEAR TO SECOND DEFAULT CURRENT YEAR TO SECOND NOT NULL);CREATE PROCEDURE current_user_time()    RETURNING VARCHAr(32) AS m_user, DATETIME YEAR TO SECOND AS m_time;    RETURN user(), CURRENT YEAR TO SECOND - 1 UNITS DAY;END PROCEDURE;CREATE TRIGGER upd_talx_000 UPDATE ON talx_000    REFERENCING NEW AS NEW FOR EACH ROW    (EXECUTE PROCEDURE current_user_time() INTO m_user, m_time);INSERT INTO talx_000(s) VALUES("cached nonsense");INSERT INTO talx_000(s, m_user) VALUES("inserted user", "sphinx");INSERT INTO talx_000(s, m_time)    VALUES("inserted time", DATETIME(1066-10-14 15:23:31) YEAR TO SECOND);INSERT INTO talx_000(s, m_time, m_user)    VALUES("inserted both", DATETIME(1805-10-21 13:15:00) YEAR TO SECOND,"nelson");SELECT * FROM talx_000;DROp TRIGGER upd_talx_000;CREATE PROCEDURE upd_talx_000(i_val INTEGER);    UPDATE talx_000        SET m_user = "brandywine", m_time = DATETIME(3019-03-25 13:00:00) YEAR TO SECOND        WHERe i = i_val;END PROCEDURE;CREATE TRIGGER upd_talx_000 UPDATE ON talx_000    REFERENCING NEW AS NEW FOR EACH ROW    (EXECUTE PROCEDURE upd_talx_000(NEW.i));INSERT INTO talx_000(s) VALUES("cached nonsense");INSERT INTO talx_000(s, m_user) VALUES("inserted user", "sphinx");INSERT INTO talx_000(s, m_time)    VALUES("inserted time", DATETIME(1066-10-14 15:23:31) YEAR TO SECOND);INSERT INTO talx_000(s, m_time, m_user)    VALUES("inserted both", DATETIME(1805-10-21 13:15:00) YEAR TO SECOND,"nelson");SELECT * FROM talx_000;

玩得开心!



欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/5640418.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-16
下一篇 2022-12-16

发表评论

登录后才能评论

评论列表(0条)

保存