Будь умным!


У вас вопросы?
У нас ответы:) SamZan.net

Звіт з курсором Задача 4.

Работа добавлена на сайт samzan.net:

Поможем написать учебную работу

Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.

Предоплата всего

от 25%

Подписываем

договор

Выберите тип работы:

Скидка 25% при заказе до 6.11.2024

        15 Звіт з курсором 

    Задача 4. Виготовити звіт про сумарний об’єм транспортованого газу за поточний рік по кожному підприємству для заданого газопровода. До заголовка звіту додати назву газопроводу, слова “станом на” і встановити поточну дату.

        Таблиця gazpr (газопроводи):

1   Україна                                         1   1400

2   Ямпіль-Ужгород-держкордон     2   1400

3   Острогожськ-Гадяч                     2   1000

4   Єлецьк-Орел                               7   1200

5   Єлецьк-Десна-Кривий Ріг           5   1600

        Таблиця pidpr (підприємства):

1  Харківтрансгаз              Харків        

2  Прикарпаттрансгаз       Івано-Франківськ         

3  Київтрансгаз                  Київ                    

4  Львівтрансгаз                Львів          

5  Експорттрансгаз           Ужгород    

        Таблиця оblik (облік):

2    2    2005-04-12    2

2    2    2012-04-12    2

2    5    2012-02-11    1

3    5    2012-09-10    3

2    5    2012-07-01    4

CREATE OR REPLACE FUNCTION zvit(integer)

RETURNS text AS

$$

DECLARE

name_p pidpr.naz_p %TYPE; kilkist oblik.kilk %TYPE; name_g gazpr.naz_g %TYPE;

den INTEGER; mis INTEGER; rik INTEGER; ms CHARACTER(9) ARRAY[12];

slovo TEXT; kod ALIAS FOR $1;

kursor CURSOR FOR   

SELECT pidpr.naz_p, SUM(oblik.kilk) FROM pidpr

INNER JOIN oblik ON pidpr.kod_p = oblik.kod_p

WHERE oblik.kod_g=kod

AND EXTRACT(YEAR FROM CURRENT_DATE)=EXTRACT(YEAR FROM OBLIK.DATA)

GROUP BY pidpr.naz_p

ORDER BY pidpr.naz_p;

BEGIN

den:=EXTRACT(DAY FROM CURRENT_DATE);

mis:=EXTRACT(MONTH FROM CURRENT_DATE);

rik:=EXTRACT(YEAR FROM CURRENT_DATE);

ms[1]:='січня';ms[2]:='лютого';ms[3]:='березня';ms[4]:='квітня';ms[5]:='травня';ms[6]:='червня';

ms[7]:='липня';ms[8]:='серпня';ms[9]:='вересня';ms[10]:='жовтня';ms[11]:='листопада';ms[12]:='грудня';

SELECT INTO name_g naz_g FROM gazpr WHERE kod_g = kod;

slovo:='                                         Звіт'||E'\n';

slovo:=slovo ||'про кількість транспортованого газу по газопроводу '||name_g||E'\n';

slovo:=slovo ||'станом на '||TO_CHAR(den,'99')||' '||ms[mis]||' '|| TO_CHAR(rik,'9999')||E'\n\n';

slovo:=slovo ||'Підприємство                  Кількість'||E'\n';

slovo:=slovo ||'-----------------------------------------------'||E'\n';

OPEN kursor;

LOOP

FETCH kursor INTO name_p, kilkist;

exit when not found;

slovo:=slovo||name_p||'           '||TO_CHAR(kilkist,'99.9')||E'\n';

END LOOP;

CLOSE kursor;

RETURN slovo;

END;

$$

LANGUAGE plpgsql;

select zvit(2);

                                                      Звіт

про кількість транспортованого газу по газопроводу Ямпіль-Ужгород-держкордон

станом на  12 квітня  2011

Підприємство                  Кількість

-----------------------------------------------

Експорттрансгаз             5.0

Прикарпаттрансгаз         2.0

 

    Задача 6. Виготовити звіт про розподіл кількості транспортованого газу на кожному газопроводі по підприємствах у поточному році. Навпроти назв газопроводів установити значення кількості для кожного підприємства. Передбачити підсумки по вертикалі і по горизонталі.

