Advertisement
Guest User

Untitled

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