Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 помогите пжлст с хранимой процедурой..  [new]
utopiya
Member

Откуда:
Сообщений: 37
У меня имеется слуд. таблица:
create table TTable(
Srcip char(15) NOT NULL,
Dstip char(15) NOT NULL,
Packet integer,
Byte integer);

insert into TTable (Byte, Srcip, Dstip, Packet)
values (2000000, '1.1.1.1', '2.2.2.2', 2000)
/

insert into TTable (Byte, Srcip, Dstip, Packet)
values (300000, '3.3.3.3', '4.4.4.4', 300)
/

insert into TTable (Byte, Srcip, Dstip, Packet)
values (400000, '3.3.3.3', '5.5.5.5', 400)
/

insert into TTable (Byte, Srcip, Dstip, Packet)
values (500000, '6.6.6.6', '7.7.7.7', 500)
/


insert into TTable (Byte, Srcip, Dstip, Packet)
values (600000, '6.6.6.6', '8.8.8.8', 600)
/

далее мы группируем записи, у кот. кол-во байт меньше 1000000. по айпи
(у нах дст айпи = 0.) и добавляем их в таблицу

INSERT INTO TTable(Srcip, DstIp, Byte, Packet)
select Srcip, 0, SUM(Byte), SUM(Packet)
from TTable
where Byte < 1000000
Group by Srcip
/

Удаляем те записи, которые учавствовали в выборке.

DELETE FROM TTable
WHERE Byte < 1000000
AND DstIp <> '0'
/

добавляем в таблицу записи, у кот. кол-во байт все еще меньше 1000000.
(у них срц айпи = 0)

INSERT INTO TTable(Srcip, DstIp, Byte, Packet)
select 0, 0, SUM(Byte), SUM(Packet)
from TTable
where Byte < 1000000
/


Удаляем те записи, которые учавствовали в выборке.

DELETE FROM TTable
WHERE Byte < 1000000
AND Srcip <> '0'
AND DstIp = '0'
/

вопрос следующий..нужна хранимая процедура, делающая тоже самое.. т.е. агрегирование записей :(
но я в них профан, если не сложно, не мог бы кто-нибудь помочь :( ?
заранее благодарен
24 мар 09, 12:04    [6967416]     Ответить | Цитировать Сообщить модератору
 Re: помогите пжлст с хранимой процедурой..  [new]
analitik
Member

Откуда: Сами мы не местные
Сообщений: 94
Создаем процедуру
CREATE PROCEDURE PROC
as
begin
--далее мы группируем записи, у кот. кол-во байт меньше 1000000. по айпи
--(у нах дст айпи = 0.) и добавляем их в таблицу
INSERT INTO TTable(Srcip, DstIp, Byte, Packet)
select Srcip, 0, SUM(Byte), SUM(Packet)
from TTable
where Byte < 1000000
Group by Srcip;

--Удаляем те записи, которые учавствовали в выборке.
DELETE FROM TTable
WHERE Byte < 1000000
AND DstIp <> '0';


--добавляем в таблицу записи, у кот. кол-во байт все еще меньше 1000000.
--(у них срц айпи = 0)
INSERT INTO TTable(Srcip, DstIp, Byte, Packet)
select 0, 0, SUM(Byte), SUM(Packet)
from TTable
where Byte < 1000000;

--Удаляем те записи, которые учавствовали в выборке.
DELETE FROM TTable
WHERE Byte < 1000000
AND Srcip <> '0'
AND DstIp = '0';

end;
Запускаем
exec proc

если надо воткните запуск вашей процедуры в job

variable jobno number

BEGIN
DBMS_JOB.SUBMIT(
 :jobno
,'proc;'
,sysdate
,'sysdate+1/24/60'
);
COMMIT;
END;
24 мар 09, 13:12    [6967905]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить