我正在Informix 7.3上创建表,并且需要一个时间戳字段,该字段默认为today插入和更新。
today
如何为具有当前时间默认值的表定义日期/日期时间/时间戳列?
这是一个简单的日期字段的字段定义:
column upd_date date comments "" desc "Last update date" heading "Last update date" text "Last update date" attributes ( )
还有在有关于默认有什么意见架构文件的一些其他的语法 应 为:
column beg_date date{DEF: date academic session/subsession officially begins} comments "" desc "Beginning date." heading "Beg Date" text "Date - Begin" attributes ( )
我不确定其他任何具有此功能的表,甚至不能100%确定是否支持该功能,但是如果有办法,我很想知道。
我在此主题上找到的唯一好的线索是在这里
有人有什么想法/解决方案吗?
更多发现: http ://www.4js.com/techdocs/genero/fgl/devel/DocRoot/User/DatabaseSchema.html Informix中的转换日期
datetime我在另一个表def中找到一种列类型:
datetime
column beg_time datetime year to minute comments "" desc "Beginning date and time of period" heading "Beg Time" text "Date/Time - Slot Begin" attributes ( ) {DEF: date and time this group/person may register}
我不知道问题中使用的元语言,因此我不确定与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;
玩得开心!