Oracle触发器基于sysdate循环和更新字段

时间:2016-01-15 13:49:32

标签: oracle loops triggers

我想制作一个触发器,当疫苗超过其有效期('EXPIRATION_DATE')时,可以将字段('STATUS')更新为非活动状态。 这是当前的表结构:

   **CREATE TABLE WAREHOUSE.VACCINE_INVENTORY (
      VACCINE  VARCHAR2(200 BYTE) NOT NULL,
      RECEIPT_DATE  DATE  NOT NULL,
      CONTAINER_SIZE  VARCHAR2(200 BYTE),
      QUANTITY  NUMBER(6, 0),
      REQUISITION  NUMBER(6, 0),
      FISCAL_YEAR  NUMBER(4, 0),
      RECEIVED_BY  VARCHAR2(50 BYTE),
      EXPIRATION_DATE DATE,
      LOT_NUMBER  VARCHAR2(30 BYTE)  NOT NULL,
      VENDOR  VARCHAR2(200 BYTE),
      STATUS  VARCHAR2(10 BYTE),
      CATALOG_NUMBER  NUMBER(5, 0),
      CONSTRAINT PK_VACC PRIMARY KEY (VACCINE, RECEIPT_DATE, LOT_NUMBER) USING INDEX TABLESPACE WAREHOUSE STORAGE**

所以我的想法是,如果SYSDATE> EXPIRATION_DATE到期日期应从Active更改为Inactive。

我认为我需要创建一个循环,这样当触发器运行时,它将循环遍历表中的所有记录,并将每个过期的疫苗设置为非活动状态。

我非常感谢任何帮助...

谢谢, 马修

1 个答案:

答案 0 :(得分:1)

创建一个附加视图以提供依赖于表列和sysdate的字段,例如

CREATE TABLE VACCINE_INVENTORY(VACCINE VARCHAR2(200 BYTE) NOT NULL,
                               -- ---
                               EXPIRATION_DATE DATE NOT NULL
                               -- ...
                               );

CREATE view VACCINE_INVENTORY_VW AS
  select v.*,
         case
           when v.expiration_date < sysdate then
            'I'
           else
            'A'
         end as status
    from VACCINE_INVENTORY v;