gpt4 book ai didi

Postgresql 触发器在表 2 中插入/更新后在表 1 中插入新记录

转载 作者:行者123 更新时间:2023-11-29 13:19:23 31 4
gpt4 key购买 nike

我有this数据库,我需要回答以下问题:

“您需要创建一个触发器以及触发器被触发时将执行的函数。每次检查患者并进行诊断(如果插入的 appointment.diagnosis 不为空),患者的医疗文件夹将被更新。”

这是我想出的:

创建或替换函数 appointmentsFunction()
返回触发器作为 $appointmentsfunction$
宣布
appointment_patientamka BIGINT := new.patientamka;
appointment_cure TEXT := new.cure;
appointment_drug_id INT := drug_id;
appointment_diagnosis TEXT := new.diagnosis;
开始
如果 appointment_diagnosis 不为 NULL 那么
插入 public.medicalfolder (patient,cure,drug_id) VALUES (appointment_patientamka,appointment_cure, appointment_drug_id);
万一;
返回新的;
结尾
$约会功能$
语言 plpgsql;

最佳实践/最佳方法是什么?

附言。 patientamka 用作患者的 ID。它也可以是 patientID,但根据我老师的指导方针,它不是。

PS2.medicalfolder 表可以包含同一患者的重复记录。所以,我不必用患者的 ID (patientamka) 更新记录,我只需要插入一个新的。

最佳答案

这更像是一个 Code Review 问题,因为我假设上面的方法有效,但无论如何:

appointmentsFunction()

PG 中的命名约定是 snake_case 而不是 camelCase。也无需将“功能”一词附加到您的功能。将其命名为描述其作用的名称。

DECLARE
appointment_patientamka BIGINT := new.patientamka;
appointment_cure TEXT := new.cure;
appointment_drug_id INT := drug_id;
appointment_diagnosis TEXT := new.diagnosis;

我有两个问题。

首先,您将了解为四个变量赋值的成本(成本很小但不是免费的)。然后检查其中一个是否为 NULL,如果是,则不使用这些值——因此您浪费了读取和分配所有这些变量的工作。

第二件事是这些变量都不是必需的,因为您可以检查 NEW.diagnosis 是否为 NULL,如果不是,则将值(直接从 NEW 读取)插入 medicalfolder

最后,如果 BEGINDECLAREEND 缩进相同就好了。

关于Postgresql 触发器在表 2 中插入/更新后在表 1 中插入新记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44437996/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com