Advertisement
Guest User

Untitled

a guest
Sep 30th, 2016
84
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.16 KB | None | 0 0
  1. -- F5 в pgAdmin
  2. SET search_path TO _00000003, public;
  3.  
  4. DO $$
  5. DECLARE
  6. vStep text := '300';
  7. vCurLead integer := 0;
  8. vNextLead integer;
  9. vDeadline timestamp := '"2016-10-01 05:40:00.000000+03"'::timestamp with time zone;
  10.  
  11. vTotalCount integer := 0;
  12. BEGIN
  13. --PERFORM dblink_connect('crm', 'dbname=inside.tensor.ru port=5432 host=ins-db-master.unix.tensor.ru user= password=');
  14. PERFORM dblink_connect('crm', 'dbname=' || current_database()::text || ' port=' || inet_server_port());
  15.  
  16. RAISE NOTICE '%: ЗАПУЩЕНО. Заполнение поля "Регламент" таблицы "Лид", если оно пустое (удаление лида)', date_trunc('second', clock_timestamp())::TEXT;
  17.  
  18. LOOP
  19. SELECT maxID
  20. INTO vNextLead
  21. FROM dblink('crm', 'SET search_path TO _00000003, public;
  22. WITH
  23. main_sel AS (
  24. SELECT
  25. l."@Документ" "Документ",
  26. (
  27. SELECT
  28. e."Регламент"
  29. FROM "Событие" e
  30. WHERE
  31. e."@Событие" = l."ПоследнийКонтакт"
  32. ) "Регламент"
  33. FROM "Лид" l
  34. WHERE
  35. l."Регламент" IS NULL AND
  36. l."Черновик" IS NULL AND
  37. l."@Документ" > ' || vCurLead::TEXT || '
  38. ORDER BY l."@Документ"
  39. LIMIT ' || vStep || '
  40. ),
  41.  
  42. updateCTE AS (
  43. UPDATE "Лид" l SET "Регламент" = m."Регламент"
  44. FROM main_sel m
  45. WHERE
  46. l."@Документ" = m."Документ" AND
  47. m."Регламент" is not null
  48. RETURNING l."@Документ"
  49. ),
  50.  
  51. deleteCTE AS (
  52. DELETE FROM "Лид" l
  53. WHERE "@Документ" IN (
  54. SELECT
  55. "Документ"
  56. FROM main_sel m
  57. WHERE m."Регламент" is null
  58. )
  59. RETURNING l."@Документ"
  60. )
  61. SELECT MAX(maxID) maxID
  62. FROM (
  63. SELECT MAX("@Документ") maxID FROM updateCTE
  64. UNION
  65. SELECT MAX("@Документ") maxID FROM deleteCTE
  66. ) q;
  67. ') t (maxID integer);
  68. EXIT WHEN (vNextLead IS NULL OR clock_timestamp() > vDeadline);
  69. vCurLead := vNextLead;
  70. vTotalCount := vTotalCount + 1;
  71. --RAISE NOTICE '%: №: %, ID %', date_trunc('second', clock_timestamp())::text, vTotalCount, vNextLead;
  72. END LOOP;
  73. RAISE NOTICE '%: №: %', date_trunc('second', clock_timestamp())::text, vTotalCount;
  74.  
  75. IF NOT clock_timestamp() > vDeadline THEN
  76. RAISE NOTICE '%: ЗАПУЩЕНО. Удаление лида в случае пустых полей "ПоследнийКонтакт", "НазваниеКлиента" и "КонтактныеДанные" и непустого значения поля "Регламент".', date_trunc('second', clock_timestamp())::TEXT;
  77. FOR vTheme IN (
  78. WITH recursive themes as (
  79. SELECT
  80. x."@Регламент" "Регламент",
  81. x."Раздел",
  82. x."Раздел@"
  83. FROM "Регламент" x
  84. WHERE "Идентификатор" = '8992e41a-a499-11e1-8c02-63ba74c41964'
  85. UNION ALL
  86. SELECT r."@Регламент" "Регламент", r."Раздел", r."Раздел@"
  87. FROM themes t
  88. INNER JOIN "Регламент" r ON t."Регламент" = r."Раздел"
  89. )
  90. SELECT "Регламент"
  91. FROM themes
  92. WHERE "Раздел@" IS NOT TRUE
  93. ORDER BY "Регламент"
  94. )
  95. LOOP
  96. vCurLead := 0;
  97. LOOP
  98. SELECT max_id
  99. INTO vNextLead
  100. FROM dblink('crm', '
  101. SET search_path TO "_00000003", public;
  102. WITH
  103. main_sel AS (
  104. SELECT
  105. l."@Документ" "Документ"
  106. FROM "Лид" l
  107. WHERE
  108. l."Регламент" = ' || vTheme::TEXT || ' AND
  109. l."Черновик" IS NULL AND
  110. l."ПоследнийКонтакт" IS NULL AND
  111. l."НазваниеКлиента" IS NULL AND
  112. l."КонтактныеДанные" IS NULL AND
  113. l."@Документ" > ' || vCurLead::TEXT || '
  114. ORDER BY l."@Документ"
  115. LIMIT ' || vStep || '
  116. ),
  117. deleteCTE AS (
  118. DELETE FROM "Лид" l
  119. WHERE "@Документ" IN (
  120. SELECT
  121. "Документ"
  122. FROM main_sel m
  123. )
  124. RETURNING l."@Документ"
  125. )
  126. SELECT MAX("@Документ") maxID FROM deleteCTE;
  127. ') t (max_id integer);
  128. EXIT WHEN (vNextLead is null or clock_timestamp() > vDeadline);
  129. vCurLead := vNextLead;
  130. vTotalCount := vTotalCount + 1;
  131. --RAISE NOTICE '%: №: %, ID %', date_trunc('second', clock_timestamp())::text, vTotalCount, vNextLead;
  132. END LOOP;
  133. END LOOP;
  134. END IF;
  135.  
  136. PERFORM dblink_disconnect('crm');
  137. IF clock_timestamp() > vDeadline THEN
  138. RAISE NOTICE '!!! Выход по таймауту: ID текущего лида %.', vNextLead;
  139. ELSE
  140. RAISE NOTICE '%: ЗАВЕРШЕНО. №: %', date_trunc('second', clock_timestamp())::text, vTotalCount;
  141. END IF;
  142.  
  143. EXCEPTION WHEN others THEN
  144. PERFORM dblink_disconnect('crm');
  145. RAISE NOTICE '% %', SQLERRM, SQLSTATE;
  146. RAISE NOTICE '%: Выход по ошибке: №: %, ID текущего лида %', date_trunc('second', clock_timestamp())::text, vTotalCount, vNextLead;
  147. RAISE;
  148.  
  149. END; $$
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement