Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- CREATE OR REPLACE FUNCTION func3()
- RETURNS TEXT AS $$
- DECLARE
- report TEXT;
- row RECORD;
- column_sum INT ARRAY[4];
- cursor CURSOR FOR
- SELECT name,
- (SELECT SUM(CASE WHEN code_nafta = 'Дрібне' AND oblast.id=rodoviwe.id_obl AND rodoviwe.id_rod_sz=rodoviwesize.id THEN 1 ELSE 0 END) FROM rodoviwe, rodoviwesize) AS Small,
- (SELECT SUM(CASE WHEN code_nafta = 'Середнє' AND oblast.id=rodoviwe.id_obl AND rodoviwe.id_rod_sz=rodoviwesize.id THEN 1 ELSE 0 END) FROM rodoviwe, rodoviwesize) AS Medium,
- (SELECT SUM(CASE WHEN code_nafta = 'Велике' AND oblast.id=rodoviwe.id_obl AND rodoviwe.id_rod_sz=rodoviwesize.id THEN 1 ELSE 0 END) FROM rodoviwe, rodoviwesize) AS Big,
- (SELECT SUM(CASE WHEN code_nafta IS NULL AND oblast.id=rodoviwe.id_obl AND rodoviwe.id_rod_sz=rodoviwesize.id THEN 1 ELSE 0 END) FROM rodoviwe, rodoviwesize) AS Empty
- FROM
- oblast
- ORDER BY oblast.name;
- BEGIN
- column_sum[1]:= 0;
- column_sum[2]:=0;
- column_sum[3]:=0;
- column_sum[4]:=0;
- report:=repeat(' ', 200)||'Звіт'||E'\n\n';
- report:=report||repeat(' ', 100)||'розподіл кількості родовищ за розмірами';
- report:=report||'Назва області'||repeat(' ', 20)||'Дрібне'||repeat(' ', 20)||'Середнє'||repeat(' ', 20)||'Велике'||repeat(' ', 20)||'Всього по області'||E'\n';
- OPEN cursor;
- LOOP
- FETCH cursor INTO row;
- EXIT WHEN NOT FOUND;
- report:=report||rpad(row.name, 35)||to_char(row.Small, '999999999.9')||repeat(' ', 25)||to_char(row.Medium, '999999999.9')||repeat(' ', 40)||to_char(row.Big, '999999999.9')||repeat(' ', 40)||to_char(row.Empty, '999999999.9')||repeat(' ', 35)||to_char(row.Small+row.Medium+row.Big+row.Empty, '999999999.9')||E'\n';
- column_sum[1]:=column_sum[1]+row.Small;
- column_sum[2]:=column_sum[2]+row.Medium;
- column_sum[3]:=column_sum[3]+row.Big;
- column_sum[4]:=column_sum[4]+row.Empty;
- END LOOP;
- report:=report||rpad('Всього по розмірах',30)||repeat(' ', 10)||to_char(column_sum[1], '999999999.9')||repeat(' ', 20)||to_char(column_sum[2], '999999999.9')||repeat(' ', 20)||to_char(column_sum[3], '999999999.9')||repeat(' ', 40)||to_char(column_sum[4], '999999999.9')||repeat(' ', 30)||to_char(column_sum[1]+column_sum[2]+column_sum[3]+column_sum[4], '999999999.9')||E'\n';
- CLOSE cursor;
- RETURN report;
- END; $$
- LANGUAGE plpgsql;
- SELECT func3();
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement