科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道如何写时间的详细存储过程

如何写时间的详细存储过程

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

如何写时间的详细存储过程?

作者:csdn 来源:csdn 2009年12月22日

关键字: ORACLE 问答

  • 评论
  • 分享微博
  • 分享邮件

如何写时间的详细存储过程?

如何写存储过程,把跨天的日期和时间当天的详细的显示出来,我就简单的举个例子:比如开始日期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领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章