Advertisement
Guest User

Untitled

a guest
Nov 29th, 2015
66
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.50 KB | None | 0 0
  1. CREATE OR REPLACE FUNCTION func3()
  2. RETURNS TEXT AS $$
  3. DECLARE
  4. report TEXT;
  5. row RECORD;
  6. column_sum INT ARRAY[4];
  7. cursor CURSOR FOR
  8. SELECT name,
  9. (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,
  10. (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,
  11. (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,
  12. (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
  13. FROM
  14. oblast
  15. ORDER BY oblast.name;
  16.  
  17. BEGIN
  18. column_sum[1]:= 0;
  19. column_sum[2]:=0;
  20. column_sum[3]:=0;
  21. column_sum[4]:=0;
  22. report:=repeat(' ', 200)||'Звіт'||E'\n\n';
  23. report:=report||repeat(' ', 100)||'розподіл кількості родовищ за розмірами';
  24. report:=report||'Назва області'||repeat(' ', 20)||'Дрібне'||repeat(' ', 20)||'Середнє'||repeat(' ', 20)||'Велике'||repeat(' ', 20)||'Всього по області'||E'\n';
  25. OPEN cursor;
  26. LOOP
  27. FETCH cursor INTO row;
  28. EXIT WHEN NOT FOUND;
  29. 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';
  30. column_sum[1]:=column_sum[1]+row.Small;
  31. column_sum[2]:=column_sum[2]+row.Medium;
  32. column_sum[3]:=column_sum[3]+row.Big;
  33. column_sum[4]:=column_sum[4]+row.Empty;
  34. END LOOP;
  35. 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';
  36. CLOSE cursor;
  37. RETURN report;
  38. END; $$
  39.  
  40. LANGUAGE plpgsql;
  41.  
  42. SELECT func3();
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement