tyomasun

Untitled

Jul 18th, 2016
144
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
SQL 4.13 KB | None | 0 0
  1. SET search_path = _00000003, public;
  2. /*
  3. ALTER TABLE _00000003."КонтактСтатистика" DROP COLUMN "Запланировано";
  4.  
  5. ALTER TABLE _00000003."КонтактСтатистика" ADD COLUMN "Запланировано" integer;
  6. */
  7.  
  8. do $$
  9.  
  10. DECLARE
  11.    vTheme record;
  12.    vRowInserted INTEGER;
  13.    
  14. BEGIN
  15.    RAISE NOTICE '%: ЗАПУЩЕНО', clock_timestamp()::text;
  16.    
  17.    FOR vTheme IN (
  18.      
  19.       WITH RECURSIVE regs AS (
  20.          SELECT
  21.             x."@Регламент" "Регламент",
  22.             x."Раздел",
  23.             x."Раздел@",
  24.             x."Название",
  25.             x."Флаги",
  26.             x."Лимит",
  27.             x."Порядок",
  28.             x."Норма",
  29.             x."Идентификатор",
  30.             x."Флаги"[3] "Удален"
  31.          FROM "Регламент" x
  32.          WHERE
  33.             x."Идентификатор" = '8992e41a-a499-11e1-8c02-63ba74c41964'
  34.  
  35.          UNION ALL
  36.  
  37.          SELECT
  38.             y."@Регламент" "Регламент",
  39.             y."Раздел",
  40.             y."Раздел@",
  41.             y."Название",
  42.             y."Флаги",
  43.             y."Лимит",
  44.             y."Порядок",
  45.             y."Норма",
  46.             y."Идентификатор",
  47.             y."Флаги"[3] "Удален"
  48.          FROM regs z
  49.             INNER JOIN "Регламент" y ON z."Регламент" = y."Раздел"
  50.       )
  51.      
  52.       SELECT *
  53.       FROM regs
  54.       WHERE "Раздел@" IS NOT TRUE
  55.       ORDER BY "Регламент" DESC
  56.    )
  57.    loop
  58.       DELETE FROM "Событие"
  59.       WHERE
  60.          "Тип" = 3 AND
  61.          "Переход" IS NULL AND
  62.          "Регламент" =  vTheme."Регламент" AND
  63.          "Исполнитель" IS NULL;
  64.          
  65.       WITH DATA AS (
  66.          SELECT
  67.             (date_trunc('day'::text, "Дата"::TIMESTAMP WITHOUT TIME zone)::DATE) "Дата",
  68.             "СтруктураПредприятия",
  69.             "Исполнитель",
  70.             COUNT(*) cnt
  71.          FROM "КонтрагентЗапланировано"
  72.          WHERE
  73.             "Регламент" = vTheme."Регламент"
  74.          GROUP BY (date_trunc('day', "Дата"::TIMESTAMP WITHOUT TIME zone)::DATE), "СтруктураПредприятия", "Исполнитель"
  75.       ),
  76.  
  77.       upd AS (
  78.          UPDATE "КонтактСтатистика" ks
  79.          SET "Запланировано" = d.cnt
  80.          FROM DATA d
  81.          WHERE
  82.             ks."Дата" = d."Дата" AND
  83.             ks."Регламент" = vTheme."Регламент" AND
  84.             ks."СтруктураПредприятия" = d."СтруктураПредприятия" AND
  85.             ks."Лицо" = d."Исполнитель"
  86.          returning ks."Дата", ks."СтруктураПредприятия", ks."Лицо"
  87.       ),
  88.  
  89.       ins AS (
  90.          INSERT INTO "КонтактСтатистика" ("Дата", "Регламент", "СтруктураПредприятия", "Лицо", "Запланировано" )
  91.          SELECT
  92.             d. "Дата",
  93.             vTheme."Регламент",
  94.             d."СтруктураПредприятия",
  95.             d."Исполнитель",
  96.             d.cnt
  97.          FROM DATA d
  98.          WHERE
  99.             NOT EXISTS (
  100.                SELECT NULL
  101.                FROM upd u
  102.                WHERE
  103.                   u."Дата" = d."Дата" AND
  104.                   u."СтруктураПредприятия" = d."СтруктураПредприятия" AND
  105.                   u."Лицо" = d."Исполнитель"
  106.                LIMIT 1
  107.             )
  108.          returning "Дата", "СтруктураПредприятия", "Лицо"
  109.       )
  110.  
  111.       SELECT COUNT(*)
  112.       INTO vRowInserted
  113.       FROM ins;
  114.  
  115.       raise notice '%: Регламент = %, vRowInserted = %', clock_timestamp()::text, vTheme."Регламент", vRowInserted;
  116.    END loop;
  117.  
  118.    RAISE NOTICE '%: ЗАВЕРШЕНО', clock_timestamp()::text;
  119. END; $$;
Advertisement
Add Comment
Please, Sign In to add comment