首页 > 解决方案 > 每当将患者记录插入患者表时,编写触发器以查找并填写患者的年龄

问题描述

在这个问题中,我必须在触发器的帮助下添加年龄值。请帮我解决这个问题。

create or replace trigger ia_patient
after insert on patient
for each row
enable
declare
age_value number(10);
begin
DBMS_OUTPUT.PUT_LINE('Please Insert Age');
update patient set age=&age_value where ??;
end;

我不确定在“哪里”之后应该写什么

标签: sqloracleplsqltriggers

解决方案


除非这是一个家庭作业问题,否则它真的没有多大意义,因为“年龄”取决于当前日期。

无论如何,看看这是否有帮助。

SQL> create table patient
  2    (id               number primary key,
  3     date_of_birth    date,
  4     age              number
  5    );

Table created.

触发器:将年龄计算为 sysdate 和出生日期之间的月数除以 12(因为一年有 12 个月);当然,这只是一个近似值,但是——据我所知——你的任务不是正确计算年龄,而是学习如何使用触发器。

SQL> create or replace trigger ia_patient
  2    before insert on patient
  3    for each row
  4  begin
  5    :new.age := round(months_between(sysdate, :new.date_of_birth) / 12);
  6  end;
  7  /

Trigger created.

测试:

SQL> insert into patient (id, date_of_birth) values (2, date '2000-10-05');

1 row created.

SQL> select * from patient;

        ID DATE_OF_BI        AGE
---------- ---------- ----------
         2 2000-10-05         20

SQL>

推荐阅读