【问题标题】:Oracle Trigger to loop and update field based on sysdateOracle 触发器根据 sysdate 循环和更新字段
【发布时间】:2016-01-15 13:49:32
【问题描述】:

我想创建一个触发器,当疫苗过期(“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。

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

我将不胜感激任何帮助......

谢谢, 马修

【问题讨论】:

  • 这适用于哪个 RDBMS?请添加标签以指定您使用的是mysqlpostgresqlsql-serveroracle 还是db2 - 或完全其他的东西。
  • 抱歉,这是针对 Oracle (Oracle 12c) 的。谢谢。
  • “触发器”是指每天运行的计划作业吗?如果是这样,则不需要循环;一条更新语句就可以完成这项工作。您只需将其放入 pl/sql 过程中,然后设置作业以调用该过程
  • 感谢 Boneist:我最终使用了更新声明。谢谢。

标签: oracle loops triggers


【解决方案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;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-08-03
    • 1970-01-01
    • 2010-12-22
    • 1970-01-01
    • 1970-01-01
    • 2018-11-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多