情况是这样的,我要做个java实践,老师让我用oracle数据库,但是我才刚学,所以遇到问题了
做的系统是个进销存系统,有个订单表,还有个出库表,每天用户下订单,然后到晚上12点得时候,数据库自动的把今天的订单表统计每一项商品要出库的数量,然后存进出库表,这样第二天出库人员就可以看到昨天需要出库的商品的数量
我猜想是用触发器吧,但是没写过按时间的触发器,还是用其他技术,大致跟我说下用什么技术去实现就行,感激不尽!

解决方案 »

  1.   

    沙发自己做,在线等,如果要表结构,也可以说,为了做完这个java实践项目~希望有人帮助下
      

  2.   

    按照要求,是每天定时完成这一个业务操作。
    这个应该放在Java代码中来实现,而不是把这个操作用数据库来实现。(更不是触发器了)
    我的意思是定时操作由Java代码来实现,最终数据库表中的数据也是由Java代码写SQL语句来完成。
      

  3.   

    java代码实现,那这样是不是服务器要一直运行?如果服务器不能一直运行,还能让他在24时的时候进行这个操作吗?
      

  4.   

    服务器一般情况都是7 X 24小时运行的啊。
    如果你服务器不运行,即使通过Oracle的作业等途径也无法实现自动执行啊。
      

  5.   

    明白你的意思了,是Web服务器不7 X 24运行,而数据库服务器7 X 24运行。(这种做法不常见)
    可以写存储过程,然后建立Oracle作业,定时自动执行。
      

  6.   

    恩,就是这个意思,但是我的项目不是用web服务器,是我自己写的服务器,是GUI编程,用了RMI,调用服务器端的方法,我先去看看这个怎样弄吧,还是谢谢了
      

  7.   

    直接把你的业务写成procedure,用job定时执行
      

  8.   

    写在存储过程里,然后job定时执行!只要服务器不挂掉,肯定按时执行的!
      

  9.   

    对头,就是JOB执行procedure就可以了
      

  10.   

    写在存储过程里,然后job定时执行!
      

  11.   

    用job调用存储过程实现吧。 跟你java一个原理
      

  12.   


    --job 事例
    DECLARE
    X NUMBER;
    BEGIN
    SYS.DBMS_JOB.SUBMIT
    ( job => X,
    what => 'ETL_RUN_D_Date;',
    next_date => to_date('2009-08-26 01:00:00','yyyy-mm-dd hh24:mi:ss'),
    interval => 'trunc(sysdate)+1+1/24',
    no_parse => FALSE
    );
    SYS.DBMS_OUTPUT.PUT_LINE('Job Number is: ' || to_char(x));
    COMMIT;
    END;
    /
    以上是明确指定每天的1点执行此job,如果指定是每天中午12点执行interval需要指定为'trunc(sysdate)+1+12/24',如果仅仅指定interval为一天,这样当你手工用dbms_job.run(job)去运行一次时,job每天的执行时间是会改变的,如果你想job每天在固定时间执行,可以参考上面的例子.
    初始化相关参数job_queue_processes
    alter system set job_queue_processes=39 scope=spfile;//最大值不能超过1000 ;job_queue_interval = 10 //调度作业刷新频率秒为单位job_queue_process 表示oracle能够并发的job的数量,可以通过语句  show parameter job_queue_process;来查看oracle中job_queue_process的值。当job_queue_process值为0时表示全部停止oracle的job,可以通过语句ALTER SYSTEM SET job_queue_processes = 10;来调整启动oracle的job。相关视图:
    dba_jobs
    all_jobs
    user_jobs
    dba_jobs_running 包含正在运行job相关信息---------------------------提交job语法:begin
    sys.dbms_job.submit(job => :job,
    what => 'P_CLEAR_PACKBAL;',
    next_date => to_date('04-08-2008 05:44:09', 'dd-mm-yyyy hh24:mi:ss'),
    interval => 'sysdate+ 1/360');
    commit;
    end;
    /-------------------------
    --创建JOB
    variable jobno number; 
      

  13.   

    variable jobno number;
    begin
    dbms_job.submit(:jobno, 'P_CRED_PLAN;',SYSDATE,'SYSDATE+1/2880',TRUE);
    commit;
      

  14.   

    非常感谢,我数据库刚接触,存储过程也是刚接触,job的什么还不懂,实践我还是用java去实现了,我再慢慢看看数据库怎么实现吧,再次感谢,结贴了