使用 oracle 触发器更新第二个 table 条件

Using oracle triggers to update a second table where a condition has been

我是 pl/sql 的新手,正在努力应对触发器。我需要为此代码使用触发器。我有 2 个 tables,job (job_id, job_name, job_price) 和 job_history (job_id, oldprice, datechanged)。我正在尝试创建一个触发器,当作业 table 中的 job_price 字段更新时,如果不存在行,则将旧作业详细信息添加到 job_history table或者如果该职位 ID 的新职位价格高于 job_history table 中该职位 ID 的任何先前存储价格。作业 table 中的作业 ID 字段不能重复,但 job_history table 中的作业 ID 字段可以重复。此外,如果不满足条件,即新的作业价格低于该作业 id 之前存储的所有价格,则应捕获错误。

我试过这个代码:

CREATE OR REPLACE TRIGGER conditional_update_job_hist
AFTER UPDATE OF jbsprice ON job
FOR EACH ROW
WHEN (new.jbsprice)<min(old.jbsprice);
BEGIN
INSERT INTO job_history (jbsid, oldprice) VALUES (:old.jbsid,:old.jbsprice);
IF :new.price is<>min(oldprice) THEN
RAISE_APPLICATION_ERROR('Condition not met.');
ENDIF;
END;
/

这导致第 4 行出现错误 ORA-00920: 无效的关系运算符。

我查看了 oracle 联机文档。这很混乱。我是否需要在触发器内使用游标和循环?小于运算符看起来不错,而 min(function) 看起来不错。我看不出哪里出错了。请帮忙

乍一看,我建议如下:

CREATE OR REPLACE TRIGGER conditional_update_job_hist
  AFTER UPDATE OF jbsprice ON job
  FOR EACH ROW
DECLARE
  hist_exists number;
BEGIN
  hist_exists := 0;
  begin
    -- select 1 if there is an entry in job_history of that jbsid 
    -- and an oldprice exists which is more than new jbsprice
    select distinct 1
    into hist_exists
    from job_history
    where jbsid = :old.jbsid
    and oldprice > :new.jbsprice;
  exception when no_data_found then hist_exists := 0;
  end;
  IF hist_exists = 0 then
    INSERT INTO job_history (jbsid, oldprice) VALUES (:old.jbsid,:old.jbsprice);
  END IF;
END;
/

忽略:

CREATE OR REPLACE TRIGGER conditional_update_job_hist AFTER UPDATE OF jbsprice ON job FOR EACH ROW WHEN (:new.jbsprice)<min(:old.jbsprice); BEGIN INSERT INTO job_history (jbsid, oldprice) VALUES (:old.jbsid,:old.jbsprice); IF :new.price is<>min(oldprice) THEN RAISE_APPLICATION_ERROR('Condition not met.'); ENDIF; END;