2017-05-24 4 views
2

、私は2つのテーブル持っているので、ここでの事です:(シングルP付き)apointmentsとmedical_folderを、私は私がチェックしている。このレコードの「新しい」なしフィールド「硬化」PostgreSQLの持っていない

ERROR: record "new" has no field "cure" CONTEXT: SQL statement "insert into medical_folder(id,"patient_AMKA",cure,drug_id) values(new.id,new."patient_AMKA",new.cure,new.drug_id)" PL/pgSQL function new_medical() line 3 at SQL statement

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); 
+0

私はpgAdmin 4を使っています! –

+0

メッセージには、medical_folderには "cure"という列がありません。スキーマを再度確認してください。あなたのスキーマがなければ、それ以上にあなたを助けることはできません。 – Stephan

+2

申し訳ありませんが、私はそれを言及するのを忘れてしまった: テーブルmedical_folderがある: ID(BIGINT) 患者(BIGINT) 硬化(テキスト) drug_id(BIGINT) とテーブルapointmentsは次のとおりです。 ID(BIGINT) 時間(タイムスタンプ"doctor_AMKA"(bigInt) "patient_AMKA"(bigInt) "doctor_AMKA"(bigInt) 私は自分のスキーマをチェックし、 "治癒"の列は存在します! –

答えて

0

このエラーは、(1つのpで)テーブルapointmentsを治すという名前のフィールドを持っていないことを意味します。トリガはapointmentを挿入するときに発生するので、 "new"はapointmentの行です。多分診断対象の一部ですか?

2番目のテーブルの値は、「新しい」行では使用できません。それらを取得して挿入する方法が必要で、トリガーを使用するのは簡単ではありません。 アプリケーションは2つの挿入をテーブルごとに行い、それらをトランザクションにラップしてコミット/ロールバックすることができます。データの整合性を強化するためのもう1つのオプションは、両方のテーブルに挿入する値を取り込み、2つの挿入を行うストアドプロシージャを作成することです。ユーザーがテーブルに書き込むことを禁じる限り、ストアドプロシージャをデータを挿入する唯一の方法のままにすることができます。

+0

実際に書かれた "治癒"は、medical_folderテーブルに属しているので、私は何か大きなものを見逃していると思います...申し訳ありませんが、私はSQLに新しいですが、私はまず "apointments"テーブルにデータを挿入し、トリガを介してテーブル "medical_folder"に..事前におめでとう! –

+0

cure/drug_idの値はどこから来ますか?彼らはすでにテーブルに入っていますか?>値を取り出して挿入します。ユーザー入力からですか? - >トリガーから挿入するのではなく、アプリケーションで2つの通常の挿入を実行するか、ストアドプロシージャを使用して実行します。 – JGH

+0

データ入力はユーザーから行われますが、すべてがトリガーを使用する必要がある割り当ての一部です機能 –

関連する問題