Я не распознаю метаязык, использованный в вопросе, поэтому я не уверен, на что он способен по сравнению с тем, на что способна СУБД.
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
);
Это дает вам таблицу, в которой каждому из 4 временных столбцов будет присвоено значение по умолчанию, если вы не укажете его в операции 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 - create_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;
Веселись!