私はこの質問で使用されているメタ言語を認識していません。そのため、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操作でそれを指定しない場合は4つの、時間列のそれぞれは、デフォルト値が割り当てられますたテーブル得られます。一方
INSERT INTO ExampleDatesAndTimes(Payload) VALUES ("Hello");
を、列を指定すると、指定された値が優先されます。そのDATE値をDATETIME YEAR TO DAY値のように見えるので、私はDBDATE =「Y4MD-」を仮定している:ここで
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の値を変更できるため、日付を挿入して最後に更新された列を作成できます(必要に応じてcreated_by列とupdated_by列を追加できます)。繰り返しますが、明示的に指定された値に対してデフォルト値を心配する必要があります。
IDS 7.3xを使用しているため、1年または2年前にサービスが終了しましたが、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;
楽しくお楽しみください!
ありがとうございましたjon - ええ、あなたが私が以前持っていたいくつかのinformix質問をアップグレードすることについて私に警告しました。それは私の電話ではありませんが、私はあなたを見ていただきありがとうございます。 meta-langに関する限り、JenzabarはInformix上でSISを構築し、ネイティブプロセスのいくつかは、 – CheeseConQueso
などのように変更されています。追加情報をありがとう - 私はID、影響を受けた領域、実行されたアクションなどを持っています。 ....と私はisqlを介してテスト挿入を行い、日付フィールドには現在の日付が自動的に入力されます。今日私は更新を試み、それはフィールドを変更することに失敗しました – CheeseConQueso
btw - wtfは、hahahahについてのペイロード= "Gezundheit"ですか? – CheeseConQueso