- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
- 94
- 95
- 96
- 97
-- Процедура формирования таблицы анализа по FIR
CREATE PROCEDURE KojevnikovFir
@DateFo varchar(10),
@DateTo varchar(10)
AS DECLARE @Polet int, @ProcPolet numeric(4,2)
-- определяю кол-во выполненных рейсов в диапазоне дат----
SET @Polet = (SELECT DISTINCT Count(ID) FROM PPLS WHERE
( ( FLI_ENTRY=1 or FLI_EXIT=1 ) or (DEP=1 and DEP_AERODROME like'UK%' ) or
(ARR=1 and DEST_AERODROME Like'UK%') ) and (ENTRY_TIME >=@DateFo and ENTRY_TIME <=@DateTo))
----------- Начало формирования таблицы FIR-------------------
-- Создаем SCROLL курсор 1 для чтения
DECLARE Cursor_All_Pol CURSOR SCROLL KEYSET TYPE_WARNING FOR SELECT Marsrut,All_Polet
FROM Marsr_All_Pol FOR READ ONLY
-- Открытие курсора 1 и наполнение его данными
OPEN Cursor_All_Pol DECLARE @Marsrut char(11), @All_Polet int,@Count1 int,@Count1_end int
SET @Count1=1 SET @Count1_end = @@CURSOR_ROWS
-- ===========обьявляю и заполняю курсор по 2 таблице==============
DECLARE Cursor_Air CURSOR SCROLL KEYSET TYPE_WARNING
FOR SELECT Marsrut,TYPE_AIRCRAFT,kol_TypeAir FROM Marsr_kol_Air FOR READ ONLY
-- Открытие курсора 2 и наполнение его данными
OPEN Cursor_Air
DECLARE @MarsrutAir char(11),@Type nvarchar(4), @Air_Polet int,@Count2 int,@Count2_end int
SET @Count2 = 0 SET @Count2_end = @@CURSOR_ROWS
-- ===========обьявляю и заполняю курсор по 3 таблице==============
DECLARE Cursor_AK CURSOR SCROLL KEYSET TYPE_WARNING
FOR SELECT Marsrut,ICAO,AK,kol_AK FROM dbo.Marsr_kol_AK FOR READ ONLY
-- Открытие курсора 2 и наполнение его данными
OPEN Cursor_AK
DECLARE @MarsrutAK char(11),@ICAO char(3),@AK varchar(60),@kol_AK int,@Count3 int,@Count3_end int
SET @Count3 = 0 SET @Count3_end = @@CURSOR_ROWS
-- цикл по первому курсору
WHILE @Count1 < @Count1_end BEGIN
-- на 1 запись курсора 1
FETCH NEXT FROM Cursor_All_Pol INTO @Marsrut, @All_Polet
-- вставляю строку маршрута и кол-ва полетов в таблицу
SET @ProcPolet = ((@All_Polet * 100)/@Polet)
INSERT KojevnikovAnalizFIR (Marsrut,All_Polet,PrcAll,TYPE_AIRCRAFT,kol_TypeAir,ICAO,AK,kol_AK)
VALUES (@Marsrut,@All_Polet,@ProcPolet,null,null,null,null,null)
SET @Count1 = @Count1 + 1
-- цикл по второму курсору
FETCH FIRST FROM Cursor_Air INTO @MarsrutAir,@Type,@Air_Polet
SET @Count2 = 1
-- Формирую 1 строку маршрут + ВС
IF @Marsrut = @MarsrutAir BEGIN
INSERT KojevnikovAnalizFIR (Marsrut,All_Polet,PrcAll,TYPE_AIRCRAFT,kol_TypeAir,ICAO,AK,kol_AK)
VALUES (null,null,null,@Type,@Air_Polet,null,null,null)
END --IF
WHILE @Count2 < @Count2_end BEGIN
-- увеличиваю счетчик курсора 2
FETCH NEXT FROM Cursor_Air INTO @MarsrutAir,@Type,@Air_Polet
-- Формирую строку маршрут + ВС
IF @Marsrut = @MarsrutAir BEGIN
INSERT KojevnikovAnalizFIR (Marsrut,All_Polet,PrcAll,TYPE_AIRCRAFT,kol_TypeAir,ICAO,AK,kol_AK)
VALUES (null,null,null,@Type,@Air_Polet,null,null,null)
END --IF
-- закрываю цикл WHILE 2 (второй курсор)
SET @Count2 = @Count2 + 1
END
-- цикл по третьему курсору
FETCH FIRST FROM Cursor_AK INTO @MarsrutAK,@ICAO,@AK,@kol_AK
SET @Count3 = 1
-- Формирую 1 строку маршрут + АК
IF @Marsrut = @MarsrutAK BEGIN
INSERT KojevnikovAnalizFIR (Marsrut,All_Polet,PrcAll,TYPE_AIRCRAFT,kol_TypeAir,ICAO,AK,kol_AK)
VALUES (null,null,null,null,null,@ICAO,@AK,@kol_AK)
END --IF
WHILE @Count3 < @Count3_end BEGIN
-- увеличиваю счетчик курсора 3
FETCH NEXT FROM Cursor_AK INTO @MarsrutAK,@ICAO,@AK,@kol_AK
-- Формирую строку маршрут + ВС
IF @Marsrut = @MarsrutAK BEGIN
INSERT KojevnikovAnalizFIR (Marsrut,All_Polet,PrcAll,TYPE_AIRCRAFT,kol_TypeAir,ICAO,AK,kol_AK)
VALUES (null,null,null,null,null,@ICAO,@AK,@kol_AK)
END --IF
-- закрываю цикл WHILE 2 (второй курсор)
SET @Count3 = @Count3 + 1
END
-- закрываю цикл WHILE 1 (первый курсор)
END
-- Закрываю курсор 2
CLOSE Cursor_Air
-- Удаляю курсор 1 как обьект
DEALLOCATE Cursor_Air
-- Закрываю курсор 3
CLOSE Cursor_AK
-- Удаляю курсор 1 как обьект
DEALLOCATE Cursor_AK
-- Закрываю курсор
CLOSE Cursor_All_Pol
-- Удаляю курсор 1 как обьект
DEALLOCATE Cursor_All_Pol
------------Конец--------------------
GO
select * from KojevnikovAnalizFIR
truncate table dbo.KojevnikovAnalizFIR
DELETE from KojevnikovAnalizFIR
exec dbo.KojevnikovFir '2004-01-01','2004-01-05'
Konardo 18.02.2014 13:36 # −15
Konardo 18.02.2014 15:51 # −17