扫一扫
分享文章到微信
扫一扫
关注官方公众号
至顶头条
如何写时间的详细存储过程?
如何写存储过程,把跨天的日期和时间当天的详细的显示出来,我就简单的举个例子:比如开始日期2009-12-08 8:00,结束日期是2009-12-11 15:00 ,然后我的需求是这样的
日期 开始时间 结束时间 地址
2009-12-08 8:00 23:59 台北
2009-12-09 00:00 23:59 台北
2009-12-10 00:00 23:59 台北
2009-12-11 00:00 15:00 台北
CREATE TABLE "EGIS_ADMIN"."NewTable" (
"ACTIVITY_ID" NUMBER(10) NOT NULL ,
"ACTIVITY_TYPE_ID" NUMBER(10) ,
"ASSOCIATE_ID" NUMBER(10) ,
"PLAN_SCHEDULE_ID" NUMBER(10) ,
"NAME" VARCHAR2(50 BYTE) ,
"NUMBER_OF_DONOR" NUMBER(10) ,
"PLANNING_VOLUME_OF_BLOOD" NUMBER(10,2) ,
"ADDRESS" VARCHAR2(256 BYTE) ,
"NEXT_ACTIVITY_DATE" DATE ,
"ACTIVITY_START_DATE" DATE ,
"ACTIVITY_END_DATE" DATE ,
PRIMARY KEY("ACTIVITY_ID")
)
create or replace procedure pro_activity (a in varchar2)
is
v_name VARCHAR2(256);
v_sdate VARCHAR2(256);
v_edate VARCHAR2(256);
v_sTime VARCHAR2(256);
v_eTime VARCHAR2(256);
v_addr VARCHAR2(256);
v_count number(10) default 0;
v_number number(2) default 0;
cursor c_act
is select
CONCAT(users.firstname,users.middleName) as fullName,
to_char(act.activity_start_date,'yyyy-mm-dd') as sdate,
to_char(act.activity_end_date,'yyyy-mm-dd') as edate,
to_char(act.activity_start_date,'hh24:mi') as stime,
to_char(act.activity_end_date,'hh24:mi') as stime,
act.address
from activity act
join plan_schedule ps on act.plan_schedule_id = ps.plan_schedule_id
join schedule_task_manpower stm on ps.plan_schedule_id=stm.schedule_id
join task_manpower tm on stm.schedule_task_manpower_id=tm.schedule_task_manpower_id
join users on users.user_id=tm.user_id
join plan_schedule_status ps_stauts on ps.current_status_id=ps_stauts.plan_schedule_status_id
where (ps.current_status_id=3 or ps.current_status_id=4);
begin
OPEN c_act;
LOOP
FETCH c_act INTO v_name,v_sdate,v_edate,v_sTime,v_eTime,v_addr;
v_count:=0;
if(v_edate > v_sdate) then
LOOP
if v_count = 0 then
dbms_output.put_line('人员姓名 '||'日期 '||'开始时间 '||'结束时间 '||'地址 ');
dbms_output.put_line(v_name ||v_sdate ||v_sTime|| '23:59'|| v_addr);
else
if(v_edate != v_sdate) then
dbms_output.put_line('人员姓名 '||'日期 '||'开始时间 '||'结束时间 '||'地址 ');
dbms_output.put_line(v_name ||v_sdate ||'00:00'|| '23:59' ||v_addr);
else
dbms_output.put_line('人员姓名 '||'日期 '||'开始时间 '||'结束时间 '||'地址 ');
dbms_output.put_line(v_name ||v_sdate ||'00:00'|| v_eTime|| v_addr);
end if;
end if;
EXIT WHEN v_sdate = v_edate;
v_sdate := to_char(to_date(v_sdate,'yyyy-mm-dd')+1,'YYYY-MM-DD');
v_count := v_count+1;
END LOOP;
else
dbms_output.put_line('人员姓名 '||'日期 '||'开始时间 '||'结束时间 '||'地址 ');
dbms_output.put_line(v_name ||v_sdate ||v_sTime|| v_eTime|| v_addr);
end if;
EXIT WHEN c_act%NOTFOUND;
END LOOP;
close c_act;
end pro_activity ;
如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。
现场直击|2021世界人工智能大会
直击5G创新地带,就在2021MWC上海
5G已至 转型当时——服务提供商如何把握转型的绝佳时机
寻找自己的Flag
华为开发者大会2020(Cloud)- 科技行者