CREATE OR REPLACE FUNCTION rozpod_zk() RETURNS text AS

$$

DECLARE

zapysp pidpr %ROWTYPE; zapyso oblik %ROWTYPE; zapysg gazpr %ROWTYPE;

slovo TEXT; s oblik.kilk %TYPE; suma oblik.kilk %TYPE; b BOOL:=FALSE;

sss oblik.kilk %TYPE:=0; ss INTEGER ARRAY[5]; i integer;

kursor CURSOR FOR  

SELECT zapyso.kod_g, zapysg.naz_g, zapyso.kod_p, zapysp.naz_p, sum(zapyso.kilk) AS kilkist FROM oblik

INNER JOIN gazpr ON(zapyso.kod_g=zapysg.kod_g)

INNER JOIN pidpr ON(zapyso.kod_p=zapysp.kod_p)

GROUP BY zapyso.kod_g, zapysg.naz_g, zapyso.kod_p, zapysp.naz_p

ORDER BY zapysg.naz_g;

BEGIN

slovo:=repeat(' ', 40)||'Звіт'||E'\n';

slovo:=slovo ||repeat(' ', 15)||'про розподіл кількості транспортованого газу по підприємствах' ||E'\n'||E'\n';

slovo:=slovo ||'Підприємство:          ';

FOR zapysp IN SELECT * FROM pidpr LOOP

slovo:=slovo ||rpad(zapysp.naz_p,15);

END LOOP;

slovo:=slovo ||'   Сума   '||E'\n';

ss[1]:=0; ss[2]:=0; ss[3]:=0; ss[4]:=0; ss[5]:=0;

OPEN kursor;

LOOP

FETCH next FROM kursor INTO kodg, nazvag, kodp, nazvap, kilkist;

exit when not found;

slovo:=slovo || rpad(nazvag,25)||rpad(nazvap,15)||rpad(TO_CHAR(kilkist,'99'),16)||E'\n';

END LOOP;

CLOSE kursor;

FOR zapysg IN SELECT * FROM gazpr LOOP

slovo:=slovo || rpad(zapysg.naz_g, 20) ||' '; suma:=0; i:=1;

FOR zapysp IN SELECT * FROM pidpr LOOP

s:=0;

FOR zapyso IN SELECT * FROM oblik LOOP

b:=zapyso.kod_g=zapysg.kod_g AND zapyso.kod_p=zapysp.kod_p;

IF b THEN s:=s+zapyso.kilk;END IF;

END LOOP; suma:=suma+s; ss[i]:=ss[i]+s; i:=i+1;

slovo:=slovo||TO_CHAR(s,'999999999999')||'  ';

END LOOP;i:=1;

slovo:=slovo||TO_CHAR(suma,'9999999')||E'\n';

ss[5]:=ss[5]+suma;

END LOOP;

slovo:=slovo ||repeat(' ', 14)||'Всього'||TO_CHAR(ss[1],'9999999999999')||TO_CHAR(ss[2],'99999999999999');

slovo:=slovo ||TO_CHAR(ss[3],'99999999999999')||TO_CHAR(ss[4],'99999999999999');

slovo:=slovo ||TO_CHAR(ss[5],'999999999')||E'\n';

RETURN slovo;

END;

$$

 LANGUAGE plpgsql;

SELECT rozpod_zk();

Проба:

CREATE OR REPLACE FUNCTION rozpod_zk() RETURNS text AS

$$

DECLARE

kodg gazpr.kod_g %TYPE; kodp pidpr.kod_p %TYPE;

namep pidpr.naz_p %TYPE; kilkist oblik.kilk %TYPE; nameg gazpr.naz_g %TYPE;

zapysp pidpr %ROWTYPE; zapyso oblik %ROWTYPE; zapysg gazpr %ROWTYPE;

slovo TEXT; s oblik.kilk %TYPE; suma oblik.kilk %TYPE; b BOOL:=FALSE;

sss oblik.kilk %TYPE:=0; ss INTEGER ARRAY[5]; i integer;

kursor CURSOR FOR  

