Advertisement
Guest User

Untitled

a guest
Sep 30th, 2016
89
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.49 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. vCountDel integer;
  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."ПоследнийКонтакт" IS NOT NULL AND
  38. l."@Документ" > ' || vCurLead::TEXT || '
  39. ORDER BY l."@Документ"
  40. LIMIT ' || vStep || '
  41. ),
  42. updateCTE AS (
  43. UPDATE "Лид" l SET "Регламент" = m."Регламент"
  44. FROM main_sel m
  45. WHERE
  46. l."@Документ" = m."Документ"
  47. RETURNING l."@Документ"
  48. ),
  49. SELECT MAX("@Документ") maxID FROM updateCTE;
  50. ') t (maxID integer);
  51. EXIT WHEN (vNextLead IS NULL OR clock_timestamp() > vDeadline);
  52. vCurLead := vNextLead;
  53. vTotalCount := vTotalCount + 1;
  54. --RAISE NOTICE '%: №: %, ID %', date_trunc('second', clock_timestamp())::text, vTotalCount, vNextLead;
  55. END LOOP;
  56. RAISE NOTICE '%: №: %', date_trunc('second', clock_timestamp())::text, vTotalCount;
  57.  
  58. IF NOT clock_timestamp() > vDeadline THEN
  59. RAISE NOTICE '%: ЗАПУЩЕНО. Удаление лида в случае пустых полей "ПоследнийКонтакт", "НазваниеКлиента" и "КонтактныеДанные".', date_trunc('second', clock_timestamp())::TEXT;
  60. SELECT countDel
  61. INTO vCountDel
  62. FROM dblink('crm', 'SET search_path TO _00000003, public;
  63. WITH
  64. deleteCTE AS (
  65. DELETE FROM "Лид"
  66. WHERE
  67. "Черновик" IS NULL AND
  68. "ПоследнийКонтакт" IS NULL AND
  69. "НазваниеКлиента" IS NULL AND
  70. "КонтактныеДанные" IS NULL
  71. RETURNING "@Документ"
  72. ),
  73. SELECT count(1) countDel FROM deleteCTE;
  74. ') t (countDel integer);
  75. --RAISE NOTICE '%: Del %', date_trunc('second', clock_timestamp())::text, vCountDel;
  76. END IF;
  77.  
  78. PERFORM dblink_disconnect('crm');
  79. IF clock_timestamp() > vDeadline THEN
  80. RAISE NOTICE '!!! Выход по таймауту: ID текущего лида %.', vNextLead;
  81. ELSE
  82. RAISE NOTICE '%: ЗАВЕРШЕНО. №: %, Del %', date_trunc('second', clock_timestamp())::text, vTotalCount;
  83. END IF;
  84.  
  85. EXCEPTION WHEN others THEN
  86. PERFORM dblink_disconnect('crm');
  87. RAISE NOTICE '% %', SQLERRM, SQLSTATE;
  88. RAISE NOTICE '%: Выход по ошибке: №: %, ID текущего лида %', date_trunc('second', clock_timestamp())::text, vTotalCount, vNextLead;
  89. RAISE;
  90.  
  91. END; $$
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement