利用oracle存储过程计算时长并剔除18:00-8:30之间的非工作时间

利用oracle存储过程计算时长并剔除18:00-8:30之间的非工作时间,第1张

CREATE OR REPLACE

PROCEDURE dgh

  (

    starttime IN DATE,

    endtime   IN DATE,

    rst OUT NUMBER)

AS

  wholeDays_TO_seconds NUMBER;

  firstDay_To_Seconds  NUMBER;

  lastDay_To_Seconds   NUMBER;

BEGIN

   SELECT CAST(endtime - starttime AS NUMBER(10,0))6060(18-85)

     INTO wholeDays_TO_seconds

     FROM dual;

  IF starttime          > TRUNC(starttime)+NUMTODSINTERVAL(18,'hour') THEN

    firstDay_To_Seconds:=0;

  ELSE

     SELECT (TRUNC(starttime)+NUMTODSINTERVAL(18,'hour')-starttime)606024

       INTO firstDay_To_Seconds

       FROM dual;

  END IF;

  IF endtime           < TRUNC(endtime)+NUMTODSINTERVAL(8,'hour')+NUMTODSINTERVAL(30,'minute') THEN

    lastDay_To_Seconds:=0;

  ELSE

     SELECT (endtime-(TRUNC(endtime)+NUMTODSINTERVAL(18,'hour')))606024

       INTO lastDay_To_Seconds

       FROM dual;

  END IF;

   SELECT wholeDays_TO_seconds+firstDay_To_Seconds+lastDay_To_Seconds

     INTO rst

     FROM dual;

END;set serveroutput on

declare

rst number;

begin

rst:=0;

dgh(to_date('2014-06-18 12:43:09','yyyy-mm-dd hh24:mi:ss'),to_date('2014-06-19 12:43:09','yyyy-mm-dd hh24:mi:ss'),rst);

dbms_outputput_line('--------------'||rst);

end;

你的procedure写错了

create or replace procedure abc(v1 in number,v2 in number,res out number)

as

begin

res := v1v2;

end;

/

在sqlplus里调用

set serveroutput on

var res number;

begin

abc(3, 5, :res);

end;

/

输出:

print res;

问题补充:如何在oracle 10g 使用PL/SQL developer获取系统当前年月日和时间??谢谢!

SELECT SYSDATE FROM DUAL;

目测, 你的存储过程, 需要在 下面这些时刻运行:

1:00

3:00

5:00

7:00

16:00

18:00

20:00

22:00

CREATE OR REPLACE PROCEDURE other_proc

AS

vHour VARCHAR(2);

BEGIN

vHour := TO_CHAR(SYSDATE, 'HH24');

IF vHour = '01' OR vHour = '03' OR vHour = '05' OR vHour = '07'

OR vHour = '16' OR vHour = '18' OR vHour = '20' OR vHour = '22' THEN

-- 调用你那个存储过程

-- 由于没有代码, 暂时写 NULL;

NULL;

END IF;

END;

/

variable jobno number;

begin

dbms_jobsubmit(:jobno, 'other_proc;', trunc(sysdate+1/24,'HH'), 'trunc(SYSDATE+1/24,''HH'')');

commit;

end;

/

以上就是关于利用oracle存储过程计算时长并剔除18:00-8:30之间的非工作时间全部的内容,包括:利用oracle存储过程计算时长并剔除18:00-8:30之间的非工作时间、oracle 执行存储过程、oracle定时执行存储过程的时间区间问题等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/9449066.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-28
下一篇2023-04-28

发表评论

登录后才能评论

评论列表(0条)

    保存