创建具有合理日期限制的表SQL Oracle

创建具有合理日期限制的表SQL Oracle,sql,oracle,oracle11g,Sql,Oracle,Oracle11g,我来这里是因为我在寻找这个问题的答案时遇到了严重的问题。我的疑问是: 我创建了以下两个表(我省略了一些内容,因为我认为在这里写所有内容都没有用): 还有,这个: SQL> CREATE TABLE SOLICITA ( num_prestamo NUMBER(9) REFERENCES PRESTAMO(num_prestamo), isbn NUMBER(9) REFERENCES LIBRO(ISBN), fecha_solicitud DATE, ); 我想做的是设置一个限制,以便

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

还有,这个:

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

我想做的是设置一个限制,以便fecha_requestud我想,您可以使用trigger来实现这一点

    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;
/
在启动中创建或替换触发器请求
在插入或更新之前
关于请求
每行
声明
我的生日;
开始
在my\u fecha\u prestamo中选择fecha\u prestamo
来自PRESTAMO,其中num_PRESTAMO=:new.num_PRESTAMO;
如果我的朋友们<:new.fecha\u requestud那么
Raise_应用程序_错误(-20050,“违反日期约束”);
如果结束;
结束;
/

我们能看到代码片段吗?stackoverflow.com/help/how-to-ask。感谢您完成2分钟的现场参观。这么多人不这样做,至少在这方面做得很好。什么是费夏奥·普雷斯塔莫?这两张表我都看不到。可能是第一个表中没有显示的列。约束只存在于单个表中的行上,因此这不起作用。我刚刚添加了缺少的列。t-Heron,我不明白你说的“代码片段”是什么意思,因为我已经展示了我得到的。表之间有什么关联吗?也许num_prestamo是第一个表中的主键,而外键(指向第一个表)是第二个表中的外键?您显然需要两个表之间的“连接条件”(否则,您如何将一个表中一行的日期与另一个表中…哪一行的日期相比较?)@AlexisPermuy欢迎,这有帮助/有效吗?如果有,请投票/接受答案……我投票了,但我仍然没有足够的声誉将其算作投票。@AlexisPermuy OK;-)不要介意。。重要的是你解决了你的问题。。。我将投票表决你的问题,以提高你的声誉;-)当心。。。
    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;
/