Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
отчет (1).docx
Скачиваний:
12
Добавлен:
29.03.2015
Размер:
459.49 Кб
Скачать

Программный код

DECLARE

I INTEGER;

k INTEGER;

L INTEGER:=0;

D1 DATE;

R INTEGER;

M INTEGER;

Q1 INTEGER;

Q2 INTEGER;

T INTEGER:=0;

D2 INTEGER;

p INTEGER:=0;

CURSOR C_zakfil IS – привязываем таблицу ZAKAZ_FILIALU к курсорам чтобы работать с данными

SELECT *

FROM ZAKAZ_FILIALU

WHERE KOD_ZAKAZA_FILIALU =I;

cv_zf C_zakfil%rowtype;

CURSOR denki IS

SELECT *

FROM DALNOST

WHERE KOD_POSTAVSHCHIKA =M;

c_denki denki%rowtype;

CURSOR C_NNYY IS – привязываем таблицу ZAKAZ_POSTAVSHCHIKU к курсорам чтобы работать с данными

SELECT *

FROM ZAKAZ_POSTAVSHCHIKU

WHERE KOD_ZAKAZA_POSTAVSHCHIKU =R;

cv_NN C_NNYY%rowtype;

CURSOR C_obrabotka IS – группируем по коду заказа филиалу, затем находим последний этап обработки заказа и начинаем движение по таблице обработка заказа с выполненных заказов

SELECT KOD_ZAKAZA_FILIALU, MAX(KOD_ETAPA_OBRABOTKI_ZAKAZA) as d

FROM OBRABOTKA_ZAKAZA

GROUP BY KOD_ZAKAZA_FILIALU

ORDER by MAX(KOD_ETAPA_OBRABOTKI_ZAKAZA) desc;

cv_obr C_obrabotka%rowtype;

CURSOR C_NNQQ IS – привязываем таблицу, она пригодится для вывода даты

SELECT *

FROM OBRABOTKA_ZAKAZA

WHERE (KOD_ZAKAZA_FILIALU =Q1) AND (KOD_ETAPA_OBRABOTKI_ZAKAZA=Q2) ;

cv_QQN C_NNQQ%rowtype;

BEGIN

DBMS_OUTPUT.enable; – подключаем процедуру вывода текста на экран

FOR cv_obr IN C_obrabotka LOOP – начинаем с первой строчки двигаться по таблице обработка заказа. Здесь отображаются только последние этапы заказов, находящихся в обработке

I:=cv_obr.KOD_ZAKAZA_FILIALU; – запоминаем код заказа филиалу первой строчки в таблице

FOR cv_zf IN C_zakfil LOOP – по коду заказа филиалу в I открываем таблицу заказ филиалу

Q2:= cv_obr.d ;

Q1:= cv_obr.KOD_ZAKAZA_FILIALU;

R:=cv_zf.KOD_ZAKAZA_POSTAVSHCHIKU;

FOR cv_NN IN C_NNYY LOOP – открываем таблицу поставщик по коду заказа филиалу

M:=cv_NN.KOD_POSTAVSHCHIKA;

END LOOP;

IF cv_obr.d = 27 THEN – запоминаем код поставщика и, если заказ находится на предпоследнем этапе, то можно сделать прогноз даты его поступления

FOR cv_QQN IN C_NNQQ LOOP теперь снова открываем таблицу по значению KOD_ZAKAZA_FILIALU и KOD_ETAPA_OBRABOTKI_ZAKAZA. когда мы открывали эту таблицу в строке FOR cv_obr IN C_obrabotka LOOP , в ней содержалась не вся информация

D1:=cv_QQN.DATETIME – запоминаем дату оформления этапа ожидание заказа

endloop;

FOR c_denki IN denki LOOP

if (cv_zf.KOLICHESTVO>=c_denki.KOLICHESTVO_OT) and (cv_zf.KOLICHESTVO<=c_denki.KOLICHESTVO_DO) then

P:=c_denki.DNI;

end if;

end loop;

end if;

if L<>cv_obr.dthen – условия необходимое для того , чтобы строчка На этапе ­­­ находятся заказы выводилась 1 раз для каждого этапа

K:=cv_zf.STOIMIST_ZA_SHTUKU*cv_zf.KOLICHESTVO; – считаем суммы завершенных заказов

DBMS_OUTPUT.put_line('На этапе '||to_char(cv_obr.d)||' находятся заказы ');

DBMS_OUTPUT.put_line('№ '||to_char(cv_obr.KOD_ZAKAZA_FILIALU) ||' Сумма заказа = '||to_char(K));

DBMS_OUTPUT.put_line(' '); – выводим полученную информацию

L:=cv_obr.d; – запоминаем предыдущий этап для того чтобы строчка На этапе находятся заказы выводилась 1 раз для каждого этапа

IF cv_obr.d = 27 THEN

DBMS_OUTPUT.put_line('Примерная дата поступления заказа = '||to_char(D1+N)||' Через '||to_char(D1+N-sysdate, '9999')||' дня '); – считаем сколько дней осталось до поступления заказа относительно текущей даты

DBMS_OUTPUT.put_line(' '); – выводим примерную дату поступления заказа, если заказ на предпоследнем этапе

END IF;

IF cv_obr.d = 29 THEN T:=T+K;END IF; – если последний этап, то считаем общую сумму за выполненные заказы

else

K:=cv_zf.STOIMIST_ZA_SHTUKU*cv_zf.KOLICHESTVO; – считаем сумму за данный заказ

IF cv_obr.d = 29 THEN T:=T+K;END IF;

DBMS_OUTPUT.put_line('№ '||to_char(cv_obr.KOD_ZAKAZA_FILIALU) ||' Суммазаказа = '||to_char(K));

DBMS_OUTPUT.put_line(' ');

IF cv_obr.d = 27 THEN

DBMS_OUTPUT.put_line('Примернаядатапоступлениязаказа = '||to_char(D1+N)||' Через '||to_char(D1+N-sysdate, '9999')||' дня ');

DBMS_OUTPUT.put_line(' '); – выводим информацию, если заказ на 29 или 27 этапе

END IF;

L:=cv_obr.d; – запоминаем номер этапа заказа, затем сравниваем его с номером следующего заказа из таблицы «обработка заказов», это нужно для того чтобы строка На этапе находятся заказы выводилась 1 раз для каждого этапа

end if;

END LOOP;

END LOOP;

DBMS_OUTPUT.put_line('Суммапозакрытымзаказам = '||to_char(T));

END;

/

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]