【问题标题】:Create table with a restriction for a Reasonable date SQL Oracle创建具有合理日期 SQL Oracle 限制的表
【发布时间】:2016-12-18 03:02:01
【问题描述】:

我在这里是因为我在寻找这个问题的答案时遇到了严重的问题。我的疑问是: 我创建了以下两个表(我省略了一些东西,因为我认为在这里写所有东西没有用):

SQL> CREATE TABLE PRESTAMO (
num_prestamo NUMBER(9),
fecha_prestamo DATE,
fecha_devolucion DATE, 
tipo VARCHAR(16) CONSTRAINT tipo_nnull NOT NULL, 
CONSTRAINT tipo_ck CHECK (tipo='Prestamo en sala' OR tipo='Prestamo externo')
);

还有,这个:

SQL> CREATE TABLE SOLICITA (
num_prestamo NUMBER(9) REFERENCES PRESTAMO(num_prestamo),
isbn NUMBER(9) REFERENCES LIBRO(ISBN),
fecha_solicitud DATE,
);

我想做的是设置一个限制,以便 fecha_solicitud

谢谢大家。

【问题讨论】:

  • 我们能看到代码sn-p吗? stackoverflow.com/help/how-to-ask。感谢您完成 2 分钟的实地考察。很多人不这样做,至少在这方面做得很好。
  • 什么是fecha_prestamo?我在两张表中都没有看到。大概它是您没有在第一个表中显示的列。约束仅存在于单个表中的行上,因此这不起作用。
  • 我刚刚添加了缺失的列。
  • T-Heron,我不明白你说“code sn-p”是什么意思,因为我已经在展示我所拥有的了。
  • 表格是否以某种方式相关?也许 num_prestamo 是第一个表中的主键和第二个表中的外键(指向第一个表)?您显然需要两个表之间的“连接条件”(否则,您如何限制一个表中一行的日期与来自另一表的日期...哪一行...?)

标签: sql oracle oracle11g


【解决方案1】:

我想,你可以使用触发器来做到这一点

    CREATE OR REPLACE TRIGGER SOLICITA_b4_in_up
    BEFORE INSERT or update 
       ON SOLICITA 
       FOR EACH ROW
    DECLARE
       my_fecha_prestamo date;
    BEGIN  
       select fecha_prestamo into my_fecha_prestamo 
              from PRESTAMO where num_prestamo = :new.num_prestamo;

     if my_fecha_prestamo < :new.fecha_solicitud then 
            Raise_Application_Error (-20050, 'Date constraint violated'); 
     end if;     
    END;
/

【讨论】:

  • @AlexisPermuy 欢迎,它有帮助/有效吗?如果确实如此,请投票/接受答案...
  • 我投了赞成票,但我的声望仍然不足以算作投票。
  • @AlexisPermuy OK ;-) 没关系.. 重要的是你解决了你的问题......我会投票给你的问题以提高你的声誉;-) 小心......
猜你喜欢
  • 2013-01-14
  • 1970-01-01
  • 1970-01-01
  • 2016-02-19
  • 2020-12-31
  • 2014-08-10
  • 2022-06-28
  • 1970-01-01
  • 2017-11-19
相关资源
最近更新 更多