同じスキーマを持つ2つのテーブルと、両方のnocとしての主キーがあります。
表1で挿入を行う場合は常に、そのnocをTABLE2でチェックする必要があります。存在する場合は、行全体を比較し、違いがある場合は例外を発生させる必要があります。また、nocがTABLE2に存在しない場合は、単純な挿入が続く必要があります
これが私のトリガー機能です
CREATE OR REPLACE FUNCTION ac_val()
RETURNS trigger AS
$BODY$
BEGIN
IF NEW.acop IS NULL THEN
INSERT INTO exception_detail( noc,exception)
VALUES (new.noc,'number cannot be empty');
END IF;
RETURN NEW;
END;
$BODY$
LANGUAGE plpgsql VOLATILE
これが私の引き金です
CREATE TRIGGER acut_val
AFTER INSERT OR UPDATE
ON acut
FOR EACH ROW
EXECUTE PROCEDURE ac_val();
これは1つのテーブルで完全に問題ありませんが、すべての挿入の要件に従って、nocが他のテーブルに存在するかどうかを確認する必要があります。TABLE2、存在する場合は比較を行う必要があります。そうでない場合は挿入します。
acuitに挿入されるデータはcsvからコピーされるため、挿入ごとにそのチェックを実行できないと思います。これにはcsvからのコピーが必要であり、コピーするとエラーが発生します。uはスーパーユーザーである必要がありますが、iコンソールからそのOKをコピーします。したがって、acuitでデータがコピーされた後、行ごとにチェックを行うようなことを行うことができますか?
SELECT q1.* FROM acut q1
INNER JOIN TABLE2 q2 ON (q1.noc = q2.noc);
TABLE2に存在するacutのレコードを提供します
その後
foreach row of above output{
if (q1.name != q2.name)
Do something ;
if (q2.address < q1.address)
Do something ;
}