所以目前我正在开发一个需要保存具有开始日期和结束日期的值的应用程序。其中一个限制是,如果我插入一个新的寄存器,我必须验证没有寄存器包含新值定义的任何月份(我知道我在这里没有正确解释,但英语不是我的母语)让我举一个视觉例子。
所以,让我们知道有一个包含这些值的表:
ID |Start Date | Ending date
001 05/08/2014 05/12/2014
002 03/05/2014 03/04/2014
因此,验证必须确保如果我尝试广告这样的新值:
003| 05/09/2014 |05/11/2014
它不允许我进行保存数据,因为已经有一个范围包含我要添加的相同月份。
我知道如何制作c#部分。但是我正在努力学习SQL,因为这不是我最好的领域。任何帮助或指导将不胜感激。目前正在使用Oracle 9-11。
答案 0 :(得分:0)
假设你的表名是: Your_table_name_here ,你可以尝试这个脚本。
Create Table Your_table_name_here
(
Id Varchar2(25) Not Null,
Start_date Date Not Null,
Ending_date Date Not Null,
Constraint Your_table_name_here_pk Primary Key(Id)
)
/
-- create a database trigger to automatically validate the date entered --
Create Or Replace Trigger Tbi_your_table_name_here
Before Insert
On Your_table_name_here
Referencing New As New Old As Old
For Each Row
Declare
Tmpvar Number;
Begin
Tmpvar := 0;
Begin
Select 1
Into Tmpvar
From Your_table_name_here
Where (:new.Start_date Between Start_date And Ending_date
Or :new.Ending_date Between Start_date And Ending_date)
And Rownum < 2;
Raise_application_error( -20996, 'Date Range, already in database');
Exception
When No_data_found Then
Null; -- is OK, no dates found in range
When Others Then
Raise_application_error( -20997, 'Incorrect Date : ' || Sqlerrm);
End;
Exception
When Others Then
-- Consider logging the error and then re-raise
Raise;
End Tbi_your_table_name_here;
/
Show Errors
/
基本上,您创建一个触发器来验证输入到表中的数据。
希望这会有所帮助