表里面有三个字段,分别是 name (varchar2) ,startTime(Date),endTime(Date),分别表示的是“组织者名称”,“开始时间”,“结束时间”。表里面有很多数据。现在传入这3个参数,要判断新传入的“开始时间”和“结束时间”这个时间段跟以前的时间段有没有时间重叠的地方,如果有,把对应的“组织者”找出来,跟新传入的组织者对比,判断是否是同一个人。
实际上就是判断在同一时间内组织者是否有冲突的问题。
可以是SQL语句或者存储过程,不要程序包。大虾们,帮帮忙``在线等
实际上就是判断在同一时间内组织者是否有冲突的问题。
可以是SQL语句或者存储过程,不要程序包。大虾们,帮帮忙``在线等
如果是
select * from table a where a.name like '&name&' and to_char(a.starttime,'yyyy-mm-dd') >= to_char(开始时间,'yyyy-mm-dd') and to_char(a.endtime ,'yyyy-mm-dd') <=to_char(结果时间,'yyyy-mm-dd')
begin
select t.* from organization t where ((startTime_In between startTime and endTime) or (endTime_In between startTime and endTime)) and name_In = name;
--冲突之后的处理
end Comparison;
--1.找出"开始时间"和"结束时间"按相同的人
select name
from tb_name a
where exists(
select 1 from tb_name b
where a.startTime=b.startTime
and a.endTime=b.startTime)
--2.判断是否有重名的name--你的表有点问题,那个字段是主键,应该根据主键来判断是否该更新数据,
--而不是人名,因为人名有重复的
lv_name VARCHAR2(80) := NAME; --传入的组织者名称
sTime DATE := startTime; --传入的开始日期
eTime DATE := endTime; --传入的结束日期
lv_name2 VARCHAR2(80); --可能存在交叉的组织者名称
BEGIN
BEGIN
SELECT NAME
INTO lv_name2
FROM tb_name a
WHERE a.startTime <= eTime AND a.endTime >= sTime;
IF lv_name2 = lv_name THEN
dbms_output.put('组织者名称:' || lv_name2);
END IF;
EXCEPTION
WHEN no_data_found THEN
dbms_output.put('不存在有交叉的组织者名称');
END IF;END;