0

无论如何我们可以根据日期自动更改列的值吗?像编写程序或触发器一样?我需要在不插入或更新任何其他表/列的情况下更改值。

4

1 回答 1

0

不直接,不。

DBMS_JOB您可以使用其中一个或DBMS_SCHEDULER将在后台运行并UPDATE在将来的某个时间点发出一个作业来提交作业。您可以在插入或更新行时从触发器提交作业,即

CREATE OR REPLACE TRIGGER trigger_name
  BEFORE INSERT OR UPDATE ON table_name
  FOR EACH ROW
DECLARE
  l_jobno PLS_INTEGER;
BEGIN
  IF :new.status = 'active'
  THEN 
    dbms_job.submit( l_jobno,
                     q'{UPDATE table_name SET status = 'inactive' WHERE table_id = }' || :new.table_id,
                     sysdate + x ); 
  END IF;
END;

当然,根据我们所讨论的行数,您可能会更好地拥有一个每隔几分钟运行一次的作业,该作业会根据您定义的任何标准更新表。

于 2012-11-15T03:21:56.993 回答