我要写一个oracle的存储过程,实现下面的功能,如果可以用sql实现,那就更好了!据我研究,好像写不出来啊!! 郁闷:已经前提:
一:有第一张表A,纪录每个事件X发生的时间-->共100个事件
二:有第二张表B,纪录每个事件Y发生的时间和事件具体信息-->共1000个事件求: 由A表,我可以知道的每个事件X发生时间,共100个时间点,我要找出,这100个时间点之后,在B表的前两笔事件Y的信息; 举例:A表X事件时间发生在10点,我要在B表的Y事件中找到10点之后发生的事件,那会有很多,我只找前两笔;
A表X事件时间发生在11点,我要在B表的Y事件中找到11点之后发生的事件的前两笔;
一:有第一张表A,纪录每个事件X发生的时间-->共100个事件
二:有第二张表B,纪录每个事件Y发生的时间和事件具体信息-->共1000个事件求: 由A表,我可以知道的每个事件X发生时间,共100个时间点,我要找出,这100个时间点之后,在B表的前两笔事件Y的信息; 举例:A表X事件时间发生在10点,我要在B表的Y事件中找到10点之后发生的事件,那会有很多,我只找前两笔;
A表X事件时间发生在11点,我要在B表的Y事件中找到11点之后发生的事件的前两笔;
select
B.Y
from
B
where
B.time > (
select
max(A.time)
from
A
)
and rownum < 3
order by
B.time;
Cursor Lot_test_time Is
Select * From eQ_HISTORY_V a Where a.Begintmst > TO_DATE('2005-12-18 00:00:00','YYYY-MM-DD HH24:MI:SS')
And a.Begintmst < TO_DATE('2006-12-18 00:00:00','YYYY-MM-DD HH24:MI:SS')
And (a.Eq_Status='PM' Or a.Eq_Status='MONIT')
And a.Pu='OXE-1A';
cur integer;
ret integer;
str varchar2(1000);
tname Varchar2(1000);
Begin
tname := Lot_After_Test;
str := 'create table '||tname||'(lot varchar2(32),'||
' process varchar2(32),'||
' product varchar2(32),'||
' stepname varchar2(32),'||
' processingunit varchar2(32),'||
'recipe1 varchar2(32),'||
'moveintmst varchar2(32),'||
'moveouttmst varchar2(32)';
cur := dbms_sql.open_cursor;
dbms_sql.parse(cur, str, dbms_sql.v7);
ret := dbms_sql.execute(cur);
dbms_sql.close_cursor(cur);for rec in Lot_test_time Loop
Cursor compare_result Is
Select * From Lot_Job_History b Where b.Processingunit='OXE-1A'
And b.Moveintmst>TO_DATE('2005-12-01 00:00:00','YYYY-MM-DD HH24:MI:SS')
And b.Moveintmst<TO_DATE('2006-12-29 00:00:00','YYYY-MM-DD HH24:MI:SS')
And b.Moveintmst> rec.endtmst
And Rownum <3
Order By b.Moveintmst;
--str := 'insert into '||tname||'(lot, process ,product ,'||
-- 'stepname,processingunit,'||
-- 'recipe1,moveintmst,moveouttmst) Values( :x, :y,:z,:a,:b,'||
-- ':c,:d,:e)';
For rec1 in compare_result Loop
Insert Into Lot_After_Test(lot,process,product,stepname,processingunit,recipe1,moveintmst,moveouttmst)
Values (rec1.lot,rec1.process,rec1.product,rec1.stepname,rec1.processingunit,rec1.recipe1,rec1.moveintmst,rec1.moveouttmst);
End Loopend loop;
end;
-- insert into spc_m1alarm_summary
-- (product, lot_count, item_count, alarm_count,
-- alarm_ratio, from_time, end_time, week)
-- values
-- (w_product, w_lot_count, w_item_count, w_alarm_count,
-- w_alarm_ratio, i_from_time, i_end_time, w_week); 我写的,不过报错:PLS-00103;;help?!!!!
declare
cursor cur_x_date is select x_date from a;
v_x_date a.x_date%TYPE;
begin
execute immediate 'truncate table b_temp';
open cur_x_date;
loop
fetch cur_x_date into v_x_date;
exit when cur_x_date%NOTFOUND;
insert into b_temp (select corp,v_x_date from
(select rownum rn,b.* from b where y_date >v_x_date ) where rn<3);
end loop;
commit;
close cur_x_date;
end;
from a, b
where a.dt < b.dt
and (select count(*)
from b t
where t.dt > a.dt
and t.dt <= b.dt) between 1 and 2
order by a.dt, b.dt;