SELECT zapyso.kod_g, zapysg.naz_g, zapyso.kod_p, zapysp.naz_p, sum(zapyso.kilk) AS kilkist FROM oblik

INNER JOIN gazpr ON(zapyso.kod_g=zapysg.kod_g)

INNER JOIN pidpr ON(zapyso.kod_p=zapysp.kod_p)

GROUP BY zapyso.kod_g, zapysg.naz_g, zapyso.kod_p, zapysp.naz_p

ORDER BY zapysg.naz_g;

BEGIN

slovo:=repeat(' ', 40)||'Звіт'||E'\n';

slovo:=slovo ||repeat(' ', 15)||'про розподіл кількості транспортованого газу по підприємствах' ||E'\n'||E'\n';

slovo:=slovo ||'Підприємство:          ';

FOR zapysp IN SELECT * FROM pidpr LOOP

slovo:=slovo ||rpad(zapysp.naz_p,15);

END LOOP;

slovo:=slovo ||'   Сума   '||E'\n';

--ss[1]:=0; ss[2]:=0; ss[3]:=0; ss[4]:=0; ss[5]:=0;

OPEN kursor;

LOOP

FETCH next FROM kursor INTO kodg, nameg;

--, kodp, namep, kilkist

exit when not found;

slovo:=slovo || TO_CHAR(kodg,'99')||rpad(nameg,25)||E'\n';

--||rpad(namep,15)||rpad(TO_CHAR(kilkist,'99'),16)

END LOOP;

CLOSE kursor;

--slovo:=slovo || rpad(zapysg.naz_g, 20) ||' '; suma:=0; i:=1;

--FOR zapysp IN SELECT * FROM pidpr LOOP

--s:=0;

--FOR zapyso IN SELECT * FROM oblik LOOP

--b:=zapyso.kod_g=zapysg.kod_g AND zapyso.kod_p=zapysp.kod_p;

--IF b THEN s:=s+zapyso.kilk;END IF;

--END LOOP; suma:=suma+s; ss[i]:=ss[i]+s; i:=i+1;

--slovo:=slovo||TO_CHAR(s,'999999999999')||'  ';

--END LOOP;i:=1;

--slovo:=slovo||TO_CHAR(suma,'9999999')||E'\n';

--ss[5]:=ss[5]+suma;

--END LOOP;

--slovo:=slovo ||repeat(' ', 14)||'Всього'||TO_CHAR(ss[1],'9999999999999') ||

           TO_CHAR(ss[2], '99999999999999');

--slovo:=slovo ||TO_CHAR(ss[3],'99999999999999')||TO_CHAR(ss[4],'99999999999999');

--slovo:=slovo ||TO_CHAR(ss[5],'999999999')||E'\n';

RETURN slovo;

END;

$$

 LANGUAGE plpgsql;

SELECT rozpod_zk();

"                                        Звіт

              про розподіл кількості транспортованого газу по підприємствах

Підприємство:          Київтрансгаз   Гадячгазпром   Львівгазпром   Прикарпаттрансг   Сума   

"




1. Заключение договора куплипродажи
2. Культурнае развіцце Беларусі канца XVIII-першай паловы XIX ст
3. Розробка програм фінансового оздоровлення неплатоспроможного підприємства
4. Контрольная работа- Исследование операций
5. I. Теоретические основы развития монологической речи учащихся младшего школьного возраста с ОНР III уровня
6. повреждение тканей организма при котором обязательным элементом является нарушение целости наружных покр
7. Производственные возможности экономики4 1
8. Герман Новгородский
9. тематикада физикада механикада т
10. НА ТЕМУ- Методы и инструменты мотивации персонала
11. Беспутный так с ворчливой укоризной называли его пожилые женщины
12. тематизации знаний рассчитан на детей с различными способностями
13. Зеленая палочка Название конкурса Название
14. Тема- Визначення залишкової вартості основних фондів
15. Школа оптимизма
16. Задание- назначить режим термической обработки температуру закалки охлаждающую среду и температуру отпуск
17. Своего наивысшего развития идеология древнегреческой аристократии достигает в философии Платона и Аристот
18. Золотой человек из сакского кургана открыт археологами в-[] В 1969 г
19. Культура России во второй половине XIX века
20. Рынок финансовой информации