记录“新”没有字段“治愈”postgreSQL

时间:2017-05-24 17:42:46

标签: postgresql

所以这就是问题,我有两个表:apointments(有一个p)和medical_folder我得到了这个

  

错误:记录“新”没有字段“治愈”   语境:SQL语句“insert into medical_folder(id,”patient_AMKA“,cure,drug_id)   值(new.id,新的。 “patient_AMKA”,new.cure,new.drug_id)”   PL / pgSQL函数new_medical()在SQL语句中的第3行

create trigger example_trigger after insert on apointments 
for each row execute procedure new_medical();

create or replace function new_medical()
returns trigger as $$
begin 
if apointments.diagnosis is not null then
insert into medical_folder(id,"patient_AMKA",cure,drug_id)
values(new.id,new."patient_AMKA",new.cure,new.drug_id);
return new;
end if;
end;
$$ language plpgsql;


insert into apointments(id,time,"patient_AMKA","doctor_AMKA",diagnosis)
values('30000','2017-05-24 0 
07:42:15','4017954515276','6304745877947815701','M3504');

我已多次检查,并且所有表和列都已存在 请帮忙!谢谢!

表结构是:

create table medical_folder (
  id      bigInt,
  patient bigInt,
  cure    text,
  drug_id bigInt);

create table apointments (
  id      bigint,
  time    timestamp without time zone,
  "patient_AMKA" bigInt,
  "doctor_AMKA"  bigInt);

2 个答案:

答案 0 :(得分:3)

我遇到了同样的问题。 变化:

values(new.id,new."patient_AMKA",new.cure,new.drug_id);

为:

values(new.id,new."patient_AMKA",new."cure",new."drug_id");

答案 1 :(得分:1)

此错误表示表apointments(1 p)没有名为cure的字段。插入apointment时会触发,因此" new"是一个apointment行。也许它是诊断对象的一部分?

" new"中没有第二个表的值。行。您需要一种获取和插入它们的方法,并且使用触发器不是最简单/最干净的方法。 您可以让应用程序按表执行两次插入,并将它们包装在事务中以确保它们都已提交/回滚。另一个允许您更好地强制执行数据完整性的选项是创建一个存储过程,该过程将值插入两个表中并执行两次插入。您可以尽可能禁止用户写入表,有效地使存储过程成为插入数据的唯一方法。