这是对问题的框架挑战。
不要使用触发器;如果您这样做,它将不时地插入年龄,或者在 6 个月或一年之后,该人将过生日,并且您的表格将不正确。这应该是您在需要数据时在查询中计算出来的,并且可以放入视图中。
CREATE TABLE people (
id INTEGER
GENERATED AS IDENTITY
CONSTRAINT people__id__pk PRIMARY KEY,
name VARCHAR2(50)
NOT NULL,
date_of_birth DATE
NOT NULL
);
然后你可以创建一个视图来计算年龄:
CREATE VIEW people_ages ( id, name, date_of_birth, age ) AS
SELECT id,
name,
date_of_birth,
FLOOR( MONTHS_BETWEEN( SYSDATE, date_of_birth ) / 12 )
FROM people;
如果你有样本数据:
INSERT INTO people ( name, date_of_birth )
SELECT 'Alice', DATE '1970-01-01' FROM DUAL UNION ALL
SELECT 'Bob', DATE '2020-10-21' FROM DUAL UNION ALL
SELECT 'Carol', DATE '2000-10-21' FROM DUAL;
那么视图的输出将是:
SELECT * FROM people_ages;
身份证 |姓名 | DATE_OF_BIRTH |年龄
-: | :---- | :----------------- | --:
1 |爱丽丝 | 1970-01-01 00:00:00 | 50
2 |鲍勃 | 2020-10-21 00:00:00 | 0
3 |卡罗尔 | 2000-10-21 00:00:00 | 20
db小提琴here