日期:2014-05-17  浏览次数:21053 次

如何写一个存储过程实现定时提取数据
提取数据涉及到A(1字段,2字段,3字段),B(1字段,4字段,5字段)三个表,具体提取如:SELECT   A.1,SUM(2)   ,COUNT(3),B.4,B.5   FROM   A   ,   B   WHERE   A.1=B.1   GROUP   BY   A.1,B.4,B.5   ;
      如何用存储过程实现每月定时提取以上数据的功能,请高手指点,本人将不胜感激!


------解决方案--------------------
1、建一个表c包括你要提取数据的字段和一个DATA字段,用来区别提取时间。
2、建一个过程
CREATE OR REPLACE PROCEDURE TEST
IS
tmpvar NUMBER;
BEGIN
tmpvar := 0;
--插入数据和时间
INSERT INTO c
SELECT a.a, SUM (b), COUNT (c), b.d, b.e, SYSDATE
FROM a, b
WHERE a.a = b.a
GROUP BY a.a, b.d, b.e;

COMMIT;
EXCEPTION
WHEN NO_DATA_FOUND
THEN
NULL;
WHEN OTHERS
THEN
-- Consider logging the error and then re-raise
RAISE;
END TEST;
/

3、建一个job定时执行过程。其中next_date决定了第一次执行时间,interval决定了更新周期,这里的写法是每月1号执行。
DECLARE
X NUMBER;
BEGIN
SYS.DBMS_JOB.SUBMIT
(
job => X
,what => 'YJ.TEST; '
,next_date => to_date( '17-09-2007 00:00:00 ', 'dd/mm/yyyy hh24:mi:ss ')
,interval => 'trunc(sysdate+32, 'MM ') '
,no_parse => FALSE
);
END;

4、如果问题解决了,记得关闭,我要分。