{"id":335673,"date":"2022-07-13T15:00:23","date_gmt":"2022-07-13T15:00:23","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=335673"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=335673","title":{"rendered":"<span>\u0412\u0430\u043a\u0446\u0438\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043f\u0440\u043e\u0434\u043e\u043c<\/span>"},"content":{"rendered":"<div><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<figure class=\"bordered full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/2cd\/2a5\/5b4\/2cd2a55b41bd41a2423cc2d7d09d3fe7.png\" alt=\"\u0412\u0441\u044f\u043a\u0438\u0439 \u0434\u0436\u0443\u043d, \u0432 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u0441\u0432\u043e\u0435\u0433\u043e \u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u043a\u043b\u0430\u0434\u0435\u0442 \u043f\u0440\u043e\u0434. \u0412\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u044d\u0442\u043e \u043f\u043e-\u0440\u0430\u0437\u043d\u043e\u043c\u0443: \u043e\u0442 \u043f\u043e\u043b\u043d\u043e\u0439 \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 \u0440\u0430\u0431\u043e\u0442\u044b \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438, \u0434\u043e \u0430\u043d\u043e\u043c\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0432\u0441\u043f\u043b\u0435\u0441\u043a\u0430 \u043d\u0430 \u0434\u0430\u0448\u0431\u043e\u0440\u0434\u0430\u0445 \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433\u0430. \u0412 \u0441\u0442\u0430\u0442\u044c\u0435 \u043f\u043e\u043a\u0430\u0436\u0443 \u0440\u044f\u0434 \u043f\u0440\u043e\u0441\u0442\u044b\u0445 \u0438 \u043e\u0447\u0435\u0432\u0438\u0434\u043d\u044b\u0445 \u043f\u043e\u0434\u0445\u043e\u0434\u043e\u0432 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u0432, \u043f\u043e\u043c\u043e\u0433\u0430\u044e\u0449\u0438\u0445 \u0443\u043c\u0435\u043d\u044c\u0448\u0438\u0442\u044c \u0446\u0435\u043d\u0443 \u043e\u0448\u0438\u0431\u043a\u0438 \u043d\u0430 \u043f\u0440\u043e\u0434\u0435. \u041f\u0440\u043e\u0432\u0435\u0440\u0435\u043d\u043e \u043d\u0430 \u0441\u0435\u0431\u0435)\" title=\"\u0412\u0441\u044f\u043a\u0438\u0439 \u0434\u0436\u0443\u043d, \u0432 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u0441\u0432\u043e\u0435\u0433\u043e \u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u043a\u043b\u0430\u0434\u0435\u0442 \u043f\u0440\u043e\u0434. \u0412\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u044d\u0442\u043e \u043f\u043e-\u0440\u0430\u0437\u043d\u043e\u043c\u0443: \u043e\u0442 \u043f\u043e\u043b\u043d\u043e\u0439 \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 \u0440\u0430\u0431\u043e\u0442\u044b \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438, \u0434\u043e \u0430\u043d\u043e\u043c\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0432\u0441\u043f\u043b\u0435\u0441\u043a\u0430 \u043d\u0430 \u0434\u0430\u0448\u0431\u043e\u0440\u0434\u0430\u0445 \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433\u0430. \u0412 \u0441\u0442\u0430\u0442\u044c\u0435 \u043f\u043e\u043a\u0430\u0436\u0443 \u0440\u044f\u0434 \u043f\u0440\u043e\u0441\u0442\u044b\u0445 \u0438 \u043e\u0447\u0435\u0432\u0438\u0434\u043d\u044b\u0445 \u043f\u043e\u0434\u0445\u043e\u0434\u043e\u0432 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u0432, \u043f\u043e\u043c\u043e\u0433\u0430\u044e\u0449\u0438\u0445 \u0443\u043c\u0435\u043d\u044c\u0448\u0438\u0442\u044c \u0446\u0435\u043d\u0443 \u043e\u0448\u0438\u0431\u043a\u0438 \u043d\u0430 \u043f\u0440\u043e\u0434\u0435. \u041f\u0440\u043e\u0432\u0435\u0440\u0435\u043d\u043e \u043d\u0430 \u0441\u0435\u0431\u0435)\" width=\"974\" height=\"487\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/2cd\/2a5\/5b4\/2cd2a55b41bd41a2423cc2d7d09d3fe7.png\"\/><figcaption>\u0412\u0441\u044f\u043a\u0438\u0439 \u0434\u0436\u0443\u043d, \u0432 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u0441\u0432\u043e\u0435\u0433\u043e \u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u043a\u043b\u0430\u0434\u0435\u0442 \u043f\u0440\u043e\u0434. \u0412\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u044d\u0442\u043e \u043f\u043e-\u0440\u0430\u0437\u043d\u043e\u043c\u0443: \u043e\u0442 \u043f\u043e\u043b\u043d\u043e\u0439 \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 \u0440\u0430\u0431\u043e\u0442\u044b \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438, \u0434\u043e \u0430\u043d\u043e\u043c\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0432\u0441\u043f\u043b\u0435\u0441\u043a\u0430 \u043d\u0430 \u0434\u0430\u0448\u0431\u043e\u0440\u0434\u0430\u0445 \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433\u0430. \u0412 \u0441\u0442\u0430\u0442\u044c\u0435 \u043f\u043e\u043a\u0430\u0436\u0443 \u0440\u044f\u0434 \u043f\u0440\u043e\u0441\u0442\u044b\u0445 \u0438 \u043e\u0447\u0435\u0432\u0438\u0434\u043d\u044b\u0445 \u043f\u043e\u0434\u0445\u043e\u0434\u043e\u0432 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u0432, \u043f\u043e\u043c\u043e\u0433\u0430\u044e\u0449\u0438\u0445 \u0443\u043c\u0435\u043d\u044c\u0448\u0438\u0442\u044c \u0446\u0435\u043d\u0443 \u043e\u0448\u0438\u0431\u043a\u0438 \u043d\u0430 \u043f\u0440\u043e\u0434\u0435. \u041f\u0440\u043e\u0432\u0435\u0440\u0435\u043d\u043e \u043d\u0430 \u0441\u0435\u0431\u0435)<\/figcaption><\/figure>\n<h2>\u041e\u0431 \u0430\u0432\u0442\u043e\u0440\u0435<\/h2>\n<p>\u0412\u0441\u0435\u043c \u043f\u0440\u0438\u0432\u0435\u0442. \u041c\u0435\u043d\u044f \u0437\u043e\u0432\u0443\u0442 \u041a\u0438\u0440\u0438\u043b\u043b. \u0417\u0430 10 \u043b\u0435\u0442 \u0432 \u0441\u0442\u0440\u0430\u0445\u043e\u0432\u043e\u0439 \u043e\u0442\u0440\u0430\u0441\u043b\u0438 \u043f\u0440\u043e\u0448\u0435\u043b \u043f\u0443\u0442\u044c \u043e\u0442 IT-\u044d\u043d\u0438\u043a\u0435\u0439\u0449\u0438\u043a\u0430 \u0434\u043e \u0422\u0438\u043c\u041b\u0438\u0434\u0430 \u0433\u0440\u0443\u043f\u043f\u044b \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0441\u0442\u0440\u0430\u0445\u043e\u0432\u044b\u0445 \u043f\u0440\u043e\u0434\u0443\u043a\u0442\u043e\u0432 \u0430\u043a\u0432\u0438\u0437\u0438\u0446\u0438\u0438. \u0412 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u043f\u043e\u0434\u0435\u043b\u044e\u0441\u044c \u043f\u0440\u043e\u0441\u0442\u044b\u043c\u0438 \u043f\u0440\u0438\u0451\u043c\u0430\u043c\u0438 \u043f\u043e \u043f\u0435\u0440\u0435\u0448\u0430\u0433\u0438\u0432\u0430\u043d\u0438\u044e \u0447\u0435\u0440\u0435\u0437 \u043e\u0447\u0435\u0432\u0438\u0434\u043d\u044b\u0435 \u0433\u0440\u0430\u0431\u043b\u0438, \u0447\u0442\u043e\u0431\u044b \u0434\u0432\u0438\u0436\u0435\u043d\u0438\u0435 \u0447\u0435\u0440\u0435\u0437 \u0417\u043e\u043d\u0443 \u0416\u0438\u0437\u043d\u0435\u043d\u043d\u043e\u0433\u043e \u041e\u043f\u044b\u0442\u0430, \u041f\u043e\u043b\u0443\u0447\u0430\u0435\u043c\u0443\u044e \u0432 \u041f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u0431\u044b\u043b\u043e \u043c\u0435\u043d\u0435\u0435 \u0431\u043e\u043b\u0435\u0437\u043d\u0435\u043d\u043e. <\/p>\n<h2>\u041f\u0440\u0438\u0451\u043c\u044b<\/h2>\n<h3>1. \u0420\u0435\u0437\u0435\u0440\u0432\u043d\u0430\u044f \u043a\u043e\u043f\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445<\/h3>\n<details class=\"spoiler\">\n<summary>\u0411\u0430\u0439\u043a\u0430 \u0438\u0437 \u0436\u0438\u0437\u043d\u0438 #1<\/summary>\n<div class=\"spoiler__content\">\n<p><em>\u0420\u0435\u0448\u0438\u043b \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0441\u0442\u043e\u043b\u0431\u0435\u0446 \u043a \u0442\u0430\u0431\u043b\u0438\u0447\u043a\u0435 \u0432 Pervasive \u043d\u0430 \u043f\u0440\u043e\u0434\u0435. \u0420\u0430\u0437\u043c\u0435\u0440 \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u0432 \u0442\u043e\u043f 5 \u0431\u0430\u0437\u044b. \u0417\u0430\u043f\u0443\u0441\u0442\u0438\u043b \u043a\u043e\u043d\u0441\u043e\u043b\u044c\u043d\u0443\u044e \u0443\u0442\u0438\u043b\u0438\u0442\u0443 \u043f\u043e \u043f\u0435\u0440\u0435\u0441\u0442\u0440\u043e\u0439\u043a\u0435 \u0444\u0430\u0439\u043b\u0430 \u0434\u0430\u043d\u043d\u044b\u0445, \u043f\u043e\u0434\u043e\u0436\u0434\u0430\u043b \u043f\u043e\u043b\u0447\u0430\u0441\u0438\u043a\u0430 \u0438 \u0437\u0430\u043a\u0440\u044b\u043b \u2013 \u0434\u0443\u043c\u0430\u043b \u0437\u0430\u0432\u0438\u0441\u043b\u0430. \u0424\u0430\u0439\u043b \u0434\u0430\u043d\u043d\u044b\u0445 \u0442\u0430\u0431\u043b\u0438\u0446\u044b, \u043d\u0435\u043e\u0436\u0438\u0434\u0430\u043d\u043d\u043e (\u043a\u0430\u043a \u0436\u0435 \u0435\u0449\u0451) \u0441\u0442\u0430\u043b \u043d\u0435\u0432\u0430\u043b\u0438\u0434\u043d\u044b\u043c.<\/em><\/p>\n<p><em>\u041d\u043e\u0447\u044c, \u0441\u0435\u0440\u0432\u0430\u043a \u043d\u0430 \u0434\u0440\u0443\u0433\u043e\u043c \u043a\u043e\u043d\u0446\u0435 \u041c\u043e\u0441\u043a\u0432\u044b \u0432 \u0411\u0426, \u043d\u0435\u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0449\u0430\u044f \u043a\u043b\u044e\u0447\u0435\u0432\u0430\u044f \u0442\u0430\u0431\u043b\u0438\u0446\u0430 \u2013 \u0443\u0442\u0440\u043e\u043c \u0436\u0434\u0435\u0442 \u0440\u0430\u0437\u043d\u043e\u0441. \u0412 \u0441\u0443\u0434\u043e\u0440\u043e\u0436\u043d\u044b\u0445 \u043f\u043e\u043f\u044b\u0442\u043a\u0430\u0445 \u0432\u0441\u043f\u043e\u043c\u043d\u0438\u0442\u044c \u043f\u043e\u0440\u044f\u0434\u043e\u043a \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0439 \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442 \u043f\u043e\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u2013 \u0435\u0441\u0442\u044c \u0431\u044d\u043a\u0430\u043f! \u041f\u0440\u043e\u0446\u0435\u0441\u0441 \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u043f\u043e\u0449\u0435\u043a\u043e\u0442\u0430\u043b \u043d\u0435\u0440\u0432\u044b \u2013 \u00ab\u0430 \u0432\u0434\u0440\u0443\u0433 \u043d\u0435\u2026\u00bb, \u043d\u043e \u043e\u0431\u043e\u0448\u043b\u043e\u0441\u044c.<\/em><\/p>\n<p><em>\u00a0<\/em><\/p>\n<p><em>\u041f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e \u0441\u043b\u0443\u0447\u0430\u044f, \u0432\u044b\u0440\u0430\u0431\u043e\u0442\u0430\u043b \u0434\u043b\u044f \u0441\u0435\u0431\u044f 2 \u0436\u0435\u043b\u0435\u0437\u043d\u044b\u0445 \u043f\u0440\u0430\u0432\u0438\u043b\u0430:<\/em><\/p>\n<p><em>\u00a0&#8212; \u0414\u0435\u043b\u0430\u0439 \u0431\u0435\u043a\u0430\u043f\/\u0441\u043d\u0430\u043f\u0448\u043e\u0442 \u0432\u0441\u044f\u043a\u0438\u0439 \u0440\u0430\u0437 \u043f\u0435\u0440\u0435\u0434 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435\u043c (\u0434\u0430\u0436\u0435 \u0434\u043b\u044f \u043c\u0435\u043b\u043a\u043e\u0433\u043e update\u2019\u0430);<\/em><\/p>\n<p><em>\u00a0&#8212; \u041f\u0440\u043e\u0432\u0435\u0440\u044f\u0439 \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u043d\u0430 \u0434\u0440\u0443\u0433\u043e\u043c \u0438\u043d\u0441\u0442\u0430\u043d\u0441\u0435, \u0434\u043e \u0434\u0435\u043f\u043b\u043e\u044f \u043d\u0430 \u043f\u0440\u043e\u0434.<\/em><\/p>\n<\/div>\n<\/details>\n<p>\u0421\u0430\u043c\u044b\u0439 \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u0441\u043f\u043e\u0441\u043e\u0431 \u043f\u043e\u043c\u043e\u0447\u044c \u0437\u0430\u0432\u0442\u0440\u0430\u0448\u043d\u0435\u043c\u0443 \u0441\u0435\u0431\u0435 \u2013 \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0441\u043a\u0440\u0438\u043f\u0442\u044b \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445 \u043f\u0440\u0438 \u0438\u0445 \u043c\u043e\u0434\u0438\u0444\u0438\u0446\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0438 (Insert\/Update\/Delete).<\/p>\n<ul>\n<li>\n<p>\u0414\u043b\u044f \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 Delete \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0432\u044b\u0433\u0440\u0443\u0437\u0438\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435 \u0438\u0437 IDE \u2013 \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0430\u043d\u0438\u0438 Select\u2019\u0430 \u0444\u043e\u0440\u043c\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0434\u0430\u0442\u0430\u0441\u0435\u0442 \u0438 \u043f\u0440\u043e\u0441\u0442\u043e \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0432 \u0444\u0430\u0439\u043b\/\u043a\u044d\u0448 \u043a\u0430\u043a \u043d\u0430\u0431\u043e\u0440 Insert-\u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0432.<\/p>\n<p>\u0412\u0430\u0436\u043d\u043e \u0432\u044b\u0433\u0440\u0443\u0436\u0430\u0442\u044c <strong>\u0432\u0441\u0435<\/strong> \u0434\u0430\u043d\u043d\u044b\u0435 \u043f\u043e Foreign Keys, \u044f\u0432\u043d\u044b\u043c \u0438\u043b\u0438 \u043d\u0435\u0442, \u0432 \u0432\u0438\u0434\u0435 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0445 Insert-\u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0439. \u041e\u0441\u043e\u0431\u0435\u043d\u043d\u043e \u0447\u0443\u0432\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e, \u043a\u043e\u0433\u0434\u0430 \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u0441 \u0434\u0430\u043d\u043d\u044b\u043c\u0438 \u043a\u0430\u0441\u043a\u0430\u0434\u043d\u044b\u0435 \u043b\u0438\u0431\u043e \u0441\u043e \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u0447\u043d\u043e\u0439 \u043b\u043e\u0433\u0438\u043a\u043e\u0439 \u0432 API\/\u0442\u0440\u0438\u0433\u0433\u0435\u0440\u0430\u0445 \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u044f. \u0412\u0430\u0440\u0438\u0430\u043d\u0442\u044b \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u044b, \u043a\u043e\u0433\u0434\u0430 \u0432 Delete API \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d Insert\/update\/Post-\u0441\u0435\u0440\u0432\u0438\u0441\u044b \u0441\u0442\u043e\u0438\u0442 \u0440\u0430\u0441\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u0442\u044c \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e \u2013 \u0443 \u0434\u0430\u043d\u043d\u044b\u0445 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0440\u0430\u0437\u043d\u0430\u044f \u043a\u0440\u0438\u0442\u0438\u0447\u043d\u043e\u0441\u0442\u044c.<\/p>\n<\/li>\n<\/ul>\n<details class=\"spoiler\">\n<summary>\u041a\u0430\u043a \u044d\u0442\u043e \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0432 PL\\SQL Developer<\/summary>\n<div class=\"spoiler__content\">\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/23a\/331\/5c5\/23a3315c505863968febc4d271ca206c.png\" width=\"973\" height=\"569\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/23a\/331\/5c5\/23a3315c505863968febc4d271ca206c.png\"\/><figcaption><\/figcaption><\/figure>\n<\/p>\n<\/div>\n<\/details>\n<ul>\n<li>\n<p>\u0412\u0442\u043e\u0440\u043e\u0439 \u043f\u043e \u0441\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 DML \u2013 Insert. \u041c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0441\u043f\u0438\u0441\u043e\u043a Primary Keys (PK). \u0418\u043b\u0438 \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0437\u0430\u043f\u0440\u043e\u0441, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043e\u0442\u0431\u0435\u0440\u0451\u0442 \u0441\u043e\u0437\u0434\u0430\u043d\u043d\u044b\u0435 \u0437\u0430\u043f\u0438\u0441\u0438 \u043f\u043e \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u0447\u043d\u044b\u043c \u043c\u0430\u0440\u043a\u0435\u0440\u0430\u043c. \u041f\u0440\u0438 \u043d\u0430\u043b\u0438\u0447\u0438\u0438 \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0435 \u043f\u043e\u043b\u044f \u0441 \u0430\u0432\u0442\u043e\u0440\u043e\u043c \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f (CreatedBy), \u0434\u0430\u0442\u043e\u0439 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f, \u0438\u043b\u0438 \u0434\u0440\u0443\u0433\u0438\u043c \u043e\u0441\u043e\u0431\u044b\u043c \u043f\u043e\u043b\u0435\u043c, \u0437\u0430\u0434\u0430\u0447\u0430 \u0441\u0438\u043b\u044c\u043d\u043e \u0443\u043f\u0440\u043e\u0449\u0430\u0435\u0442\u0441\u044f.<\/p>\n<p>\u041d\u0430 \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0435, \u0447\u0430\u0449\u0435 \u0432\u0441\u0435\u0433\u043e, \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u0442\u0441\u044f \u0437\u0430\u043f\u0440\u043e\u0441 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f, \u043f\u043e \u043a\u043e\u0442\u043e\u0440\u043e\u043c\u0443 \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u043e\u0431\u0440\u0430\u0442\u043d\u044b\u0439 \u0441\u043a\u0440\u0438\u043f\u0442 \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u044f. \u041d\u0430 \u043c\u043e\u0439 \u0432\u0437\u0433\u043b\u044f\u0434, \u0441\u043f\u0438\u0441\u043e\u043a PK \u043d\u0430\u0434\u0435\u0436\u043d\u0435\u0435 \u2013 \u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e\u0441\u0442\u044c \u0437\u0430\u0442\u0435\u0440\u0435\u0442\u044c \u0447\u0442\u043e-\u0442\u043e \u0447\u0443\u0436\u043e\u0435 \u0441\u0432\u043e\u0434\u0438\u0442\u0441\u044f \u043f\u043e\u0447\u0442\u0438 \u043a 0.<\/p>\n<\/li>\n<li>\n<p>\u0422\u0440\u0435\u0442\u044c\u044f \u0438 \u0441\u0430\u043c\u0430\u044f \u0441\u043b\u043e\u0436\u043d\u0430\u044f DML-\u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044f \u2013 Update. \u0417\u0434\u0435\u0441\u044c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0435 \u043a\u043e\u043c\u0431\u0438\u043d\u0430\u0446\u0438\u0438 \u0441\u043f\u043e\u0441\u043e\u0431\u043e\u0432 \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f. \u041d\u0430\u0438\u0431\u043e\u043b\u0435\u0435 \u0441\u043b\u043e\u0436\u043d\u044b\u0439 \u0441\u043b\u0443\u0447\u0430\u0439 \u0432 \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0435 \u2013 \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435 \u043f\u043e \u043f\u0440\u043e\u0448\u0435\u0441\u0442\u0432\u0438\u0438 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 (\u043f\u043e\u043b\u0433\u043e\u0434\u0430-\u0433\u043e\u0434), \u043a\u043e\u0433\u0434\u0430 \u043d\u0430\u0434 \u0434\u0430\u043d\u043d\u044b\u043c\u0438 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u0443\u0436\u0435 \u0430\u043a\u0442\u0438\u0432\u043d\u043e <s>\u043f\u043e\u0438\u0437\u0434\u0435\u0432\u0430\u043b\u0441\u044f<\/s> \u043f\u043e\u0440\u0430\u0431\u043e\u0442\u0430\u043b. \u0412 \u0438\u0442\u043e\u0433\u0435 \u043f\u043e\u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043b\u043e\u0441\u044c \u0444\u043e\u0440\u043c\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0439 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u0432 \u0432\u0438\u0434\u0435 \u0441\u043a\u0440\u0438\u043f\u0442\u0430. \u041f\u0440\u043e\u0433\u043d\u0430\u0442\u044c \u0441\u043a\u0440\u0438\u043f\u0442 \u043d\u0430 \u0441\u043e\u0433\u043b\u0430\u0441\u043e\u0432\u0430\u043d\u043d\u043e\u043c \u043c\u0430\u0441\u0441\u0438\u0432\u0435 \u0434\u0430\u043d\u043d\u044b\u0445 &#8212; \u0447\u0430\u0441\u0442\u0438 \u0441\u043f\u0438\u0441\u043a\u0430 \u0434\u043b\u044f \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f. \u0418, \u0435\u0441\u0442\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u0441 \u0434\u0432\u0443\u0445 \u0441\u0442\u043e\u0440\u043e\u043d: \u0431\u0438\u0437\u043d\u0435\u0441\u0430 \u0438 DevTeam.<\/p>\n<\/li>\n<\/ul>\n<h4>\u041f\u043e\u0434\u0438\u0442\u043e\u0433<\/h4>\n<p>\u0411\u044d\u043a\u0430\u043f\u044b \u0438 \u0441\u043d\u0430\u043f\u0448\u043e\u0442\u044b \u0443\u0434\u043e\u0431\u043d\u044b \u0442\u043e\u0433\u0434\u0430, \u043a\u043e\u0433\u0434\u0430 \u0435\u0441\u0442\u044c \u043e\u043f\u044b\u0442 \u0438 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0438\u0445 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f. \u041d\u0430\u043b\u0438\u0447\u0438\u0435 \u043f\u0440\u044f\u043c\u043e\u0433\u043e \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043a \u0444\u0430\u0439\u043b\u043e\u0432\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u0435, \u043b\u0438\u0431\u043e \u0443\u0434\u043e\u0431\u043d\u044b\u0439 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u0438\u043d\u043a\u0440\u0435\u043c\u0435\u043d\u0442\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0431\u043b\u0435\u0433\u0447\u0430\u044e\u0442 \u0437\u0430\u0434\u0430\u0447\u0443. \u0425\u043e\u0442\u044f \u0440\u0430\u0431\u043e\u0442\u0430 \u0447\u0435\u0440\u0435\u0437 \u043a\u043e\u043d\u0441\u043e\u043b\u044c\u043d\u044b\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u043f\u043e-\u043f\u0440\u0435\u0436\u043d\u0435\u043c\u0443 \u0438\u043c\u0435\u0435\u0442 \u0441\u0432\u043e\u0438\u0445 \u044f\u0440\u044b\u0445 \u0430\u0434\u0435\u043f\u0442\u043e\u0432.<\/p>\n<p>\u041d\u0430\u0438\u0431\u043e\u043b\u0435\u0435 \u043f\u043e\u043d\u044f\u0442\u043d\u044b\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u2013 \u043d\u0430\u043a\u0430\u0442\u0438\u0442\u044c \u0441\u043d\u0430\u043f\u0448\u043e\u0442\/\u0431\u044d\u043a\u0430\u043f \u043f\u0440\u0438 \u043f\u043e\u043b\u043d\u043e\u0439 \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0435 \u0438\u043d\u0441\u0442\u0430\u043d\u0441\u0430 \u0432 \u043c\u043e\u043d\u043e\u043f\u043e\u043b\u044c\u043d\u043e\u043c \u0440\u0435\u0436\u0438\u043c\u0435 \u0440\u0430\u0431\u043e\u0442\u044b. \u041c\u0438\u043d\u0443\u0441 \u044d\u0442\u043e\u0433\u043e \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u0430 \u2013 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u043d\u043e\u0441\u0442\u044c \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0434\u043b\u044f \u043f\u0440\u043e\u043c\u044b\u0448\u043b\u0435\u043d\u043d\u044b\u0445 \u0440\u0435\u0448\u0435\u043d\u0438\u0439 24\/7\/365, \u0442\u0430\u043a \u043a\u0430\u043a \u043d\u0435\u0437\u0430\u043f\u043b\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u043f\u0440\u043e\u0441\u0442\u043e\u0438 \u0434\u0430\u0436\u0435 \u0432 \u043c\u0438\u043d\u0443\u0442\u0443 \u043f\u043e\u0440\u043e\u0436\u0434\u0430\u044e\u0442 \u043b\u0430\u0432\u0438\u043d\u044b \u0430\u043b\u0435\u0440\u0442\u043e\u0432 \u043d\u0430 \u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0445. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0440\u0430\u0434\u0438 \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u043f\u0430\u0440\u044b-\u0442\u0440\u043e\u0439\u043a\u0438 \u0437\u0430\u043f\u0438\u0441\u0435\u0439 \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0435, \u0433\u043e\u0440\u043e\u0434\u0438\u0442\u044c \u043e\u0433\u043e\u0440\u043e\u0434 \u0441\u043e \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u043c\u0438 \u0441\u0445\u0435\u043c\u0430\u043c\u0438\/\u0442\u0430\u0431\u043b\u0438\u0446\u0430\u043c\u0438 \u2013 \u0437\u0430\u043d\u044f\u0442\u0438\u0435 \u043d\u0430 \u043b\u044e\u0431\u0438\u0442\u0435\u043b\u044f. \u041f\u043e\u0440\u043e\u0439 \u043b\u0435\u0433\u0447\u0435 \u0443\u0433\u043e\u0432\u043e\u0440\u0438\u0442\u044c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u0437\u0430\u0432\u0435\u0441\u0442\u0438 \u0434\u0430\u043d\u043d\u044b\u0435 \u0437\u0430\u043d\u043e\u0432\u043e.<\/p>\n<details class=\"spoiler\">\n<summary>\u0418\u0437 \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0438<\/summary>\n<div class=\"spoiler__content\">\n<p>\u0420\u0430\u0431\u043e\u0442\u0443 \u0441\u043e \u0441\u043a\u0440\u0438\u043f\u0442\u0430\u043c\u0438 \u043e\u0442\u043a\u0430\u0442\u0430 \u043c\u043e\u0436\u043d\u043e \u0441\u0438\u043b\u044c\u043d\u043e \u043e\u0431\u043b\u0435\u0433\u0447\u0438\u0442\u044c \u0447\u0435\u0440\u0435\u0437 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0443 \u0411\u0414 &#8212; \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0442\u0435\u043d\u0435\u0432\u044b\u0435 \u0442\u0430\u0431\u043b\u0438\u0446\u044b. \u0420\u0435\u0448\u0435\u043d\u0438\u0435 \u0441\u043f\u043e\u0440\u043d\u043e\u0435, \u0442.\u043a. \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0439 \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0438\u043d\u0434\u0438\u0432\u0438\u0434\u0443\u0430\u043b\u044c\u043d\u043e \u043e\u0442\u0432\u0435\u0447\u0430\u0442\u044c \u043d\u0430 \u0432\u043e\u043f\u0440\u043e\u0441 \u00ab\u0447\u0442\u043e \u043b\u0443\u0447\u0448\u0435?\u00bb: \u043f\u043e\u043b\u043d\u044b\u0435 \u043b\u043e\u0433\u0438 \u0438\u043b\u0438 \u043c\u0430\u043b\u043e\u0435 \u043f\u043e\u0442\u0440\u0435\u0431\u043b\u0435\u043d\u0438\u0435 \u0434\u0438\u0441\u043a\u043e\u0432\u043e\u0433\u043e \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0430. <\/p>\n<p>\u00a0<\/p>\n<p>\u0412 \u041a\u043e\u043c\u043f\u0430\u043d\u0438\u0438 \u0435\u0441\u0442\u044c \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c\u0430 \u2013 \u0438\u0441\u0442\u043e\u0440\u0438\u0447\u043d\u044b\u0435 \u0442\u0430\u0431\u043b\u0438\u0446\u044b, \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0435 \u0434\u043b\u044f \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0430 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044e. \u0412 \u043d\u0438\u0445 \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u044e\u0442\u0441\u044f \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0438\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0437\u0430\u043f\u0438\u0441\u0435\u0439 \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0445 \u0442\u0430\u0431\u043b\u0438\u0446. \u0412 \u0438\u0442\u043e\u0433\u0435 \u0435\u0441\u0442\u044c \u0447\u0438\u0442\u0430\u0431\u0435\u043b\u044c\u043d\u044b\u0439 \u043b\u043e\u0433 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445.<\/p>\n<p>\u0414\u043e Update<\/p>\n<figure class=\"\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/135\/c3f\/3b3\/135c3f3b378986f143244a5101c45518.png\" width=\"466\" height=\"36\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/135\/c3f\/3b3\/135c3f3b378986f143244a5101c45518.png\"\/><figcaption><\/figcaption><\/figure>\n<p>\u0421\u0430\u043c Update<\/p>\n<pre><code class=\"sql\">Update Message Set ExternalID = '123' Where ID = 1; Update Message Set ExternalID = '321' Where ID = 1; Update Message Set ExternalID = '789' Where ID = 1;<\/code><\/pre>\n<p>\u041f\u043e\u0441\u043b\u0435 Update<\/p>\n<figure class=\"\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/f5a\/7fa\/cc5\/f5a7facc52bd9bfef9a2d5d59ffb1b2e.png\" width=\"466\" height=\"69\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/f5a\/7fa\/cc5\/f5a7facc52bd9bfef9a2d5d59ffb1b2e.png\"\/><figcaption><\/figcaption><\/figure>\n<\/p>\n<\/div>\n<\/details>\n<h3>2. Feature Toggle (FT)<\/h3>\n<details class=\"spoiler\">\n<summary>\u0411\u0430\u0439\u043a\u0430 \u0438\u0437 \u0436\u0438\u0437\u043d\u0438 #2<\/summary>\n<div class=\"spoiler__content\">\n<p>\u041a\u043e\u043c\u0430\u043d\u0434\u0430 \u0446\u0435\u043b\u044b\u0439 \u0438\u043d\u043a\u0440\u0435\u043c\u0435\u043d\u0442 \u043f\u0435\u0440\u0435\u043f\u0438\u043b\u0438\u0432\u0430\u0435\u0442 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u0440\u0430\u0441\u0447\u0435\u0442\u0430 \u043f\u0440\u0435\u043c\u0438\u0438 \u043f\u043e \u0441\u0442\u0440\u0430\u0445\u043e\u0432\u043e\u043c\u0443 \u043f\u0440\u043e\u0434\u0443\u043a\u0442\u0443. \u0417\u0430\u0442\u0440\u043e\u043d\u0443\u0442\u044b \u043a\u0430\u043a \u0444\u0440\u043e\u043d\u0442, \u0442\u0430\u043a \u0438 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0441\u0438\u0441\u0442\u0435\u043c \u0431\u044d\u043a\u0430. \u0414\u0435\u043f\u043b\u043e\u0439 \u0438\u0434\u0435\u0442 \u0442\u0440\u0435\u043c\u044f \u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u044b\u043c\u0438 \u0440\u0435\u043b\u0438\u0437\u0430\u043c\u0438 \u0432 \u0440\u0430\u0437\u043d\u043e\u0435 \u0432\u0440\u0435\u043c\u044f \u0432 \u0442\u0435\u0447\u0435\u043d\u0438\u0435 \u0434\u043d\u044f. \u0414\u0435\u043d\u044c \u0440\u0435\u043b\u0438\u0437\u0430 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d, \u0434\u043e\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0437\u0430\u043a\u0440\u0435\u043f\u043b\u0435\u043d\u044b, \u0432\u043b\u0438\u0442\u044b \u0432 \u0440\u0435\u0433\u0440\u0435\u0441\u0441\u043d\u044b\u0435 \u0441\u0431\u043e\u0440\u043a\u0438, \u0440\u0435\u043b\u0438\u0437-\u043c\u0435\u043d\u0435\u0434\u0436\u0435\u0440\u044b \u0444\u0438\u043d\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u044e\u0442 \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0438 \u0433\u043e\u0442\u043e\u0432\u044f\u0442\u0441\u044f \u043a \u0434\u0435\u043f\u043b\u043e\u044e. \u0421\u0443\u0442\u043a\u0438 \u0434\u043e \u0432\u044b\u043a\u043b\u0430\u0434\u043a\u0438\u2026 \u0438 \u0432\u043e\u0437\u043d\u0438\u043a\u0430\u0435\u0442 \u0432\u043e\u043f\u0440\u043e\u0441, \u043a\u0430\u043a \u043f\u043e\u0432\u0435\u0434\u0435\u0442 \u0441\u0435\u0431\u044f \u043f\u0440\u043e\u0434 \u0432 \u043f\u0440\u043e\u043c\u0435\u0436\u0443\u0442\u043a\u0430\u0445 \u043c\u0435\u0436\u0434\u0443 \u0432\u044b\u043a\u043b\u0430\u0434\u043a\u0430\u043c\u0438 \u0440\u0435\u043b\u0438\u0437\u043d\u044b\u0445 \u0441\u0431\u043e\u0440\u043e\u043a \u0440\u0430\u0437\u043d\u044b\u0445 \u0441\u0438\u0441\u0442\u0435\u043c: \u0444\u0440\u043e\u043d\u0442 \u0434\u043e\u0435\u0445\u0430\u043b, \u0431\u044d\u043a \u0432 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435, \u0430 \u043a\u0443\u0441\u043e\u043a \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u0440\u0430\u0441\u0447\u0435\u0442\u0430 \u0442\u0430\u0440\u0438\u0444\u043e\u0432 \u0443\u0436\u0435 \u0432\u043e\u0432\u0441\u044e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442. \u0421\u0442\u0440\u0430\u0448\u043d\u043e\u0432\u0430\u0442\u043e. \u041d\u0430\u0447\u0438\u043d\u0430\u0435\u0448\u044c \u0441\u043f\u0435\u0448\u043d\u043e \u043f\u0440\u043e\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u0442\u044c \u0432\u0441\u0435 pull request\u2019\u044b \u043f\u043e \u0432\u044b\u043a\u043b\u0430\u0434\u043a\u0435, \u0432\u044b\u044f\u0441\u043d\u044f\u044f, \u0447\u0442\u043e \u0432 \u0438\u0442\u043e\u0433\u0435 \u043e\u0442\u0432\u0430\u043b\u0438\u0442\u0441\u044f. \u0412 \u0442\u043e\u0442 \u0440\u0430\u0437 \u043f\u0440\u043e\u043d\u0435\u0441\u043b\u043e,\u0431\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u044f \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u044f\u043c \u043a \u043e\u0431\u0440\u0430\u0442\u043d\u043e\u0439 \u0441\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u043c\u043e\u0441\u0442\u0438 (\u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430 null \u0434\u043b\u044f \u043d\u043e\u0432\u043e\u0433\u043e \u0432\u0445\u043e\u0434\u044f\u0449\u0435\u0433\u043e \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430) &#8212; \u043d\u0435\u043a\u043e\u043d\u0441\u0438\u0441\u0442\u0435\u043d\u0442\u043d\u043e\u0441\u0442\u044c \u043a\u043e\u0434\u0430 \u043f\u0440\u043e\u0448\u043b\u0430 \u043d\u0435\u0437\u0430\u043c\u0435\u0442\u043d\u043e\u0439.<\/p>\n<p>\u00a0<\/p>\n<p>\u0418\u0442\u043e\u0433\u043e\u043c \u0441\u0442\u0430\u043b\u043e \u043f\u0440\u0438\u043d\u044f\u0442\u0438\u0435 \u043d\u0430 \u0443\u0440\u043e\u0432\u043d\u0435 \u043a\u043e\u043c\u0430\u043d\u0434\u044b \u043f\u0430\u0440\u043e\u0447\u043a\u0438 \u043f\u043e\u0434\u0445\u043e\u0434\u043e\u0432:<\/p>\n<p> &#8212; \u041f\u043e\u0441\u043b\u0435 \u0432\u044b\u043a\u043b\u0430\u0434\u043a\u0438 \u043a\u0440\u0443\u043f\u043d\u044b\u0445 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439, \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c <strong>\u0441\u0430\u043c\u0438<\/strong> \u043d\u0430 \u043f\u0440\u043e\u0434\u0435, \u0434\u043e \u0430\u043d\u043e\u043d\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0431\u0438\u0437\u043d\u0435\u0441\u0443;<\/p>\n<p> &#8212; \u0414\u0435\u043a\u043e\u043c\u043f\u043e\u0437\u0438\u0446\u0438\u044f Features \u043d\u0430 <a href=\"https:\/\/www.scaledagileframework.com\/story\/\" rel=\"noopener noreferrer nofollow\">User Story<\/a> \u0442\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u0447\u0442\u043e\u0431\u044b \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0438\u0445 \u0434\u0435\u043f\u043b\u043e\u0438\u0442\u044c \u043d\u0435\u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e (\u043f\u0440\u0438\u0432\u0435\u0442 CI\/CD);<\/p>\n<p> &#8212; \u041e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u043d\u0430\u043b\u0438\u0447\u0438\u0435 FT (\u0441\u0435\u0439\u0447\u0430\u0441 \u043d\u0430\u043b\u0438\u0447\u0438\u0435 FT \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u041d\u0424\u0422 \u0434\u043b\u044f \u0431\u043e\u043b\u044c\u0448\u0435\u0439 \u0447\u0430\u0441\u0442\u0438 \u0434\u043e\u0440\u0430\u0431\u043e\u0442\u043e\u043a \u0441\u043e \u0441\u0442\u043e\u0440\u043e\u043d\u044b \u041a\u043e\u043c\u043f\u0430\u043d\u0438\u0438)<\/p>\n<\/div>\n<\/details>\n<details class=\"spoiler\">\n<summary>\u0411\u0430\u0439\u043a\u0430 \u0438\u0437 \u0436\u0438\u0437\u043d\u0438 #3<\/summary>\n<div class=\"spoiler__content\">\n<p>\u0412 \u0434\u0440\u0443\u0433\u043e\u0439 \u0440\u0430\u0437 \u0432\u044b\u043a\u0430\u0442\u044b\u0432\u0430\u043b\u0438 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f UI \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0435\u0433\u043e \u0441\u0442\u0440\u0430\u0445\u043e\u0432\u043e\u0433\u043e \u043f\u0440\u043e\u0434\u0443\u043a\u0442\u0430. \u0414\u043e\u043f\u0438\u043b\u0438\u043b\u0438, \u0437\u0430\u043b\u0438\u043b\u0438, \u0432\u043a\u043b\u044e\u0447\u0438\u043b\u0438\u0441\u044c \u0432 \u0440\u0435\u043b\u0438\u0437, \u0438 \u043d\u0430 \u0440\u0435\u0433\u0440\u0435\u0441\u0441\u043d\u043e\u043c \u0441\u0442\u0435\u0434\u0435 \u0441\u043c\u0435\u0436\u043d\u0430\u044f \u043a\u043e\u043c\u0430\u043d\u0434\u0430 \u043d\u0430\u0445\u043e\u0434\u0438\u0442 \u0431\u0430\u0433 (\u0434\u0430-\u0434\u0430, \u044d\u0442\u043e \u0441\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f, \u0438 \u044d\u0442\u043e \u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u043e) \u0432 \u043e\u0434\u043d\u043e\u0439 \u0438\u0437 \u043f\u0440\u043e\u0432\u0435\u0440\u043e\u043a UI. \u0410\u043d\u0430\u043b\u0438\u0437 \u0434\u0435\u0444\u0435\u043a\u0442\u0430 \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442, \u0447\u0442\u043e \u043d\u0435 \u0443\u0447\u043b\u0438 \u043a\u0440\u0443\u043f\u043d\u044b\u0439 \u0431\u0438\u0437\u043d\u0435\u0441-\u043a\u0435\u0439\u0441 \u2013 \u0435\u0433\u043e \u0434\u043e\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0433\u043e \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0438 \u0441\u043f\u043e\u043a\u043e\u0439\u043d\u043e\u0439 \u0433\u043e\u043b\u043e\u0432\u044b \u043f\u0440\u0438 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u0438 \u043a\u043e\u0434\u0430. \u0425\u043e\u0440\u043e\u0448\u043e, \u0447\u0442\u043e \u0434\u043e\u0440\u0430\u0431\u043e\u0442\u043a\u0443 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u0437\u0430\u0444\u0438\u0447\u0435\u0442\u043e\u0433\u043b\u0438\u043b\u0438 \u043f\u043e\u0434 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u043c \u043a\u043e\u0434\u043e\u043c FT, \u0442.\u0435. \u043e\u043d\u0430 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043e\u0442\u043a\u043b\u044e\u0447\u0435\u043d\u0430 \u043d\u0435\u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e. \u041f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0435\u043c \u0431\u0438\u0437\u043d\u0435\u0441 \u0438 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u043c \u0440\u0435\u0448\u0435\u043d\u0438\u0435, \u0447\u0442\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u043d\u0435\u043a\u0440\u0438\u0442\u0438\u0447\u043d\u0430 \u0438 \u043c\u043e\u0436\u0435\u043c \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c\u0441\u044f \u0431\u0435\u0437 \u043d\u0435\u0451. FT \u043e\u0442\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f, \u0437\u0430\u0434\u0430\u0447\u0430 \u0442\u0435\u0445 \u0434\u043e\u043b\u0433\u0430 \u043d\u0430 \u0438\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0437\u0430\u043a\u0438\u0434\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0432 \u0431\u044d\u043a\u043b\u043e\u0433 \u0431\u043b\u0438\u0436\u0430\u0439\u0448\u0435\u0433\u043e \u0441\u043f\u0440\u0438\u043d\u0442\u0430, \u0434\u0435\u0444\u0435\u043a\u0442 \u0437\u0430\u043a\u0440\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0438 \u0440\u0435\u043b\u0438\u0437 \u0432\u044b\u0445\u043e\u0434\u0438\u0442 \u0431\u0435\u0437 \u0441\u0431\u043e\u0435\u0432. <s>\u0422\u0430\u043d\u0446\u0443\u044e\u0442 \u0412\u0441\u0435!<\/s><\/p>\n<p>\u00a0<\/p>\n<p>\u0427\u0442\u043e \u0432\u044b\u043d\u0435\u0441 \u0434\u043b\u044f \u0441\u0435\u0431\u044f:<\/p>\n<p> &#8212; \u041d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043a\u043e\u0434\u043e\u0432 FT \u0434\u043b\u044f \u043e\u0434\u043d\u043e\u0439 \u0441\u0442\u043e\u0440\u0438 \u0445\u043e\u0442\u044c \u0438 \u0443\u0441\u043b\u043e\u0436\u043d\u044f\u0435\u0442 \u043e\u0431\u0441\u043b\u0443\u0436\u0438\u0432\u0430\u043d\u0438\u0435 \u0442\u0435\u0445\u0434\u043e\u043b\u0433\u0430, \u043d\u043e \u044d\u043a\u043e\u043d\u043e\u043c\u0438\u0442 \u043d\u0435\u0440\u0432\u044b \u0438 \u0432\u0440\u0435\u043c\u044f \u043f\u0440\u0438 \u043b\u043e\u0432\u043b\u0435 \u0431\u0430\u0433\u043e\u04324<\/p>\n<p> &#8212;\u00a0\u0415\u0441\u043b\u0438 UI \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 FT \u2013 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439. <\/p>\n<\/div>\n<\/details>\n<p>\u041f\u0440\u0430\u043a\u0442\u0438\u043a\u0430 <a href=\"https:\/\/habr.com\/ru\/post\/464021\/\" rel=\"noopener noreferrer nofollow\">FT <\/a>\u0447\u0443\u0442\u044c \u0441\u043b\u043e\u0436\u043d\u0435\u0435 \u0440\u0435\u0437\u0435\u0440\u0432\u043d\u043e\u0439 \u043a\u043e\u043f\u0438\u0438 \u0434\u0430\u043d\u043d\u044b\u0445. \u0414\u043b\u044f \u043d\u0435\u0435 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c \u043d\u0435\u043a\u0438\u0439 \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c \u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0430\u0442\u0435\u043b\u0435\u0439 \u2013 \u0431\u0443\u0434\u044c \u0442\u043e \u0442\u0430\u0431\u043b\u0438\u0446\u0430 \u0432 \u0411\u0414, \u043a\u043e\u043d\u0444\u0438\u0433-\u0444\u0430\u0439\u043b\u044b \u0438\u043b\u0438 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u043c\u0435\u0442\u0430\u0434\u0430\u043d\u043d\u044b\u0445. \u041f\u043b\u044e\u0441 \u0442\u0440\u0435\u0443\u0431\u0435\u0442\u0441\u044f \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0435\u0435 \u0441\u043e\u0433\u043b\u0430\u0441\u0438\u0435 \u0441 \u0440\u043e\u0441\u0442\u043e\u043c <a href=\"https:\/\/habr.com\/ru\/post\/453280\/\" rel=\"noopener noreferrer nofollow\">\u0442\u0435\u0445\u0434\u043e\u043b\u0433\u0430 <\/a>\u0438 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u044c\u044e \u0435\u0433\u043e \u043e\u0431\u0441\u043b\u0443\u0436\u0438\u0432\u0430\u043d\u0438\u044f.<\/p>\n<p>\u0421\u0440\u0430\u0437\u0443 \u0443\u0442\u043e\u0447\u043d\u044e, \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0434\u0430\u043d\u043e \u0434\u043b\u044f <a href=\"https:\/\/martinfowler.com\/articles\/feature-toggles.html\" rel=\"noopener noreferrer nofollow\">Release Toggles<\/a>. \u0418\u0445 \u0441\u0440\u043e\u043a \u0436\u0438\u0437\u043d\u0438 \u2013 \u043d\u0435 \u0434\u043e\u043b\u044c\u0448\u0435 2-3 \u0440\u0435\u043b\u0438\u0437\u043d\u044b\u0445 \u0446\u0438\u043a\u043b\u043e\u0432 (2 \u0441\u0442\u0430\u0442\u044c\u044f \u0438\u0437 <a href=\"https:\/\/habr.com\/ru\/post\/324130\/\" rel=\"noopener noreferrer nofollow\">\u0423\u0433\u043e\u043b\u043e\u0432\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0435\u043a\u0441\u0430 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430<\/a> \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u044f\u0440\u043a\u043e \u043f\u043e\u0434\u0441\u0432\u0435\u0447\u0438\u0432\u0430\u044e\u0442 \u0441\u0442\u043e\u043b\u044c \u0436\u0435\u0441\u0442\u043a\u043e\u0435 \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u0435). \u041d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b \u0434\u043b\u044f \u0443\u043c\u0435\u043d\u044c\u0448\u0435\u043d\u0438\u044f \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0430 \u0432\u043d\u0435\u043f\u043b\u0430\u043d\u043e\u0432\/\u043a\u0440\u0438\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0440\u0435\u043b\u0438\u0437\u043e\u0432. \u041f\u043e\u043b\u044c\u0437\u0430 \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e\u0431\u044b \u0434\u0430\u0436\u0435 \u043f\u0440\u0438 \u043f\u043e\u043b\u043d\u043e\u043c \u043e\u0442\u043a\u0430\u0437\u0435 \u043f\u0440\u043e\u0434\u0430, \u0435\u0433\u043e \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u043b\u0435\u0433\u043a\u043e (\u0432 \u0438\u0434\u0435\u0430\u043b\u0435 \u043c\u0433\u043d\u043e\u0432\u0435\u043d\u043d\u043e, \u0432 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u0434\u0435\u043f\u043b\u043e\u044f) \u0440\u0435\u0430\u043d\u0438\u043c\u0438\u0440\u043e\u0432\u0430\u0442\u044c, \u043e\u0442\u043a\u043b\u044e\u0447\u0438\u0432 \u043d\u043e\u0432\u044b\u0439 \u043a\u043e\u0434.<\/p>\n<p>\u0414\u043e\u043b\u0433\u043e\u0436\u0438\u0432\u0443\u0449\u0438\u0435 FT A\/B \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f, \u043d\u0435\u0441\u0443\u0442 \u0432 \u0441\u0435\u0431\u0435 \u0434\u0440\u0443\u0433\u0443\u044e \u0446\u0435\u043d\u043d\u043e\u0441\u0442\u044c \u0438 \u043d\u0430 \u0441\u043f\u043e\u043a\u043e\u0439\u0441\u0442\u0432\u0438\u0435 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430 \u043f\u0440\u0438 \u0432\u044b\u043a\u043b\u0430\u0434\u043a\u0435 \u043a\u043e\u0434\u0430 \u043e\u0441\u043e\u0431\u043e \u043d\u0435 \u0432\u043b\u0438\u044f\u044e\u0442.<\/p>\n<p>\u0411\u0430\u0437\u043e\u0432\u044b\u0435 \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u044b:<\/p>\n<ul>\n<li>\n<p>\u0412\u044b\u043a\u043b\u044e\u0447\u0435\u043d\u043d\u044b\u0439 FT \u043a\u043e\u0434 \u043d\u0435 \u043c\u0435\u043d\u044f\u0435\u0442, \u0442\u043e \u0435\u0441\u0442\u044c \u043a\u0443\u0440\u0441\u043e\u0440 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u043f\u0440\u043e\u0445\u043e\u0434\u0438\u0442 \u0440\u043e\u0432\u043d\u043e \u0432\u0441\u0435 \u0442\u0435 \u0436\u0435 \u0431\u043b\u043e\u043a\u0438 \u0432 \u0442\u043e\u043c \u0436\u0435 \u043f\u043e\u0440\u044f\u0434\u043a\u0435, \u0447\u0442\u043e \u0438 \u0431\u0435\u0437 FT;<\/p>\n<\/li>\n<li>\n<p>FT \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u043f\u043e\u0432\u0442\u043e\u0440\u043d\u043e. \u041d\u0430 \u043f\u0440\u043e\u0434\u0435 \u0442\u043e\u0447\u043d\u043e, \u0430 \u0434\u0440\u0443\u0433\u0438\u0435 \u0438\u043d\u0441\u0442\u0430\u043d\u0441\u044b \u2013 \u043d\u0430 \u0441\u043e\u0432\u0435\u0441\u0442\u0438 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430;<\/p>\n<\/li>\n<\/ul>\n<details class=\"spoiler\">\n<summary>4 \u043c\u0438\u043d\u0443\u0442\u0430 \u0432\u044b\u0441\u0442\u0443\u043f\u043b\u0435\u043d\u0438\u044f Doug Sven &#8212; \u043a\u0430\u043a \u043d\u0435 \u043d\u0430\u0434\u043e \u0434\u0435\u043b\u0430\u0442\u044c<\/summary>\n<div class=\"spoiler__content\">\n<p><a href=\"https:\/\/dougseven.com\/2014\/04\/17\/knightmare-a-devops-cautionary-tale\/\" rel=\"noopener noreferrer nofollow\">Knightmare: A DevOps \u041f\u0440\u0435\u0434\u043e\u0441\u0442\u0435\u0440\u0435\u0433\u0430\u044e\u0449\u0430\u044f \u0438\u0441\u0442\u043e\u0440\u0438\u044f<\/a><\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/200\/aae\/6dd\/200aae6dd9258597014c33e5f0b9ddd4.png\" alt=\"Feature Toggles: The Good, The Bad, and The Ugly with Andy Davies\" title=\"Feature Toggles: The Good, The Bad, and The Ugly with Andy Davies\" width=\"974\" height=\"461\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/200\/aae\/6dd\/200aae6dd9258597014c33e5f0b9ddd4.png\"\/><figcaption>Feature Toggles: The Good, The Bad, and The Ugly with Andy Davies<\/figcaption><\/figure>\n<p>4 \u043c\u0438\u043d\u0443\u0442\u0430 <a href=\"https:\/\/www.youtube.com\/watch?v=r7VI5x2XKXw&amp;t=53s\" rel=\"noopener noreferrer nofollow\">\u0432\u0438\u0434\u0435\u043e<\/a><\/p>\n<\/div>\n<\/details>\n<ul>\n<li>\n<p>FT \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0432\u044b\u043f\u0438\u043b\u0438\u0432\u0430\u0442\u044c \u043f\u043e\u0441\u043b\u0435 \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043d\u0438\u044f \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0438\u044f \u043a\u0440\u0438\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u043e\u0442\u043a\u0430\u0437\u043e\u0432. \u041c\u0435\u043b\u043a\u0438\u0439 \u043a\u043e\u0441\u044f\u043a \u0447\u0435\u0440\u0435\u0437 3-4 \u043c\u0435\u0441\u044f\u0446\u0430 \u0430\u043a\u0442\u0438\u0432\u043d\u043e\u0433\u043e (!) \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u043a\u043e\u0434\u0430 \u2013 \u044f\u0432\u043b\u0435\u043d\u0438\u0435 \u043d\u0430\u0441\u0442\u043e\u043b\u044c\u043a\u043e \u0442\u0440\u0438\u0432\u0438\u0430\u043b\u044c\u043d\u043e\u0435, \u0447\u0442\u043e \u0440\u0430\u0434\u0438 \u043d\u0435\u0433\u043e \u043e\u0442\u043a\u0430\u0442\u044b\u0432\u0430\u0442\u044c \u0432\u0441\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u043d\u0435\u0440\u0430\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e.<\/p>\n<\/li>\n<\/ul>\n<p>\u0414\u043b\u044f \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439 \u043f\u0443\u043d\u043a\u0442 \u0441\u0430\u043c\u044b\u0439 \u0441\u043f\u043e\u0440\u043d\u044b\u0439. \u041e\u0434\u043d\u0430\u043a\u043e \u0432 \u0433\u0438\u0433\u0430\u043d\u0442\u0441\u043a\u043e\u0439 \u043a\u043e\u0434\u043e\u0432\u043e\u0439 \u0431\u0430\u0437\u0435, \u0433\u0434\u0435 \u043f\u043e\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u0440\u0430\u0431\u043e\u0442\u044b \u0434\u0430\u0436\u0435 \u0432 \u0440\u0430\u043c\u043a\u0430\u0445 \u043f\u0430\u043a\u0435\u0442\u0430 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043d\u0435\u043f\u043e\u043b\u043d\u044b\u043c, \u043b\u0443\u0447\u0448\u0435 \u0441\u0440\u0430\u0437\u0443 \u0432\u044b\u043f\u0438\u043b\u0438\u0442\u044c \u043d\u0435\u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0449\u0438\u0439 \u043a\u043e\u0434, \u0447\u0435\u043c \u0432\u0441\u044f\u043a\u0438\u0439 \u0440\u0430\u0437 \u043f\u0440\u0438 \u0440\u0430\u0437\u0431\u043e\u0440\u0435 \u0438\u043d\u0446\u0438\u0434\u0435\u043d\u0442\u043e\u0432 \u0432\u0441\u043f\u043e\u043c\u0438\u043d\u0430\u0442\u044c \u00ab\u0430 \u043e\u043d\u043e \u0435\u0449\u0435 \u043d\u0430\u0434\u043e\u00bb?<\/p>\n<h2>3.\u0422\u0435\u0441\u0442\u044b \u0441\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438\/\u043c\u043e\u0434\u0443\u043b\u044c\u043d\u044b\u0435 \u0442\u0435\u0441\u0442\u044b<\/h2>\n<details class=\"spoiler\">\n<summary>\u0411\u0430\u0439\u043a\u0430 \u0438\u0437 \u0436\u0438\u0437\u043d\u0438 #4<\/summary>\n<div class=\"spoiler__content\">\n<p>\u041f\u0435\u0440\u0435\u043f\u0430\u043b\u0430 \u043a\u0430\u043a-\u0442\u043e \u0437\u0430\u0434\u0430\u0447\u0430 \u043f\u0435\u0440\u0435\u043f\u0438\u0441\u0430\u0442\u044c \u0437\u0430\u043f\u0440\u043e\u0441 Oracle \u043e\u043d\u043b\u0430\u0439\u043d-\u043a\u0430\u043d\u0430\u043b\u0430 \u2013 \u043f\u0435\u0440\u0438\u043e\u0434\u0438\u0447\u0435\u0441\u043a\u0438 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0442\u043e\u0440 \u0432\u044b\u0431\u0438\u0440\u0430\u0435\u0442 \u043f\u043b\u0430\u043d \u0441 full scan \u043f\u043e \u0434\u0430\u0442\u0430\u0441\u0435\u0442\u0443 \u0432 3-4m \u0437\u0430\u043f\u0438\u0441\u0435\u0439. \u042d\u0442\u043e \u0431\u044b\u043b \u043d\u0435 \u043f\u0435\u0440\u0432\u044b\u0439 \u043f\u043e\u0434\u0445\u043e\u0434 \u043a \u0441\u043d\u0430\u0440\u044f\u0434\u0443. \u041e\u0447\u0435\u0432\u0438\u0434\u043d\u044b\u0435 \u0432\u0435\u0449\u0438 \u0432 \u0432\u0438\u0434\u0435 \u0440\u0430\u0437\u0431\u0438\u0435\u043d\u0438\u044f \u043d\u0430 \u0437\u0430\u043f\u0440\u043e\u0441\u044b \u0441 union \u0443\u0436\u0435 \u0431\u044b\u043b\u0438 \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u044b. \u041d\u0443\u0436\u0435\u043d \u0438\u043d\u0434\u0435\u043a\u0441. \u0422\u0430\u043a \u043a\u0430\u043a \u0442\u0430\u0431\u043b\u0438\u0446\u0430 \u0431\u043e\u043b\u044c\u0448\u0430\u044f \u0438 \u0441 \u0430\u043a\u0442\u0438\u0432\u043d\u044b\u043c\u0438 I\/O \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044f\u043c\u0438, DBA \u043f\u0440\u043e\u0441\u044f\u0442 \u043e\u0431\u043e\u0441\u043d\u043e\u0432\u0430\u043d\u0438\u044f, \u0447\u0442\u043e \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0438\u043d\u0434\u0435\u043a\u0430\u0441\u0430 <em>\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e <\/em>\u043f\u043e\u043c\u043e\u0436\u0435\u0442.<\/p>\n<p>\u041f\u0440\u043e\u0441\u044f\u0442 \u2013 \u043f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430. \u0421\u0434\u0435\u043b\u0430\u043d\u043e 2 \u0432\u0435\u0440\u0441\u0438\u0438 \u0437\u0430\u043f\u0440\u043e\u0441\u0430, \u043e\u0431\u0435\u0440\u043d\u0443\u0442\u044b \u0432 FT \u0438 \u0432\u043b\u0438\u0442\u044b \u0432 \u0442\u0435\u0441\u0442\u043e\u0432\u044b\u0439 \u0441\u0442\u0435\u043d\u0434. \u0414\u0430\u043b\u044c\u0448\u0435, \u0447\u0435\u0440\u0435\u0437 <a href=\"https:\/\/betteratoracle.com\/posts\/12-runstats\" rel=\"noopener noreferrer nofollow\">RunStats<\/a>\u00a0\u0430\u043d\u0430\u043b\u0438\u0437 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u0445 \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432, \u043f\u043e\u0442\u043e\u043c \u043f\u0440\u043e\u0433\u043e\u043d \u043d\u0430 \u0441\u043e\u0432\u043f\u0430\u0434\u0435\u043d\u0438\u0435 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u0432 \u043f\u043e \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u043c \u0441\u043e\u0442\u043d\u044f\u043c \u043f\u0440\u0438\u043c\u0435\u0440\u043e\u0432. \u0421\u043e\u0448\u043b\u0438\u0441\u044c \u0438 \u044d\u0442\u043e \u0445\u043e\u0440\u043e\u0448\u043e.<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/fe9\/05f\/dec\/fe905fdecc8374a922510e4297ebeb96.png\" alt=\"\u041f\u0440\u0438\u043c\u0435\u0440 \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u044f \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438\" title=\"\u041f\u0440\u0438\u043c\u0435\u0440 \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u044f \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438\" width=\"972\" height=\"103\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/fe9\/05f\/dec\/fe905fdecc8374a922510e4297ebeb96.png\"\/><figcaption>\u041f\u0440\u0438\u043c\u0435\u0440 \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u044f \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438<\/figcaption><\/figure>\n<p>\u0421\u043b\u0435\u0434\u043e\u043c \u0442\u043e \u0436\u0435 \u0441\u0430\u043c\u043e\u0435 \u043d\u0430 \u0440\u0435\u0433\u0440\u0435\u0441\u0441\u0435 \u0438 \u043f\u0440\u043e\u0434\u0435 \u2013 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0448\u044c \u0441\u043a\u0440\u0438\u043f\u0442 \u0438 \u0438\u0434\u0435\u0448\u044c \u043f\u0438\u0442\u044c \u0447\u0430\u0439. \u041f\u0440\u0438\u0445\u043e\u0434\u0438\u0448\u044c \u0438 \u0441\u043c\u043e\u0442\u0440\u0438\u0448\u044c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b \u2013 \u043d\u043e\u0432\u0430\u044f \u0432\u0435\u0440\u0441\u0438\u044f \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0431\u044b\u0441\u0442\u0440\u0435\u0435, \u043e\u0448\u0438\u0431\u043e\u043a \u043d\u0435\u0442.<\/p>\n<p>\u0421\u0430\u043c\u044b\u0439 \u043f\u0440\u0438\u044f\u0442\u043d\u044b\u0439 \u0431\u043e\u043d\u0443\u0441 \u0434\u0430\u043d\u043d\u043e\u0433\u043e \u043f\u043e\u0434\u0445\u043e\u0434\u0430 \u2013 \u043e\u0434\u0438\u043d \u0440\u0430\u0437 \u043d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u0448\u044c \u0442\u0435\u0441\u0442\u044b (\u043f\u0440\u0438 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0435), \u0438 \u043f\u043e\u0442\u043e\u043c \u043d\u0435 \u043f\u0430\u0440\u0438\u0448\u044c\u0441\u044f, \u043a\u043e\u0433\u0434\u0430 \u043d\u0443\u0436\u043d\u043e \u0434\u043e\u043f\u0438\u043b\u0438\u0442\u044c \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b (\u043f\u0440\u043e\u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0440\u0443\u043a\u0430\u043c\u0438 \u0434\u0430\u0436\u0435 20 \u043a\u0435\u0439\u0441\u043e\u0432 3-4 \u0440\u0430\u0437\u0430 \u043f\u043e\u0434\u0440\u044f\u0434 \u0436\u0435\u043b\u0430\u043d\u0438\u044f \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442 \u043c\u0430\u043b\u043e)<\/p>\n<\/div>\n<\/details>\n<p>\u0417\u0430 \u044d\u0442\u043e\u0442 \u043f\u043e\u0434\u0445\u043e\u0434 \u0441\u043f\u0430\u0441\u0438\u0431\u043e \u043a\u043e\u043b\u043b\u0435\u0433\u0430\u043c. \u041a\u0440\u0430\u0439\u043d\u0435 \u043f\u043e\u043b\u0435\u0437\u0435\u043d \u043f\u0440\u0438 \u0440\u0435\u0444\u0430\u043a\u0442\u043e\u0440\u0438\u043d\u0433\u0435 \u043b\u0435\u0433\u0430\u0441\u0438. \u0421\u0443\u0442\u044c \u2013 \u0432\u0437\u044f\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435 \u0432 \u0431\u0430\u0437\u0435 (\u0441\u043f\u0438\u0441\u043e\u043a \u0434\u043e\u0433\u043e\u0432\u043e\u0440\u043e\u0432) \u0438 \u043f\u0440\u043e\u0433\u043d\u0430\u0442\u044c \u043f\u043e \u043c\u0430\u043a\u0441\u0438\u043c\u0443\u043c\u0443 \u0447\u0435\u0440\u0435\u0437 \u043e\u0431\u0435 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043c\u0435\u0442\u043e\u0434\u0430, \u0441\u0442\u0430\u0440\u0443\u044e \u0438 \u043d\u043e\u0432\u0443\u044e. \u0422\u0430\u043a \u043a\u0430\u043a enterprise-\u0431\u0430\u0437\u0430 \u043a\u0438\u0448\u0438\u0442 \u0442\u0435\u0441\u0442\u043e\u0432\u044b\u043c\u0438 \u043f\u0440\u0438\u043c\u0435\u0440\u0430\u043c\u0438 \u0440\u0430\u0437\u043d\u043e\u0439 \u0441\u0442\u0435\u043f\u0435\u043d\u0438 \u043a\u0440\u0438\u0432\u0438\u0437\u043d\u044b, \u043f\u0440\u0438 \u0432\u044b\u0431\u043e\u0440\u043a\u0435 \u0432 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0442\u044b\u0441\u044f\u0447-\u0434\u0435\u0441\u044f\u0442\u043a\u043e\u0432 \u0442\u044b\u0441\u044f\u0447 \u043f\u0440\u0438\u043c\u0435\u0440\u043e\u0432, \u0448\u0430\u043d\u0441\u043e\u0432 \u043f\u0440\u043e\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u043a\u0440\u0438\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u043a\u043e\u0441\u044f\u043a \u043e\u0447\u0435\u043d\u044c \u043c\u0430\u043b\u043e. \u0414\u043e\u0431\u0430\u0432\u0438\u0432 \u0435\u0449\u0435 \u0438 <a href=\"https:\/\/asktom.oracle.com\/pls\/apex\/asktom.search?tag=runstats-valid-for-92\" rel=\"noopener noreferrer nofollow\">\u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0435\u043c \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438<\/a>, \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f \u0445\u043e\u0440\u043e\u0448\u0430\u044f \u0441\u0435\u0440\u0435\u0431\u0440\u044f\u043d\u0430\u044f \u043f\u0443\u043b\u044f \u043f\u0440\u0438 \u0440\u0430\u0437\u0433\u043e\u0432\u043e\u0440\u0435 \u0441 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u043e\u0440\u0430\u043c\u0438.<\/p>\n<p>\u041f\u0440\u0430\u043a\u0442\u0438\u043a\u0430 \u043f\u0440\u0435\u043a\u0440\u0430\u0441\u043d\u043e \u0441\u043e\u0447\u0435\u0442\u0430\u0435\u0442\u0441\u044f \u0441 FT &#8212; \u0432 \u0440\u0430\u043c\u043a\u0430\u0445 \u043e\u0434\u043d\u043e\u0433\u043e \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u043a\u043e\u0434\u0430 \u043b\u0435\u0433\u043a\u043e \u0441\u0440\u0430\u0432\u043d\u0438\u0442\u044c \u0441\u0442\u0430\u0440\u043e\u0435 \u0438 \u043d\u043e\u0432\u043e\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u044f.<\/p>\n<details class=\"spoiler\">\n<summary>\u041f\u0440\u0438\u043c\u0435\u0440\u044b \u043a\u043e\u0434\u0430<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"sql\">declare   vTime1  number := 0;   vTime2  number := 0;    procedure prc(pID in number, pRowID IN ROWID)   is         function find(pSeconds out number) return number     is       vResult NUMBER;     begin       pSeconds := dbms_utility.get_time\/100;       -- \u0422\u0435\u0441\u0442\u0438\u0440\u0443\u0435\u043c\u044b\u0439 \u043c\u0435\u0442\u043e\u0434       vResult  := TestPack.TestMethod;       pSeconds := (dbms_utility.get_time\/100 - pSeconds);       return vResult;     end;          procedure TestCase(pCase in varchar2)     is       vResult1 number;       vResult2 number;       vSeconds1 number;       vSeconds2 number;       vDiff VARCHAR2(100);     begin       SAVEPOINT SP;       ftoggle.Disable('FT_12345');       vResult1 := find(vSeconds1);       vTime1 := vTime1 + vSeconds1;       ftoggle.Enable('FT_12345');       vResult2 := find(vSeconds2);       vTime2 := vTime2 + vSeconds2;       RollBack To SP;       if nvl(vResult1, -1) &lt;> nvl(vResult2, -1) then         vDiff := ';[' || pCase || '] ' || pAgrISN || ': ' || vResult1 || '&lt;>' || vResult2;       end if;       Update TMP_Table t          Set T.ERR = T.ERR||NVL2(T.ERR||vDiff, ';', Null)||vDiff,              T.STATUS     = Decode(pCase, '1', Nvl(T.STATUS,0)     + vSeconds1*1000000 + vSeconds2, T.STATUS))       Where T.RowID = pRowID;     end;        begin     GetTestData(pID);     TestCase('1');     TestCase('2');     TestCase('3');   end;  begin   for vCur in (select to_number(t.fio) As ID, T.RowID from TMP_Table t Where T.Status Is Null)   loop     prc(vCur.ID, vCur.RowID);     Update TMP_Table t Set T.ERR = 'Compare' Where T.RowID = vCur.Rowid And T.ERR Is Null;   end loop; end;<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<p><strong>\u041b\u043e\u0433\u0438\u0447\u043d\u043e\u0435 \u0440\u0430\u0437\u0432\u0438\u0442\u0438\u0435<\/strong> \u0442\u0435\u0441\u0442\u043e\u0432 \u0441\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u2013 \u043c\u043e\u0434\u0443\u043b\u044c\u043d\u044b\u0435 \u0442\u0435\u0441\u0442\u044b (Unit tests, UT). \u041a\u043e\u0433\u0434\u0430 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u043f\u0440\u0438\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u044e\u0442 \u0432 \u0431\u0430\u0437\u0435 \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e \u0441 \u043f\u0440\u043e\u0434\u043e\u0432\u044b\u043c \u043a\u043e\u0434\u043e\u043c (\u0437\u0430 \u0442\u0435\u043e\u0440\u0438\u0435\u0439 \u2013 \u043a <a href=\"https:\/\/habr.com\/ru\/post\/136049\/\" rel=\"noopener noreferrer nofollow\">Roy Osherove<\/a>). <\/p>\n<p>\u041f\u043e\u043b\u044c\u0437\u0430 UT \u043d\u0435 \u043e\u0434\u043d\u043e\u0437\u043d\u0430\u0447\u043d\u0430 \u043d\u0430 \u0441\u0442\u0430\u0440\u0442\u0435 \u043f\u0440\u043e\u0435\u043a\u0442\u0430. \u041e\u0434\u043d\u0430\u043a\u043e \u043f\u0440\u0438 \u0440\u0430\u0437\u0432\u0438\u0442\u0438\u0438 \u0440\u0435\u0448\u0435\u043d\u0438\u044f, \u0431\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u044f UT \u0441\u0442\u043e\u0438\u043c\u043e\u0441\u0442\u044c \u0440\u0435\u0444\u0430\u043a\u0442\u043e\u0440\u0438\u043d\u0433\u0430 \u0441\u043d\u0438\u0436\u0430\u0435\u0442\u0441\u044f (\u0441\u043c. <a href=\"https:\/\/habr.com\/ru\/post\/453280\/\" rel=\"noopener noreferrer nofollow\">\u0442\u0435\u0445\u0434\u043e\u043b\u0433<\/a>). \u041d\u0430\u0438\u0431\u043e\u043b\u0435\u0435 \u043e\u0447\u0435\u0432\u0438\u0434\u043d\u044b\u0439 \u0430\u0441\u043f\u0435\u043a\u0442 \u2013 \u043c\u0435\u043d\u044c\u0448\u0435 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0442\u0440\u0430\u0442\u0438\u0442\u0441\u044f \u043d\u0430 \u0440\u0435\u0442\u0435\u0441\u0442 \u043f\u0440\u0438 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0438 \u043a\u043e\u0434\u0430.<\/p>\n<p>\u0412\u043e\u043f\u0440\u043e\u0441\u044b, \u043a\u0430\u043a \u043f\u0438\u0441\u0430\u0442\u044c UT \u043d\u0430 Oracle \u0434\u043e\u0441\u0442\u043e\u0439\u043d\u044b \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0438. \u0417\u0434\u0435\u0441\u044c \u0436\u0435 \u043f\u0440\u0438\u0432\u0435\u0434\u0443 \u043f\u0430\u0440\u0443 \u043f\u0440\u0438\u043c\u0435\u0440\u043e\u0432 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0432 \u0444\u043e\u0440\u043c\u0430\u0442\u0435 \u0442\u0435\u0441\u0442\u043e\u043f\u0440\u0438\u0433\u043e\u0434\u043d\u043e\u0433\u043e \u0434\u0438\u0437\u0430\u0439\u043d\u0430 \u043d\u0430 Oracle.<\/p>\n<details class=\"spoiler\">\n<summary>\u041f\u0440\u0438\u043c\u0435\u0440 UT#1<\/summary>\n<div class=\"spoiler__content\">\n<p>\u041f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c\u044b\u0439 \u043c\u0435\u0442\u043e\u0434<\/p>\n<pre><code class=\"sql\">  -- \u0442\u0438\u043f \u0434\u043b\u044f \u0440\u0430\u0441\u0447\u0435\u0442\u0430 \u043f\u0435\u0440\u0438\u043e\u0434\u043e\u0432   TYPE TPERIOD IS RECORD (     pBeg DATE,     pEnd DATE   );   TYPE TPERIODTABLE IS TABLE OF TPERIOD;    \/**    * ==========================================================================&lt;br\/>   * \u0420\u0430\u0441\u0447\u0435\u0442 \u043f\u0435\u0440\u0438\u043e\u0434\u043e\u0432 \u043c\u043d\u043e\u0433\u043e\u043b\u0435\u0442\u043d\u0435\u0433\u043e \u0441\u0442\u0440\u0430\u0445\u043e\u0432\u0430\u043d\u0438\u044f &lt;br\/>   * ==========================================================================&lt;br\/>   * @param pBegin - \u043d\u0430\u0447\u0430\u043b\u043e \u043f\u0435\u0440\u0438\u043e\u0434\u0430   * @param pEnd   - \u043e\u043a\u043e\u043d\u0447\u0430\u043d\u0438\u0435 \u043f\u0435\u0440\u0438\u043e\u0434\u0430   * @return       - \u0442\u0430\u0431\u043b\u0438\u0446\u0430 \u0441 \u043f\u0435\u0440\u0438\u043e\u0434\u0430\u043c\u0438   *\/       FUNCTION CalcPeriods(pBegin IN DATE, pEnd IN DATE) RETURN TPERIODTABLE   AS     vResult TPERIODTABLE := TPERIODTABLE();     vPeriod TPERIOD;     vBegin  DATE   := TRUNC(pBegin);     vEnd    DATE   := TRUNC(pEnd);     vMonths NUMBER := GREATEST(months_between(vEnd, vBegin), 1);     -- \u041d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c 1 \u0434\u0435\u043d\u044c \u0432 \u0444\u0435\u0432\u0440\u0430\u043b\u0435 \u0432\u0438\u0441\u043e\u043a\u043e\u0441\u043d\u043e\u0433\u043e \u0433\u043e\u0434\u0430     NeedCorrectLeapYear BOOLEAN := (TO_CHAR(vBegin,'dd.mm') = '28.02') AND (TO_CHAR(vBegin,'mm') = TO_CHAR(vBegin + 1,'mm'));   BEGIN     --\u0414\u043e\u0433\u043e\u0432\u043e\u0440 \u043c\u043e\u0436\u0435\u0442 \u0437\u0430\u043a\u043e\u043d\u0447\u0438\u0442\u044c\u0441\u044f \u0432 \u0442\u043e\u043c \u0436\u0435 \u043c\u0435\u0441\u044f\u0446\u0435, \u043d\u043e \u0447\u0435\u0440\u0435\u0437 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0434\u043d\u0435\u0439. \u0414\u043e\u0431\u0430\u0432\u0438\u043c \u043c\u0435\u0441\u044f\u0446.     IF TRUNC(vMonths) &lt; vMonths THEN       vMonths := TRUNC(vMonths)+1;     END IF;     FOR cMonth IN 1..vMonths     LOOP       IF MOD(cMonth - 1, 12) = 0 THEN         vPeriod.pbeg := add_months(vBegin, cMonth - 1);         vPeriod.pend := add_months(vPeriod.pbeg, 12) - 1;         IF vPeriod.pend > pend THEN           vPeriod.pend := pend;         END IF;         IF (NeedCorrectLeapYear AND (TO_CHAR(vPeriod.pend,'dd.mm') = '28.02'))         THEN           vPeriod.pend := vPeriod.pend - 1;         END IF;         vResult.extend;         vResult(vResult.last) := vPeriod;       END IF;     END LOOP;      RETURN vResult;   END CalcPeriods;<\/code><\/pre>\n<p>\u0422\u0435\u0441\u0442\u044b<\/p>\n<pre><code class=\"sql\">  \/**   * ========================================================================&lt;br\/>   * \u041f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0432\u044b\u0437\u043e\u0432\u0430 \u043c\u0435\u0442\u043e\u0434\u0430 CalcPeriods \u043f\u043e-\u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e&lt;br\/>   * ========================================================================&lt;br\/>   * @param pDateBeg   - \u0414\u0430\u0442\u0430 \u043d\u0430\u0447\u0430\u043b\u0430 \u043f\u0435\u0440\u0438\u043e\u0434\u0430   * @param pAddMonths - \u0414\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u043f\u0435\u0440\u0438\u043e\u0434\u0430 \u0432 \u043c\u0435\u0441\u044f\u0446\u0430\u0445   * @return           - \u0417\u0430\u043f\u0438\u0441\u044c \u0442\u0438\u043f\u0430 TPERIOD \u0441 \u0434\u0430\u043d\u043d\u044b\u043c\u0438 \u043f\u0435\u0440\u0438\u043e\u0434\u0430   * ! \u0412\u0430\u0436\u043d\u043e - \u041f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 Oracle Add_months, \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0434\u043b\u044f 29.02 \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u0447\u043d\u043e   *\/   FUNCTION GetDefaultValues (pDateBeg   IN DATE    DEFAULT TRUNC(SYSDATE),                              pAddMonths IN INTEGER DEFAULT 12) RETURN TPERIOD   IS     vResult TPERIOD;   BEGIN     vResult.pBeg := pDateBeg;     vResult.pEnd := Add_months(vResult.pBeg, pAddMonths) - 1;     RETURN vResult;   END GetDefaultValues;    \/**   * ========================================================================&lt;br\/>   * \u0421\u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u0442\u044c CLOB \u043f\u043e \u043f\u0435\u0440\u0438\u043e\u0434\u0443&lt;br\/>   * ========================================================================&lt;br\/>   * @param pPeriod - \u0422\u0438\u043f \u0441 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0435\u0439 \u043f\u043e \u043f\u0435\u0440\u0438\u043e\u0434\u0443   * @return        - \u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 CLOB \u0441 \u0434\u0430\u043d\u043d\u044b\u043c\u0438   *\/   FUNCTION getPeriodClob(pPeriod IN TPERIOD     ) RETURN CLOB   IS   BEGIN     RETURN TO_CLOB('&lt;PERIOD>'||                    '&lt;DATEBEGIN>'||TO_CHAR(pPeriod.pbeg, 'DD.MM.YYYY')||'&lt;\/DATEBEGIN>'||                    '&lt;DATEEND>'||TO_CHAR(pPeriod.pend, 'DD.MM.YYYY')||'&lt;\/DATEEND>'||                    '&lt;\/PERIOD>');   END getPeriodClob;    \/**   * ========================================================================&lt;br\/>   * \u0421\u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u0442\u044c CLOB \u043f\u043e \u043f\u0435\u0440\u0438\u043e\u0434\u0443 (reload)&lt;br\/>   * ========================================================================&lt;br\/>   * @param pBeg - \u0414\u0430\u0442\u0430 \u043d\u0430\u0447\u0430\u043b\u0430 \u043f\u0435\u0440\u0438\u043e\u0434\u0430   * @param pBeg - \u0414\u0430\u0442\u0430 \u043e\u043a\u043e\u043d\u0447\u0430\u043d\u0438\u044f \u043f\u0435\u0440\u0438\u043e\u0434\u0430   * @return     - \u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 CLOB \u0441 \u0434\u0430\u043d\u043d\u044b\u043c\u0438   *\/   FUNCTION getPeriodClob(pBeg IN DATE, pEnd IN DATE) RETURN CLOB   IS     vPeriod TPERIOD;   BEGIN     vPeriod.pBeg := pBeg;     vPeriod.pEnd := pEnd;     RETURN getPeriodClob(vPeriod);   END getPeriodClob;    \/**   * ========================================================================&lt;br\/>   * \u0422\u0435\u0441\u0442 \u0440\u0430\u0437\u0431\u0438\u0435\u043d\u0438\u044f \u043f\u0435\u0440\u0438\u043e\u0434\u0430 \u043d\u0430 1 \u0433\u043e\u0434&lt;br\/>   * ========================================================================&lt;br\/>   *\/   PROCEDURE PER_1YEAR   IS     vDefPeriod TPERIOD;     vPeriods   TPERIODTABLE;     vRes       XMLType;     vResOK     XMLType;   BEGIN     vDefPeriod := GetDefaultValues(pDateBeg => TO_DATE('01.01.2020', 'DD.MM.YYYY'));     vResOK     := XMLTYPE('&lt;PERIODS>'||getPeriodClob(pPeriod => vDefPeriod)||'&lt;\/PERIODS>');     vPeriods   := CalcPeriods  (pBegin => vDefPeriod.pbeg, pEnd => vDefPeriod.pend,);     vRes       := getPeriodsXML(pPeriods => vPeriods);          UNITTEST.CheckTestResult('PER_1YEAR', vRes, vResOK);   END PER_1YEAR;    \/**   * ========================================================================&lt;br\/>   * \u0422\u0435\u0441\u0442 \u0440\u0430\u0437\u0431\u0438\u0435\u043d\u0438\u044f \u043f\u0435\u0440\u0438\u043e\u0434\u0430 \u043d\u0430 2 \u0433\u043e\u0434\u0430&lt;br\/>   * ========================================================================&lt;br\/>   *\/   PROCEDURE PER_2YEAR   IS     vDefPeriod TPERIOD;     vPeriods   TPERIODTABLE;     vOkPeriods TPERIODTABLE;     vRes       XMLType;     vResOK     XMLType;   BEGIN     vDefPeriod := GetDefaultValues(pDateBeg => TO_DATE('01.01.2020', 'DD.MM.YYYY'), pAddMonths => 24);     -- \u041e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c \u0434\u0430\u0442\u044b \u0438\u043d\u0442\u0435\u0440\u0432\u0430\u043b\u043e\u0432     Select T.dBeg, T.dEnd Bulk Collect Into vOkPeriods     From (       Select vDefPeriod.pbeg As dBeg, TO_DATE('31.12.2020', 'DD.MM.YYYY') As dEnd From Dual       Union All       Select TO_DATE('01.01.2021', 'DD.MM.YYYY'), vDefPeriod.pEnd From Dual       ) T;     vResOK   := getPeriodsXML(pPeriods => vOkPeriods);     vPeriods := CalcPeriods  (pBegin => vDefPeriod.pbeg, pEnd => vDefPeriod.pend);     vRes     := getPeriodsXML(pPeriods => vPeriods);     UNITTEST.CheckTestResult('PER_2YEAR', vRes, vResOK);   END PER_2YEAR;    \/**   * ========================================================================&lt;br\/>   * \u0422\u0435\u0441\u0442 \u0440\u0430\u0437\u0431\u0438\u0435\u043d\u0438\u044f \u043f\u0435\u0440\u0438\u043e\u0434\u0430 \u043d\u0430 400 \u0434\u043d\u0435\u0439&lt;br\/>   * ========================================================================&lt;br\/>   *\/   PROCEDURE PER_400DAYS   IS     vDefPeriod TPERIOD;     vPeriods   TPERIODTABLE;     vOkPeriods TPERIODTABLE;     vRes       XMLType;     vResOK     XMLType;   BEGIN     vDefPeriod := GetDefaultValues(pDateBeg => TO_DATE('17.01.2020', 'DD.MM.YYYY'), pAddMonths => 12);     vDefPeriod.pend := vDefPeriod.pbeg + 400;     -- \u041e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c \u0434\u0430\u0442\u044b \u0438\u043d\u0442\u0435\u0440\u0432\u0430\u043b\u043e\u0432     Select T.dBeg, T.dEnd Bulk Collect Into vOkPeriods     From (       Select vDefPeriod.pbeg As dBeg, TO_DATE('16.01.2021', 'DD.MM.YYYY') As dEnd From Dual       Union All       Select TO_DATE('17.01.2021', 'DD.MM.YYYY'), vDefPeriod.pEnd From Dual       ) T;     vResOK   := getPeriodsXML(pPeriods => vOkPeriods);     vPeriods := CalcPeriods  (pBegin => vDefPeriod.pbeg, pEnd => vDefPeriod.pend);     vRes     := getPeriodsXML(pPeriods => vPeriods);     UNITTEST.CheckTestResult('PER_400DAYS', vRes, vResOK);   END PER_400DAYS;    \/**   * ========================================================================&lt;br\/>   * \u0422\u0435\u0441\u0442 \u0440\u0430\u0437\u0431\u0438\u0435\u043d\u0438\u044f \u043f\u0435\u0440\u0438\u043e\u0434\u0430 \u043d\u0430 4 \u0433\u043e\u0434\u0430(40 \u043c\u0435\u0441\u044f\u0446\u0435\u0432)&lt;br\/>   * ========================================================================&lt;br\/>   *\/   PROCEDURE PER_40MONTHS   IS     vDefPeriod TPERIOD;     vPeriods   TPERIODTABLE;     vOkPeriods TPERIODTABLE;     vRes       XMLType;     vResOK     XMLType;   BEGIN     vDefPeriod := GetDefaultValues(pDateBeg => TO_DATE('01.01.2020', 'DD.MM.YYYY'), pAddMonths => 40);      -- \u041e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c \u0434\u0430\u0442\u044b \u0438\u043d\u0442\u0435\u0440\u0432\u0430\u043b\u043e\u0432     Select T.dBeg, T.dEnd Bulk Collect Into vOkPeriods     From (       Select vDefPeriod.pbeg As dBeg, TO_DATE('31.12.2020', 'DD.MM.YYYY') As dEnd From Dual       Union All       Select TO_DATE('01.01.2021', 'DD.MM.YYYY'), TO_DATE('31.12.2021', 'DD.MM.YYYY') From Dual       Union All       Select TO_DATE('01.01.2022', 'DD.MM.YYYY'), TO_DATE('31.12.2022', 'DD.MM.YYYY') From Dual       Union All       Select TO_DATE('01.01.2023', 'DD.MM.YYYY'), vDefPeriod.pEnd From Dual       ) T;     vResOK := getPeriodsXML(pPeriods => vOkPeriods);     vPeriods := CalcPeriods  (pBegin => vDefPeriod.pbeg, pEnd => vDefPeriod.pend);     vRes     := getPeriodsXML(pPeriods => vPeriods);     UNITTEST.CheckTestResult('PER_40MONTHS', vRes, vResOK);   END PER_40MONTHS;    \/**   * ========================================================================&lt;br\/>   * \u0422\u0435\u0441\u0442 \u0440\u0430\u0437\u0431\u0438\u0435\u043d\u0438\u044f \u043f\u0435\u0440\u0438\u043e\u0434\u0430 \u043d\u0430 3 \u0433\u043e\u0434\u0430 c 27.02 \u043f\u0440\u0435\u0434 \u0432\u0438\u0441\u043e\u043a\u043e\u0441\u043d\u043e\u0433\u043e \u0433\u043e\u0434\u0430&lt;br\/>   * ========================================================================&lt;br\/>   *\/   PROCEDURE PER_3YEAR_2702   IS     vDefPeriod TPERIOD;     vPeriods TPERIODTABLE;     vOkPeriods TPERIODTABLE;          vRes   XMLType;     vResOK XMLType;   BEGIN     vDefPeriod := GetDefaultValues(pDateBeg => TO_DATE('27.02.2023', 'DD.MM.YYYY'), pAddMonths => 36);      -- \u041e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c \u0434\u0430\u0442\u044b \u0438\u043d\u0442\u0435\u0440\u0432\u0430\u043b\u043e\u0432     Select T.dBeg, T.dEnd Bulk Collect Into vOkPeriods     From (       Select vDefPeriod.pbeg As dBeg, TO_DATE('26.02.2024', 'DD.MM.YYYY') As dEnd From Dual       Union All       Select TO_DATE('27.02.2024', 'DD.MM.YYYY'), TO_DATE('26.02.2025', 'DD.MM.YYYY') From Dual       Union All       Select TO_DATE('27.02.2025', 'DD.MM.YYYY'), vDefPeriod.pEnd From Dual       ) T;     vResOK   := getPeriodsXML(pPeriods => vOkPeriods);     vPeriods := CalcPeriods  (pBegin => vDefPeriod.pbeg, pEnd => vDefPeriod.pend);     vRes     := getPeriodsXML(pPeriods => vPeriods);     UNITTEST.CheckTestResult('PER_3YEAR_2702', vRes, vResOK);   END PER_3YEAR_2702;    \/**   * ========================================================================&lt;br\/>   * \u0422\u0435\u0441\u0442 \u0440\u0430\u0437\u0431\u0438\u0435\u043d\u0438\u044f \u043f\u0435\u0440\u0438\u043e\u0434\u0430 \u043d\u0430 3 \u0433\u043e\u0434\u0430 c 28.02 \u043f\u0440\u0435\u0434 \u0432\u0438\u0441\u043e\u043a\u043e\u0441\u043d\u043e\u0433\u043e \u0433\u043e\u0434\u0430&lt;br\/>   * ========================================================================&lt;br\/>   *\/   PROCEDURE PER_3YEAR_2802   IS     vDefPeriod TPERIOD;     vPeriods   TPERIODTABLE;     vOkPeriods TPERIODTABLE;     vRes       XMLType;     vResOK     XMLType;   BEGIN     vDefPeriod := GetDefaultValues(pDateBeg => TO_DATE('28.02.2023', 'DD.MM.YYYY'), pAddMonths => 36);     -- \u041e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c \u0434\u0430\u0442\u044b \u0438\u043d\u0442\u0435\u0440\u0432\u0430\u043b\u043e\u0432     Select T.dBeg, T.dEnd Bulk Collect Into vOkPeriods     From (       Select vDefPeriod.pbeg As dBeg, TO_DATE('28.02.2024', 'DD.MM.YYYY') As dEnd From Dual       Union All       Select TO_DATE('29.02.2024', 'DD.MM.YYYY'), TO_DATE('27.02.2025', 'DD.MM.YYYY') From Dual       Union All       Select TO_DATE('28.02.2025', 'DD.MM.YYYY'), vDefPeriod.pEnd From Dual       ) T;     vResOK   := getPeriodsXML(pPeriods => vOkPeriods);     vPeriods := CalcPeriods  (pBegin => vDefPeriod.pbeg, pEnd => vDefPeriod.pend);     vRes     := getPeriodsXML(pPeriods => vPeriods);     UNITTEST.CheckTestResult('PER_3YEAR_2802', vRes, vResOK);   END PER_3YEAR_2802;<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<details class=\"spoiler\">\n<summary>\u041f\u0440\u0438\u043c\u0435\u0440 UT#2<\/summary>\n<div class=\"spoiler__content\">\n<p>\u041f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c\u044b\u0439 \u043c\u0435\u0442\u043e\u0434<\/p>\n<pre><code class=\"sql\">  \/**   * ========================================================================&lt;br\/>   * \u0421\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435 \u0432\u043d\u0435\u0448\u043d\u0438\u0445 \u0441\u0441\u044b\u043b\u043e\u043a \u043d\u0430 \u043e\u0431\u044a\u0435\u043a\u0442\u044b &lt;br\/>   * ========================================================================&lt;br\/>   * @param pList      - CLOB \u0441 \u0434\u0430\u043d\u043d\u044b\u043c\u0438 \u0432 \u0444\u043e\u0440\u043c\u0430\u0442\u0435 JSON \u0441\u043e \u0441\u043f\u0438\u0441\u043a\u043e\u043c GUID   * @return           - \u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 (1 - \u043d\u0435\u0442 \u043e\u0448\u0438\u0431\u043e\u043a, -1 - \u043e\u0448\u0438\u0431\u043a\u0430)   *\/   FUNCTION SaveExternalLink(pJSON IN CLOB) RETURN NUMBER   IS     vResult NUMBER(1) := 1;   BEGIN     IF pJSON IS NULL THEN        RETURN vResult;     END IF;     BEGIN       Insert Into Message M         (ClassName, InsNumber, ExternalID)       Select Distinct J.ClassName, J.InsNumber, J.ExternalID       From JSON_Table(pJSON, '$.objects[*]'                         Columns(ClassName    Varchar2(32)   path '$.name',                                 InsNumber    Number         path '$.insNumber',                                 ExternalID   Varchar2(4000) path '$.externalID')) J       Where J.ClassName Is Not Null          And J.InsNumber Is Not Null          And J.GUID      Is Not Null         And Not Exists           (Select Null From Message Me            Where ME.ExternalID = J.ExternalID Or              (J.ClassName Is Not Null And                ME.ClassName = J.ClassName And               ME.InsNumber = J.InsNumber)           );     EXCEPTION       WHEN OTHERS THEN         vResult := -1;     END;     RETURN vResult;   END SaveExternalLink;<\/code><\/pre>\n<p>\u0422\u0435\u0441\u0442\u044b<\/p>\n<pre><code class=\"sql\">  \/**   * ========================================================================&lt;br\/>   * \u0421\u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u0442\u044c CLOB \u043f\u043e \u043e\u0431\u044a\u0435\u043a\u0442\u0443 &lt;br\/>   * ========================================================================&lt;br\/>   * @param pClassName  - \u041a\u043b\u0430\u0441\u0441 \u043e\u0431\u044a\u0435\u043a\u0442\u0430   * @param pInsNumber  - \u041d\u043e\u043c\u0435\u0440 \u0437\u0430\u044f\u0432\u043a\u0438   * @param pExternalID - \u0417\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0432\u043d\u0435\u0448\u043d\u0435\u0439 \u0441\u0441\u044b\u043b\u043a\u0438   * @return            - \u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 CLOB \u0441 \u0434\u0430\u043d\u043d\u044b\u043c\u0438   *\/   FUNCTION getObjectClob(pClassName IN VARCHAR2,                           pInsNumber IN VARCHAR2,                           pExternalID      IN VARCHAR2) RETURN CLOB   IS   BEGIN     RETURN TO_CLOB('&lt;OBJECT>'||                    '&lt;CLASSNAME>'||pClassName||'&lt;\/CLASSNAME>'||                    '&lt;INSNUMBER>'||pInsNumber||'&lt;\/INSNUMBER>'||                    '&lt;EXTERNALID>'||pExternalID||'&lt;\/EXTERNALID>'||                    '&lt;\/OBJECT>');   END getObjectClob;    \/**   * ========================================================================&lt;br\/>   * \u0421\u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u0442\u044c XML \u0441\u043e \u0441\u043f\u0438\u0441\u043a\u043e\u043c \u0432\u043d\u0435\u0448\u0438\u0445 \u0441\u0441\u044b\u043b\u043e\u043a \u043f\u043e \u043d\u043e\u043c\u0435\u0440\u0443 \u0437\u0430\u044f\u0432\u043a\u0438 &lt;br\/>   * ========================================================================&lt;br\/>   * @param pInsNumber - \u0421\u043f\u0438\u0441\u043e\u043a \u043d\u043e\u043c\u0435\u0440\u043e\u0432 \u0437\u0430\u044f\u0432\u043e\u043a   * @return           - XML \u0441 \u0434\u0430\u043d\u043d\u044b\u043c\u0438   *\/   FUNCTION getObjectsXMLByInsNum(pInsNumber IN TNUM) RETURN XMLType   IS     vResult CLOB;   BEGIN     IF pInsNumber.Count > 0 THEN       FOR vCur IN (Select M.ClassName, M.InsNumber, M.ExternalID                    From Message M, Table(pInsNumber) R                    Where M.InsNumber = R.column_value                    Order By ClassName, InsNumber)       LOOP         vResult := vResult || getObjectClob(vCur.ClassName, vCur.InsNumber, vCur.ExternalID);       END LOOP;     END IF;      RETURN XMLTYPE('&lt;OBJECTS>'||vResult||'&lt;\/OBJECTS>');   END getObjectsXMLByInsNum;     \/**   * ========================================================================&lt;br\/>   * \u0421\u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u0442\u044c XML \u0441\u043e \u0441\u043f\u0438\u0441\u043a\u043e\u043c \u0432\u043d\u0435\u0448\u0438\u0445 \u0441\u0441\u044b\u043b\u043e\u043a \u043f\u043e \u043d\u043e\u043c\u0435\u0440\u0443 \u0437\u0430\u044f\u0432\u043a\u0438 &lt;br\/>   * ========================================================================&lt;br\/>   * @param pXML - XML \u0441 \u0434\u0430\u043d\u043d\u044b\u043c\u0438   * @return     - CLOB \u0444\u043e\u0440\u043c\u0430\u0442\u0430 JSON \u0441 \u0434\u0430\u043d\u043d\u044b\u043c\u0438   *\/   FUNCTION ConvertXMLToJSONClob(pXML IN XMLTYPE) RETURN CLOB   IS     vResult CLOB;   BEGIN     IF pXML IS NULL THEN       RETURN vResult;     END IF;     Select JSON_Object(Key 'objects' Value        JSON_ArrayAgg(                JSON_Object(Key 'className' Value X.ClassName,                            Key 'insNumber' Value X.InsNumber,                            Key 'externalID' Value X.ExternalID)                Order by X.InsNumber, X.ClassName                Returning VarChar2(32000)))       Into vResult       From XMLTable('\/OBJECTS\/OBJECT' Passing pXML Columns                       ClassName    Path 'CLASSNAME',                       InsNumber    Path 'INSNUMBER',                       ExternalID   Path 'EXTERNALID')X;     RETURN vResult;   END ConvertXMLToJSONClob;    \/**   * ========================================================================&lt;br\/>   * \u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435 \u0441\u043f\u0438\u0441\u043a\u0430 ExternalID \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0430\u043d\u0438\u0438 XML (OK) &lt;br\/>   * ========================================================================&lt;br\/>   * @param pTarget      - CLOB \u0441 \u0434\u0430\u043d\u043d\u044b\u043c\u0438 \u0434\u043b\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438   * @param pList        - CLOB \u0441 \u0434\u0430\u043d\u043d\u044b\u043c\u0438 \u0434\u043b\u044f \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438   * @param pInsNumber   - \u041d\u043e\u043c\u0435\u0440 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c\u043e\u0439 \u0437\u0430\u044f\u0432\u043a\u0438   * @param pTestCaption - \u041d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u0442\u0435\u0441\u0442\u0430   *\/     PROCEDURE SaveExternalID_ByXML(pTarget       IN CLOB,                                  pList         IN CLOB,                                  pInsNumber    IN TNUM,                                  pTestCaption  IN VARCHAR2)   IS     vRes         XMLType;     vResOK       XMLType := XMLTYPE('&lt;OBJECTS>'||pTarget||'&lt;\/OBJECTS>');     vList        CLOB    := ConvertXMLToJSONClob(XMLTYPE('&lt;OBJECTS>'||pList||'&lt;\/OBJECTS>'));     vResult      NUMBER;   BEGIN     SAVEPOINT SP;     BEGIN       vResult:= SaveExternalLink(pJSON => vList);       vRes   := getObjectsXMLByInsNum(pInsNumber => pInsNumber);     EXCEPTION       WHEN OTHERS THEN         vRes := XMLType('&lt;ERR>' || RegExp_replace(SQLERRM, '(.)([\\(|\\[].*)', '\\1') || '&lt;\/ERR>');     END;     ROLLBACK TO SP;     UNITTEST.CheckTestResult(pTestCaption, vRes, vResOK);   END SaveExternalID_ByXML;    \/**   * ========================================================================&lt;br\/>   * \u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435 \u0441\u043f\u0438\u0441\u043a\u0430 ExternalID \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0430\u043d\u0438\u0438 XML (OK) &lt;br\/>   * ========================================================================&lt;br\/>   * @param pList        - CLOB \u0441 \u0434\u0430\u043d\u043d\u044b\u043c\u0438 \u0434\u043b\u044f \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438   * @param pErrCode     - \u041a\u043e\u0434 \u043e\u0436\u0438\u0434\u0430\u0435\u043c\u043e\u0439 \u043e\u0448\u0438\u0431\u043a\u0438   * @param pTestCaption - \u041d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u0442\u0435\u0441\u0442\u0430   *\/     PROCEDURE SaveExternalID_ByXML_Raise(pList        IN CLOB,                                        pErrCode     IN VARCHAR2,                                        pTestCaption IN VARCHAR2     )   IS     vRes         XMLType := XMLTYPE('&lt;OBJECTS>NOT OK&lt;\/OBJECTS>');     vResOK       XMLType := XMLTYPE('&lt;OBJECTS>Correct error&lt;\/OBJECTS>');     vList        CLOB    := ConvertXMLToJSONClob(XMLTYPE('&lt;OBJECTS>'||pList||'&lt;\/OBJECTS>'));     vResult      NUMBER;   BEGIN     SAVEPOINT SP;     BEGIN       vResult:= SaveExternalLink(pJSON => vList);     EXCEPTION       WHEN OTHERS THEN         IF INSTR(SQLERRM, pErrCode) > 0 THEN           vRes := vResOK;         ELSE           vRes := XMLType('&lt;ERR>' || RegExp_replace(SQLERRM, '(.)([\\(|\\[].*)', '\\1') || '&lt;\/ERR>');         END IF;     END;     ROLLBACK TO SP;     UNITTEST.CheckTestResult(pTestCaption, vRes, vResOK);   END SaveExternalID_ByXML_Raise;    \/**   * ========================================================================&lt;br\/>   * \u0421\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435 NULL-\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f (OK) &lt;br\/>   * ========================================================================&lt;br\/>   *\/     PROCEDURE SaveExternalID_NullList_OK   IS     vInsNumber NUMBER;   BEGIN     SaveExternalID_ByXML(pTarget      => NULL,                          pList        => NULL,                          pInsNumber   => TNum(vInsNumber),                          pTestCaption => '\u0421\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435 NULL-\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f (OK)');   END SaveExternalID_NullList_OK;    \/**   * ========================================================================&lt;br\/>   * \u0421\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435 \u043f\u0443\u0441\u0442\u043e\u0433\u043e \u0441\u043f\u0438\u0441\u043a\u0430 ExternalID (OK) &lt;br\/>   * ========================================================================&lt;br\/>   *\/     PROCEDURE SaveExternalID_EmptyList_OK   IS     vInsNumber NUMBER;   BEGIN     SaveExternalID_ByXML(pTarget      => NULL,                          pList        => NULL,                          pInsNumber   => TNum(vInsNumber),                          pTestCaption => '\u0421\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435 \u043f\u0443\u0441\u0442\u043e\u0433\u043e \u0441\u043f\u0438\u0441\u043a\u0430 (OK)');   END SaveExternalID_EmptyList_OK;    \/**   * ========================================================================&lt;br\/>   * \u0421\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435 \u0441\u043f\u0438\u0441\u043a\u0430 ExternalID \u0438\u0437 1 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430 \u043f\u043e \u0437\u0430\u044f\u0432\u043a\u0435 (\u0442\u0438\u043f \u043d\u0435 \u0437\u0430\u043f\u043e\u043b\u043d\u0435\u043d) (OK)  &lt;br\/>   * ========================================================================&lt;br\/>   *\/     PROCEDURE SaveExternalID_1Elem_EmptyClass_OK   IS     vInsNumber NUMBER;     vList      CLOB   := getObjectClob(NULL, 12345, 'e65f9824-90f2-7da9-99f0-a23418a3e980');   BEGIN     SaveExternalID_ByXML(pTarget      => NULL,                          pList        => vList,                          pInsNumber   => TNum(vInsNumber),                           pTestCaption => '\u0421\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435 \u0441\u043f\u0438\u0441\u043a\u0430 ExternalID \u0438\u0437 1 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430 \u043f\u043e \u0437\u0430\u044f\u0432\u043a\u0435 (\u0442\u0438\u043f \u043d\u0435 \u0437\u0430\u043f\u043e\u043b\u043d\u0435\u043d)(OK)');   END SaveExternalID_1Elem_EmptyClass_OK;    \/**   * ========================================================================&lt;br\/>   * \u0421\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435 \u0441\u043f\u0438\u0441\u043a\u0430 ExternalID \u0438\u0437 1 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430 \u043f\u043e \u0437\u0430\u044f\u0432\u043a\u0435 (\u043d\u0435\u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u044b\u0439 \u0442\u0438\u043f) (ERR)  &lt;br\/>   * ========================================================================&lt;br\/>   *\/     PROCEDURE SaveExternalID_1Elem_IncClass_ERR   IS     vInsNumber NUMBER := 12345;     vList      CLOB   := getObjectClob('TESTERR', vInsNumber, 'e65f9824-90f2-7da9-99f0-a23418a3e980');   BEGIN     SaveExternalID_ByXML_Raise(pList        => vList,                                pErrCode     => 'ERROR_CODE_1',                                 pTestCaption => '\u0421\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435 \u0441\u043f\u0438\u0441\u043a\u0430 ExternalID \u0438\u0437 1 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430 \u043f\u043e \u0437\u0430\u044f\u0432\u043a\u0435 (\u043d\u0435\u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u044b\u0439 \u0442\u0438\u043f)(ERR)');   END SaveExternalID_1Elem_IncClass_ERR;    \/**   * ========================================================================&lt;br\/>   * \u0421\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435 \u0441\u043f\u0438\u0441\u043a\u0430 ExternalID \u0438\u0437 1 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430 \u0441 \u043d\u0435\u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u044b\u043c \u043d\u043e\u043c\u0435\u0440\u043e\u043c \u0437\u0430\u044f\u0432\u043a\u0438 (OK)&lt;br\/>   * ========================================================================&lt;br\/>   *\/     PROCEDURE SaveExternalID_1Elem_IncIN_OK   IS     vInsNumber NUMBER;     vList      CLOB   := getObjectClob('TYPE_1', '12345_SS', 'e65f9824-90f2-7da9-99f0-a23418a3e980');   BEGIN     SaveExternalID_ByXML(pTarget      => NULL,                          pList        => vList,                          pInsNumber   => TNum(vInsNumber),                           pTestCaption => '\u0421\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435 \u0441\u043f\u0438\u0441\u043a\u0430 ExternalID \u0438\u0437 1 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430 \u0441 \u043d\u0435\u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u044b\u043c \u043d\u043e\u043c\u0435\u0440\u043e\u043c \u0437\u0430\u044f\u0432\u043a\u0438 (OK)');   END SaveExternalID_1Elem_IncIN_OK;<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<h2>\u0420\u0435\u0437\u044e\u043c\u0435<\/h2>\n<p>\u041a\u0430\u043a \u0432\u0438\u0434\u043d\u043e, \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u0435\u043c\u044b\u0435 \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0438 \u043d\u0435 \u0442\u0440\u0435\u0431\u0443\u044e\u0442 \u0431\u043e\u043b\u044c\u0448\u0438\u0445 \u0443\u0441\u0438\u043b\u0438\u0439 \u0432 \u0447\u0430\u0441\u0442\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f, \u043d\u043e \u043e\u0447\u0435\u043d\u044c \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u044b. \u041a\u0440\u0438\u0442\u0435\u0440\u0438\u0439 \u0438\u0445 \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u2013 \u00ab\u043a\u0430\u043a \u0431\u044b\u0441\u0442\u0440\u043e \u0441\u043c\u043e\u0433\u0443 \u043f\u043e\u0447\u0438\u043d\u0438\u0442\u044c \u0443\u043f\u0430\u0432\u0448\u0438\u0439 \u0438\u0437-\u0437\u0430 \u043c\u043e\u0438\u0445 \u0434\u043e\u0440\u0430\u0431\u043e\u0442\u043e\u043a \u043f\u0440\u043e\u0434\u00bb. \u0411\u0443\u0434\u0443 \u043f\u0440\u0438\u0437\u043d\u0430\u0442\u0435\u043b\u0435\u043d \u0432 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u044f\u0445 \u0437\u0430 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u0434\u0440\u0443\u0433\u0438\u0445 \u0442\u0435\u0445\u043d\u0438\u043a, \u043c\u0438\u043d\u0438\u043c\u0438\u0437\u0438\u0440\u0443\u044e\u0449\u0438\u0445 \u043e\u0448\u0438\u0431\u043a\u0443 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430.<\/p>\n<\/p>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"v-portal\" style=\"display:none;\"><\/div>\n<\/div>\n<p> <!----> <!----><br \/> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/post\/676710\/\"> https:\/\/habr.com\/ru\/post\/676710\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<div><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<figure class=\"bordered full-width\"><figcaption>\u0412\u0441\u044f\u043a\u0438\u0439 \u0434\u0436\u0443\u043d, \u0432 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u0441\u0432\u043e\u0435\u0433\u043e \u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u043a\u043b\u0430\u0434\u0435\u0442 \u043f\u0440\u043e\u0434. \u0412\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u044d\u0442\u043e \u043f\u043e-\u0440\u0430\u0437\u043d\u043e\u043c\u0443: \u043e\u0442 \u043f\u043e\u043b\u043d\u043e\u0439 \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 \u0440\u0430\u0431\u043e\u0442\u044b \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438, \u0434\u043e \u0430\u043d\u043e\u043c\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0432\u0441\u043f\u043b\u0435\u0441\u043a\u0430 \u043d\u0430 \u0434\u0430\u0448\u0431\u043e\u0440\u0434\u0430\u0445 \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433\u0430. \u0412 \u0441\u0442\u0430\u0442\u044c\u0435 \u043f\u043e\u043a\u0430\u0436\u0443 \u0440\u044f\u0434 \u043f\u0440\u043e\u0441\u0442\u044b\u0445 \u0438 \u043e\u0447\u0435\u0432\u0438\u0434\u043d\u044b\u0445 \u043f\u043e\u0434\u0445\u043e\u0434\u043e\u0432 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u0432, \u043f\u043e\u043c\u043e\u0433\u0430\u044e\u0449\u0438\u0445 \u0443\u043c\u0435\u043d\u044c\u0448\u0438\u0442\u044c \u0446\u0435\u043d\u0443 \u043e\u0448\u0438\u0431\u043a\u0438 \u043d\u0430 \u043f\u0440\u043e\u0434\u0435. \u041f\u0440\u043e\u0432\u0435\u0440\u0435\u043d\u043e \u043d\u0430 \u0441\u0435\u0431\u0435)<\/figcaption><\/figure>\n<h2>\u041e\u0431 \u0430\u0432\u0442\u043e\u0440\u0435<\/h2>\n<p>\u0412\u0441\u0435\u043c \u043f\u0440\u0438\u0432\u0435\u0442. \u041c\u0435\u043d\u044f \u0437\u043e\u0432\u0443\u0442 \u041a\u0438\u0440\u0438\u043b\u043b. \u0417\u0430 10 \u043b\u0435\u0442 \u0432 \u0441\u0442\u0440\u0430\u0445\u043e\u0432\u043e\u0439 \u043e\u0442\u0440\u0430\u0441\u043b\u0438 \u043f\u0440\u043e\u0448\u0435\u043b \u043f\u0443\u0442\u044c \u043e\u0442 IT-\u044d\u043d\u0438\u043a\u0435\u0439\u0449\u0438\u043a\u0430 \u0434\u043e \u0422\u0438\u043c\u041b\u0438\u0434\u0430 \u0433\u0440\u0443\u043f\u043f\u044b \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0441\u0442\u0440\u0430\u0445\u043e\u0432\u044b\u0445 \u043f\u0440\u043e\u0434\u0443\u043a\u0442\u043e\u0432 \u0430\u043a\u0432\u0438\u0437\u0438\u0446\u0438\u0438. \u0412 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u043f\u043e\u0434\u0435\u043b\u044e\u0441\u044c \u043f\u0440\u043e\u0441\u0442\u044b\u043c\u0438 \u043f\u0440\u0438\u0451\u043c\u0430\u043c\u0438 \u043f\u043e \u043f\u0435\u0440\u0435\u0448\u0430\u0433\u0438\u0432\u0430\u043d\u0438\u044e \u0447\u0435\u0440\u0435\u0437 \u043e\u0447\u0435\u0432\u0438\u0434\u043d\u044b\u0435 \u0433\u0440\u0430\u0431\u043b\u0438, \u0447\u0442\u043e\u0431\u044b \u0434\u0432\u0438\u0436\u0435\u043d\u0438\u0435 \u0447\u0435\u0440\u0435\u0437 \u0417\u043e\u043d\u0443 \u0416\u0438\u0437\u043d\u0435\u043d\u043d\u043e\u0433\u043e \u041e\u043f\u044b\u0442\u0430, \u041f\u043e\u043b\u0443\u0447\u0430\u0435\u043c\u0443\u044e \u0432 \u041f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u0431\u044b\u043b\u043e \u043c\u0435\u043d\u0435\u0435 \u0431\u043e\u043b\u0435\u0437\u043d\u0435\u043d\u043e. <\/p>\n<h2>\u041f\u0440\u0438\u0451\u043c\u044b<\/h2>\n<h3>1. \u0420\u0435\u0437\u0435\u0440\u0432\u043d\u0430\u044f \u043a\u043e\u043f\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445<\/h3>\n<details class=\"spoiler\">\n<summary>\u0411\u0430\u0439\u043a\u0430 \u0438\u0437 \u0436\u0438\u0437\u043d\u0438 #1<\/summary>\n<div class=\"spoiler__content\">\n<p><em>\u0420\u0435\u0448\u0438\u043b \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0441\u0442\u043e\u043b\u0431\u0435\u0446 \u043a \u0442\u0430\u0431\u043b\u0438\u0447\u043a\u0435 \u0432 Pervasive \u043d\u0430 \u043f\u0440\u043e\u0434\u0435. \u0420\u0430\u0437\u043c\u0435\u0440 \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u0432 \u0442\u043e\u043f 5 \u0431\u0430\u0437\u044b. \u0417\u0430\u043f\u0443\u0441\u0442\u0438\u043b \u043a\u043e\u043d\u0441\u043e\u043b\u044c\u043d\u0443\u044e \u0443\u0442\u0438\u043b\u0438\u0442\u0443 \u043f\u043e \u043f\u0435\u0440\u0435\u0441\u0442\u0440\u043e\u0439\u043a\u0435 \u0444\u0430\u0439\u043b\u0430 \u0434\u0430\u043d\u043d\u044b\u0445, \u043f\u043e\u0434\u043e\u0436\u0434\u0430\u043b \u043f\u043e\u043b\u0447\u0430\u0441\u0438\u043a\u0430 \u0438 \u0437\u0430\u043a\u0440\u044b\u043b \u2013 \u0434\u0443\u043c\u0430\u043b \u0437\u0430\u0432\u0438\u0441\u043b\u0430. \u0424\u0430\u0439\u043b \u0434\u0430\u043d\u043d\u044b\u0445 \u0442\u0430\u0431\u043b\u0438\u0446\u044b, \u043d\u0435\u043e\u0436\u0438\u0434\u0430\u043d\u043d\u043e (\u043a\u0430\u043a \u0436\u0435 \u0435\u0449\u0451) \u0441\u0442\u0430\u043b \u043d\u0435\u0432\u0430\u043b\u0438\u0434\u043d\u044b\u043c.<\/em><\/p>\n<p><em>\u041d\u043e\u0447\u044c, \u0441\u0435\u0440\u0432\u0430\u043a \u043d\u0430 \u0434\u0440\u0443\u0433\u043e\u043c \u043a\u043e\u043d\u0446\u0435 \u041c\u043e\u0441\u043a\u0432\u044b \u0432 \u0411\u0426, \u043d\u0435\u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0449\u0430\u044f \u043a\u043b\u044e\u0447\u0435\u0432\u0430\u044f \u0442\u0430\u0431\u043b\u0438\u0446\u0430 \u2013 \u0443\u0442\u0440\u043e\u043c \u0436\u0434\u0435\u0442 \u0440\u0430\u0437\u043d\u043e\u0441. \u0412 \u0441\u0443\u0434\u043e\u0440\u043e\u0436\u043d\u044b\u0445 \u043f\u043e\u043f\u044b\u0442\u043a\u0430\u0445 \u0432\u0441\u043f\u043e\u043c\u043d\u0438\u0442\u044c \u043f\u043e\u0440\u044f\u0434\u043e\u043a \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0439 \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442 \u043f\u043e\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u2013 \u0435\u0441\u0442\u044c \u0431\u044d\u043a\u0430\u043f! \u041f\u0440\u043e\u0446\u0435\u0441\u0441 \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u043f\u043e\u0449\u0435\u043a\u043e\u0442\u0430\u043b \u043d\u0435\u0440\u0432\u044b \u2013 \u00ab\u0430 \u0432\u0434\u0440\u0443\u0433 \u043d\u0435\u2026\u00bb, \u043d\u043e \u043e\u0431\u043e\u0448\u043b\u043e\u0441\u044c.<\/em><\/p>\n<p><em>\u00a0<\/em><\/p>\n<p><em>\u041f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e \u0441\u043b\u0443\u0447\u0430\u044f, \u0432\u044b\u0440\u0430\u0431\u043e\u0442\u0430\u043b \u0434\u043b\u044f \u0441\u0435\u0431\u044f 2 \u0436\u0435\u043b\u0435\u0437\u043d\u044b\u0445 \u043f\u0440\u0430\u0432\u0438\u043b\u0430:<\/em><\/p>\n<p><em>\u00a0&#8212; \u0414\u0435\u043b\u0430\u0439 \u0431\u0435\u043a\u0430\u043f\/\u0441\u043d\u0430\u043f\u0448\u043e\u0442 \u0432\u0441\u044f\u043a\u0438\u0439 \u0440\u0430\u0437 \u043f\u0435\u0440\u0435\u0434 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435\u043c (\u0434\u0430\u0436\u0435 \u0434\u043b\u044f \u043c\u0435\u043b\u043a\u043e\u0433\u043e update\u2019\u0430);<\/em><\/p>\n<p><em>\u00a0&#8212; \u041f\u0440\u043e\u0432\u0435\u0440\u044f\u0439 \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u043d\u0430 \u0434\u0440\u0443\u0433\u043e\u043c \u0438\u043d\u0441\u0442\u0430\u043d\u0441\u0435, \u0434\u043e \u0434\u0435\u043f\u043b\u043e\u044f \u043d\u0430 \u043f\u0440\u043e\u0434.<\/em><\/p>\n<\/div>\n<\/details>\n<p>\u0421\u0430\u043c\u044b\u0439 \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u0441\u043f\u043e\u0441\u043e\u0431 \u043f\u043e\u043c\u043e\u0447\u044c \u0437\u0430\u0432\u0442\u0440\u0430\u0448\u043d\u0435\u043c\u0443 \u0441\u0435\u0431\u0435 \u2013 \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0441\u043a\u0440\u0438\u043f\u0442\u044b \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445 \u043f\u0440\u0438 \u0438\u0445 \u043c\u043e\u0434\u0438\u0444\u0438\u0446\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0438 (Insert\/Update\/Delete).<\/p>\n<ul>\n<li>\n<p>\u0414\u043b\u044f \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 Delete \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0432\u044b\u0433\u0440\u0443\u0437\u0438\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435 \u0438\u0437 IDE \u2013 \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0430\u043d\u0438\u0438 Select\u2019\u0430 \u0444\u043e\u0440\u043c\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0434\u0430\u0442\u0430\u0441\u0435\u0442 \u0438 \u043f\u0440\u043e\u0441\u0442\u043e \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0432 \u0444\u0430\u0439\u043b\/\u043a\u044d\u0448 \u043a\u0430\u043a \u043d\u0430\u0431\u043e\u0440 Insert-\u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0432.<\/p>\n<p>\u0412\u0430\u0436\u043d\u043e \u0432\u044b\u0433\u0440\u0443\u0436\u0430\u0442\u044c <strong>\u0432\u0441\u0435<\/strong> \u0434\u0430\u043d\u043d\u044b\u0435 \u043f\u043e Foreign Keys, \u044f\u0432\u043d\u044b\u043c \u0438\u043b\u0438 \u043d\u0435\u0442, \u0432 \u0432\u0438\u0434\u0435 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0445 Insert-\u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0439. \u041e\u0441\u043e\u0431\u0435\u043d\u043d\u043e \u0447\u0443\u0432\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e, \u043a\u043e\u0433\u0434\u0430 \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u0441 \u0434\u0430\u043d\u043d\u044b\u043c\u0438 \u043a\u0430\u0441\u043a\u0430\u0434\u043d\u044b\u0435 \u043b\u0438\u0431\u043e \u0441\u043e \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u0447\u043d\u043e\u0439 \u043b\u043e\u0433\u0438\u043a\u043e\u0439 \u0432 API\/\u0442\u0440\u0438\u0433\u0433\u0435\u0440\u0430\u0445 \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u044f. \u0412\u0430\u0440\u0438\u0430\u043d\u0442\u044b \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u044b, \u043a\u043e\u0433\u0434\u0430 \u0432 Delete API \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d Insert\/update\/Post-\u0441\u0435\u0440\u0432\u0438\u0441\u044b \u0441\u0442\u043e\u0438\u0442 \u0440\u0430\u0441\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u0442\u044c \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e \u2013 \u0443 \u0434\u0430\u043d\u043d\u044b\u0445 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0440\u0430\u0437\u043d\u0430\u044f \u043a\u0440\u0438\u0442\u0438\u0447\u043d\u043e\u0441\u0442\u044c.<\/p>\n<\/li>\n<\/ul>\n<details class=\"spoiler\">\n<summary>\u041a\u0430\u043a \u044d\u0442\u043e \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0432 PL\\SQL Developer<\/summary>\n<div class=\"spoiler__content\">\n<figure class=\"full-width\"><figcaption><\/figcaption><\/figure>\n<\/p>\n<\/div>\n<\/details>\n<ul>\n<li>\n<p>\u0412\u0442\u043e\u0440\u043e\u0439 \u043f\u043e \u0441\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 DML \u2013 Insert. \u041c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0441\u043f\u0438\u0441\u043e\u043a Primary Keys (PK). \u0418\u043b\u0438 \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0437\u0430\u043f\u0440\u043e\u0441, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043e\u0442\u0431\u0435\u0440\u0451\u0442 \u0441\u043e\u0437\u0434\u0430\u043d\u043d\u044b\u0435 \u0437\u0430\u043f\u0438\u0441\u0438 \u043f\u043e \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u0447\u043d\u044b\u043c \u043c\u0430\u0440\u043a\u0435\u0440\u0430\u043c. \u041f\u0440\u0438 \u043d\u0430\u043b\u0438\u0447\u0438\u0438 \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0435 \u043f\u043e\u043b\u044f \u0441 \u0430\u0432\u0442\u043e\u0440\u043e\u043c \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f (CreatedBy), \u0434\u0430\u0442\u043e\u0439 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f, \u0438\u043b\u0438 \u0434\u0440\u0443\u0433\u0438\u043c \u043e\u0441\u043e\u0431\u044b\u043c \u043f\u043e\u043b\u0435\u043c, \u0437\u0430\u0434\u0430\u0447\u0430 \u0441\u0438\u043b\u044c\u043d\u043e \u0443\u043f\u0440\u043e\u0449\u0430\u0435\u0442\u0441\u044f.<\/p>\n<p>\u041d\u0430 \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0435, \u0447\u0430\u0449\u0435 \u0432\u0441\u0435\u0433\u043e, \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u0442\u0441\u044f \u0437\u0430\u043f\u0440\u043e\u0441 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f, \u043f\u043e \u043a\u043e\u0442\u043e\u0440\u043e\u043c\u0443 \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u043e\u0431\u0440\u0430\u0442\u043d\u044b\u0439 \u0441\u043a\u0440\u0438\u043f\u0442 \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u044f. \u041d\u0430 \u043c\u043e\u0439 \u0432\u0437\u0433\u043b\u044f\u0434, \u0441\u043f\u0438\u0441\u043e\u043a PK \u043d\u0430\u0434\u0435\u0436\u043d\u0435\u0435 \u2013 \u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e\u0441\u0442\u044c \u0437\u0430\u0442\u0435\u0440\u0435\u0442\u044c \u0447\u0442\u043e-\u0442\u043e \u0447\u0443\u0436\u043e\u0435 \u0441\u0432\u043e\u0434\u0438\u0442\u0441\u044f \u043f\u043e\u0447\u0442\u0438 \u043a 0.<\/p>\n<\/li>\n<li>\n<p>\u0422\u0440\u0435\u0442\u044c\u044f \u0438 \u0441\u0430\u043c\u0430\u044f \u0441\u043b\u043e\u0436\u043d\u0430\u044f DML-\u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044f \u2013 Update. \u0417\u0434\u0435\u0441\u044c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0435 \u043a\u043e\u043c\u0431\u0438\u043d\u0430\u0446\u0438\u0438 \u0441\u043f\u043e\u0441\u043e\u0431\u043e\u0432 \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f. \u041d\u0430\u0438\u0431\u043e\u043b\u0435\u0435 \u0441\u043b\u043e\u0436\u043d\u044b\u0439 \u0441\u043b\u0443\u0447\u0430\u0439 \u0432 \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0435 \u2013 \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435 \u043f\u043e \u043f\u0440\u043e\u0448\u0435\u0441\u0442\u0432\u0438\u0438 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 (\u043f\u043e\u043b\u0433\u043e\u0434\u0430-\u0433\u043e\u0434), \u043a\u043e\u0433\u0434\u0430 \u043d\u0430\u0434 \u0434\u0430\u043d\u043d\u044b\u043c\u0438 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u0443\u0436\u0435 \u0430\u043a\u0442\u0438\u0432\u043d\u043e <s>\u043f\u043e\u0438\u0437\u0434\u0435\u0432\u0430\u043b\u0441\u044f<\/s> \u043f\u043e\u0440\u0430\u0431\u043e\u0442\u0430\u043b. \u0412 \u0438\u0442\u043e\u0433\u0435 \u043f\u043e\u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043b\u043e\u0441\u044c \u0444\u043e\u0440\u043c\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0439 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u0432 \u0432\u0438\u0434\u0435 \u0441\u043a\u0440\u0438\u043f\u0442\u0430. \u041f\u0440\u043e\u0433\u043d\u0430\u0442\u044c \u0441\u043a\u0440\u0438\u043f\u0442 \u043d\u0430 \u0441\u043e\u0433\u043b\u0430\u0441\u043e\u0432\u0430\u043d\u043d\u043e\u043c \u043c\u0430\u0441\u0441\u0438\u0432\u0435 \u0434\u0430\u043d\u043d\u044b\u0445 &#8212; \u0447\u0430\u0441\u0442\u0438 \u0441\u043f\u0438\u0441\u043a\u0430 \u0434\u043b\u044f \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f. \u0418, \u0435\u0441\u0442\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u0441 \u0434\u0432\u0443\u0445 \u0441\u0442\u043e\u0440\u043e\u043d: \u0431\u0438\u0437\u043d\u0435\u0441\u0430 \u0438 DevTeam.<\/p>\n<\/li>\n<\/ul>\n<h4>\u041f\u043e\u0434\u0438\u0442\u043e\u0433<\/h4>\n<p>\u0411\u044d\u043a\u0430\u043f\u044b \u0438 \u0441\u043d\u0430\u043f\u0448\u043e\u0442\u044b \u0443\u0434\u043e\u0431\u043d\u044b \u0442\u043e\u0433\u0434\u0430, \u043a\u043e\u0433\u0434\u0430 \u0435\u0441\u0442\u044c \u043e\u043f\u044b\u0442 \u0438 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0438\u0445 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f. \u041d\u0430\u043b\u0438\u0447\u0438\u0435 \u043f\u0440\u044f\u043c\u043e\u0433\u043e \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043a \u0444\u0430\u0439\u043b\u043e\u0432\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u0435, \u043b\u0438\u0431\u043e \u0443\u0434\u043e\u0431\u043d\u044b\u0439 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u0438\u043d\u043a\u0440\u0435\u043c\u0435\u043d\u0442\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0431\u043b\u0435\u0433\u0447\u0430\u044e\u0442 \u0437\u0430\u0434\u0430\u0447\u0443. \u0425\u043e\u0442\u044f \u0440\u0430\u0431\u043e\u0442\u0430 \u0447\u0435\u0440\u0435\u0437 \u043a\u043e\u043d\u0441\u043e\u043b\u044c\u043d\u044b\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u043f\u043e-\u043f\u0440\u0435\u0436\u043d\u0435\u043c\u0443 \u0438\u043c\u0435\u0435\u0442 \u0441\u0432\u043e\u0438\u0445 \u044f\u0440\u044b\u0445 \u0430\u0434\u0435\u043f\u0442\u043e\u0432.<\/p>\n<p>\u041d\u0430\u0438\u0431\u043e\u043b\u0435\u0435 \u043f\u043e\u043d\u044f\u0442\u043d\u044b\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u2013 \u043d\u0430\u043a\u0430\u0442\u0438\u0442\u044c \u0441\u043d\u0430\u043f\u0448\u043e\u0442\/\u0431\u044d\u043a\u0430\u043f \u043f\u0440\u0438 \u043f\u043e\u043b\u043d\u043e\u0439 \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0435 \u0438\u043d\u0441\u0442\u0430\u043d\u0441\u0430 \u0432 \u043c\u043e\u043d\u043e\u043f\u043e\u043b\u044c\u043d\u043e\u043c \u0440\u0435\u0436\u0438\u043c\u0435 \u0440\u0430\u0431\u043e\u0442\u044b. \u041c\u0438\u043d\u0443\u0441 \u044d\u0442\u043e\u0433\u043e \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u0430 \u2013 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u043d\u043e\u0441\u0442\u044c \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0434\u043b\u044f \u043f\u0440\u043e\u043c\u044b\u0448\u043b\u0435\u043d\u043d\u044b\u0445 \u0440\u0435\u0448\u0435\u043d\u0438\u0439 24\/7\/365, \u0442\u0430\u043a \u043a\u0430\u043a \u043d\u0435\u0437\u0430\u043f\u043b\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u043f\u0440\u043e\u0441\u0442\u043e\u0438 \u0434\u0430\u0436\u0435 \u0432 \u043c\u0438\u043d\u0443\u0442\u0443 \u043f\u043e\u0440\u043e\u0436\u0434\u0430\u044e\u0442 \u043b\u0430\u0432\u0438\u043d\u044b \u0430\u043b\u0435\u0440\u0442\u043e\u0432 \u043d\u0430 \u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0445. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0440\u0430\u0434\u0438 \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u043f\u0430\u0440\u044b-\u0442\u0440\u043e\u0439\u043a\u0438 \u0437\u0430\u043f\u0438\u0441\u0435\u0439 \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0435, \u0433\u043e\u0440\u043e\u0434\u0438\u0442\u044c \u043e\u0433\u043e\u0440\u043e\u0434 \u0441\u043e \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u043c\u0438 \u0441\u0445\u0435\u043c\u0430\u043c\u0438\/\u0442\u0430\u0431\u043b\u0438\u0446\u0430\u043c\u0438 \u2013 \u0437\u0430\u043d\u044f\u0442\u0438\u0435 \u043d\u0430 \u043b\u044e\u0431\u0438\u0442\u0435\u043b\u044f. \u041f\u043e\u0440\u043e\u0439 \u043b\u0435\u0433\u0447\u0435 \u0443\u0433\u043e\u0432\u043e\u0440\u0438\u0442\u044c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u0437\u0430\u0432\u0435\u0441\u0442\u0438 \u0434\u0430\u043d\u043d\u044b\u0435 \u0437\u0430\u043d\u043e\u0432\u043e.<\/p>\n<details class=\"spoiler\">\n<summary>\u0418\u0437 \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0438<\/summary>\n<div class=\"spoiler__content\">\n<p>\u0420\u0430\u0431\u043e\u0442\u0443 \u0441\u043e \u0441\u043a\u0440\u0438\u043f\u0442\u0430\u043c\u0438 \u043e\u0442\u043a\u0430\u0442\u0430 \u043c\u043e\u0436\u043d\u043e \u0441\u0438\u043b\u044c\u043d\u043e \u043e\u0431\u043b\u0435\u0433\u0447\u0438\u0442\u044c \u0447\u0435\u0440\u0435\u0437 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0443 \u0411\u0414 &#8212; \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0442\u0435\u043d\u0435\u0432\u044b\u0435 \u0442\u0430\u0431\u043b\u0438\u0446\u044b. \u0420\u0435\u0448\u0435\u043d\u0438\u0435 \u0441\u043f\u043e\u0440\u043d\u043e\u0435, \u0442.\u043a. \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0439 \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0438\u043d\u0434\u0438\u0432\u0438\u0434\u0443\u0430\u043b\u044c\u043d\u043e \u043e\u0442\u0432\u0435\u0447\u0430\u0442\u044c \u043d\u0430 \u0432\u043e\u043f\u0440\u043e\u0441 \u00ab\u0447\u0442\u043e \u043b\u0443\u0447\u0448\u0435?\u00bb: \u043f\u043e\u043b\u043d\u044b\u0435 \u043b\u043e\u0433\u0438 \u0438\u043b\u0438 \u043c\u0430\u043b\u043e\u0435 \u043f\u043e\u0442\u0440\u0435\u0431\u043b\u0435\u043d\u0438\u0435 \u0434\u0438\u0441\u043a\u043e\u0432\u043e\u0433\u043e \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0430. <\/p>\n<p>\u00a0<\/p>\n<p>\u0412 \u041a\u043e\u043c\u043f\u0430\u043d\u0438\u0438 \u0435\u0441\u0442\u044c \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c\u0430 \u2013 \u0438\u0441\u0442\u043e\u0440\u0438\u0447\u043d\u044b\u0435 \u0442\u0430\u0431\u043b\u0438\u0446\u044b, \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0435 \u0434\u043b\u044f \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0430 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044e. \u0412 \u043d\u0438\u0445 \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u044e\u0442\u0441\u044f \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0438\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0437\u0430\u043f\u0438\u0441\u0435\u0439 \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0445 \u0442\u0430\u0431\u043b\u0438\u0446. \u0412 \u0438\u0442\u043e\u0433\u0435 \u0435\u0441\u0442\u044c \u0447\u0438\u0442\u0430\u0431\u0435\u043b\u044c\u043d\u044b\u0439 \u043b\u043e\u0433 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445.<\/p>\n<p>\u0414\u043e Update<\/p>\n<figure class=\"\"><figcaption><\/figcaption><\/figure>\n<p>\u0421\u0430\u043c Update<\/p>\n<pre><code class=\"sql\">Update Message Set ExternalID = '123' Where ID = 1; Update Message Set ExternalID = '321' Where ID = 1; Update Message Set ExternalID = '789' Where ID = 1;<\/code><\/pre>\n<p>\u041f\u043e\u0441\u043b\u0435 Update<\/p>\n<figure class=\"\"><figcaption><\/figcaption><\/figure>\n<\/p>\n<\/div>\n<\/details>\n<h3>2. Feature Toggle (FT)<\/h3>\n<details class=\"spoiler\">\n<summary>\u0411\u0430\u0439\u043a\u0430 \u0438\u0437 \u0436\u0438\u0437\u043d\u0438 #2<\/summary>\n<div class=\"spoiler__content\">\n<p>\u041a\u043e\u043c\u0430\u043d\u0434\u0430 \u0446\u0435\u043b\u044b\u0439 \u0438\u043d\u043a\u0440\u0435\u043c\u0435\u043d\u0442 \u043f\u0435\u0440\u0435\u043f\u0438\u043b\u0438\u0432\u0430\u0435\u0442 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u0440\u0430\u0441\u0447\u0435\u0442\u0430 \u043f\u0440\u0435\u043c\u0438\u0438 \u043f\u043e \u0441\u0442\u0440\u0430\u0445\u043e\u0432\u043e\u043c\u0443 \u043f\u0440\u043e\u0434\u0443\u043a\u0442\u0443. \u0417\u0430\u0442\u0440\u043e\u043d\u0443\u0442\u044b \u043a\u0430\u043a \u0444\u0440\u043e\u043d\u0442, \u0442\u0430\u043a \u0438 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0441\u0438\u0441\u0442\u0435\u043c \u0431\u044d\u043a\u0430. \u0414\u0435\u043f\u043b\u043e\u0439 \u0438\u0434\u0435\u0442 \u0442\u0440\u0435\u043c\u044f \u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u044b\u043c\u0438 \u0440\u0435\u043b\u0438\u0437\u0430\u043c\u0438 \u0432 \u0440\u0430\u0437\u043d\u043e\u0435 \u0432\u0440\u0435\u043c\u044f \u0432 \u0442\u0435\u0447\u0435\u043d\u0438\u0435 \u0434\u043d\u044f. \u0414\u0435\u043d\u044c \u0440\u0435\u043b\u0438\u0437\u0430 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d, \u0434\u043e\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0437\u0430\u043a\u0440\u0435\u043f\u043b\u0435\u043d\u044b, \u0432\u043b\u0438\u0442\u044b \u0432 \u0440\u0435\u0433\u0440\u0435\u0441\u0441\u043d\u044b\u0435 \u0441\u0431\u043e\u0440\u043a\u0438, \u0440\u0435\u043b\u0438\u0437-\u043c\u0435\u043d\u0435\u0434\u0436\u0435\u0440\u044b \u0444\u0438\u043d\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u044e\u0442 \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0438 \u0433\u043e\u0442\u043e\u0432\u044f\u0442\u0441\u044f \u043a \u0434\u0435\u043f\u043b\u043e\u044e. \u0421\u0443\u0442\u043a\u0438 \u0434\u043e \u0432\u044b\u043a\u043b\u0430\u0434\u043a\u0438\u2026 \u0438 \u0432\u043e\u0437\u043d\u0438\u043a\u0430\u0435\u0442 \u0432\u043e\u043f\u0440\u043e\u0441, \u043a\u0430\u043a \u043f\u043e\u0432\u0435\u0434\u0435\u0442 \u0441\u0435\u0431\u044f \u043f\u0440\u043e\u0434 \u0432 \u043f\u0440\u043e\u043c\u0435\u0436\u0443\u0442\u043a\u0430\u0445 \u043c\u0435\u0436\u0434\u0443 \u0432\u044b\u043a\u043b\u0430\u0434\u043a\u0430\u043c\u0438 \u0440\u0435\u043b\u0438\u0437\u043d\u044b\u0445 \u0441\u0431\u043e\u0440\u043e\u043a \u0440\u0430\u0437\u043d\u044b\u0445 \u0441\u0438\u0441\u0442\u0435\u043c: \u0444\u0440\u043e\u043d\u0442 \u0434\u043e\u0435\u0445\u0430\u043b, \u0431\u044d\u043a \u0432 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435, \u0430 \u043a\u0443\u0441\u043e\u043a \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u0440\u0430\u0441\u0447\u0435\u0442\u0430 \u0442\u0430\u0440\u0438\u0444\u043e\u0432 \u0443\u0436\u0435 \u0432\u043e\u0432\u0441\u044e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442. \u0421\u0442\u0440\u0430\u0448\u043d\u043e\u0432\u0430\u0442\u043e. \u041d\u0430\u0447\u0438\u043d\u0430\u0435\u0448\u044c \u0441\u043f\u0435\u0448\u043d\u043e \u043f\u0440\u043e\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u0442\u044c \u0432\u0441\u0435 pull request\u2019\u044b \u043f\u043e \u0432\u044b\u043a\u043b\u0430\u0434\u043a\u0435, \u0432\u044b\u044f\u0441\u043d\u044f\u044f, \u0447\u0442\u043e \u0432 \u0438\u0442\u043e\u0433\u0435 \u043e\u0442\u0432\u0430\u043b\u0438\u0442\u0441\u044f. \u0412 \u0442\u043e\u0442 \u0440\u0430\u0437 \u043f\u0440\u043e\u043d\u0435\u0441\u043b\u043e,\u0431\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u044f \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u044f\u043c \u043a \u043e\u0431\u0440\u0430\u0442\u043d\u043e\u0439 \u0441\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u043c\u043e\u0441\u0442\u0438 (\u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430 null \u0434\u043b\u044f \u043d\u043e\u0432\u043e\u0433\u043e \u0432\u0445\u043e\u0434\u044f\u0449\u0435\u0433\u043e \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430) &#8212; \u043d\u0435\u043a\u043e\u043d\u0441\u0438\u0441\u0442\u0435\u043d\u0442\u043d\u043e\u0441\u0442\u044c \u043a\u043e\u0434\u0430 \u043f\u0440\u043e\u0448\u043b\u0430 \u043d\u0435\u0437\u0430\u043c\u0435\u0442\u043d\u043e\u0439.<\/p>\n<p>\u00a0<\/p>\n<p>\u0418\u0442\u043e\u0433\u043e\u043c \u0441\u0442\u0430\u043b\u043e \u043f\u0440\u0438\u043d\u044f\u0442\u0438\u0435 \u043d\u0430 \u0443\u0440\u043e\u0432\u043d\u0435 \u043a\u043e\u043c\u0430\u043d\u0434\u044b \u043f\u0430\u0440\u043e\u0447\u043a\u0438 \u043f\u043e\u0434\u0445\u043e\u0434\u043e\u0432:<\/p>\n<p> &#8212; \u041f\u043e\u0441\u043b\u0435 \u0432\u044b\u043a\u043b\u0430\u0434\u043a\u0438 \u043a\u0440\u0443\u043f\u043d\u044b\u0445 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439, \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c <strong>\u0441\u0430\u043c\u0438<\/strong> \u043d\u0430 \u043f\u0440\u043e\u0434\u0435, \u0434\u043e \u0430\u043d\u043e\u043d\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0431\u0438\u0437\u043d\u0435\u0441\u0443;<\/p>\n<p> &#8212; \u0414\u0435\u043a\u043e\u043c\u043f\u043e\u0437\u0438\u0446\u0438\u044f Features \u043d\u0430 <a href=\"https:\/\/www.scaledagileframework.com\/story\/\" rel=\"noopener noreferrer nofollow\">User Story<\/a> \u0442\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u0447\u0442\u043e\u0431\u044b \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0438\u0445 \u0434\u0435\u043f\u043b\u043e\u0438\u0442\u044c \u043d\u0435\u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e (\u043f\u0440\u0438\u0432\u0435\u0442 CI\/CD);<\/p>\n<p> &#8212; \u041e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u043d\u0430\u043b\u0438\u0447\u0438\u0435 FT (\u0441\u0435\u0439\u0447\u0430\u0441 \u043d\u0430\u043b\u0438\u0447\u0438\u0435 FT \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u041d\u0424\u0422 \u0434\u043b\u044f \u0431\u043e\u043b\u044c\u0448\u0435\u0439 \u0447\u0430\u0441\u0442\u0438 \u0434\u043e\u0440\u0430\u0431\u043e\u0442\u043e\u043a \u0441\u043e \u0441\u0442\u043e\u0440\u043e\u043d\u044b \u041a\u043e\u043c\u043f\u0430\u043d\u0438\u0438)<\/p>\n<\/div>\n<\/details>\n<details class=\"spoiler\">\n<summary>\u0411\u0430\u0439\u043a\u0430 \u0438\u0437 \u0436\u0438\u0437\u043d\u0438 #3<\/summary>\n<div class=\"spoiler__content\">\n<p>\u0412 \u0434\u0440\u0443\u0433\u043e\u0439 \u0440\u0430\u0437 \u0432\u044b\u043a\u0430\u0442\u044b\u0432\u0430\u043b\u0438 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f UI \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0435\u0433\u043e \u0441\u0442\u0440\u0430\u0445\u043e\u0432\u043e\u0433\u043e \u043f\u0440\u043e\u0434\u0443\u043a\u0442\u0430. \u0414\u043e\u043f\u0438\u043b\u0438\u043b\u0438, \u0437\u0430\u043b\u0438\u043b\u0438, \u0432\u043a\u043b\u044e\u0447\u0438\u043b\u0438\u0441\u044c \u0432 \u0440\u0435\u043b\u0438\u0437, \u0438 \u043d\u0430 \u0440\u0435\u0433\u0440\u0435\u0441\u0441\u043d\u043e\u043c \u0441\u0442\u0435\u0434\u0435 \u0441\u043c\u0435\u0436\u043d\u0430\u044f \u043a\u043e\u043c\u0430\u043d\u0434\u0430 \u043d\u0430\u0445\u043e\u0434\u0438\u0442 \u0431\u0430\u0433 (\u0434\u0430-\u0434\u0430, \u044d\u0442\u043e \u0441\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f, \u0438 \u044d\u0442\u043e \u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u043e) \u0432 \u043e\u0434\u043d\u043e\u0439 \u0438\u0437 \u043f\u0440\u043e\u0432\u0435\u0440\u043e\u043a UI. \u0410\u043d\u0430\u043b\u0438\u0437 \u0434\u0435\u0444\u0435\u043a\u0442\u0430 \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442, \u0447\u0442\u043e \u043d\u0435 \u0443\u0447\u043b\u0438 \u043a\u0440\u0443\u043f\u043d\u044b\u0439 \u0431\u0438\u0437\u043d\u0435\u0441-\u043a\u0435\u0439\u0441 \u2013 \u0435\u0433\u043e \u0434\u043e\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0433\u043e \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0438 \u0441\u043f\u043e\u043a\u043e\u0439\u043d\u043e\u0439 \u0433\u043e\u043b\u043e\u0432\u044b \u043f\u0440\u0438 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u0438 \u043a\u043e\u0434\u0430. \u0425\u043e\u0440\u043e\u0448\u043e, \u0447\u0442\u043e \u0434\u043e\u0440\u0430\u0431\u043e\u0442\u043a\u0443 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u0437\u0430\u0444\u0438\u0447\u0435\u0442\u043e\u0433\u043b\u0438\u043b\u0438 \u043f\u043e\u0434 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u043c \u043a\u043e\u0434\u043e\u043c FT, \u0442.\u0435. \u043e\u043d\u0430 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043e\u0442\u043a\u043b\u044e\u0447\u0435\u043d\u0430 \u043d\u0435\u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e. \u041f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0435\u043c \u0431\u0438\u0437\u043d\u0435\u0441 \u0438 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u043c \u0440\u0435\u0448\u0435\u043d\u0438\u0435, \u0447\u0442\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u043d\u0435\u043a\u0440\u0438\u0442\u0438\u0447\u043d\u0430 \u0438 \u043c\u043e\u0436\u0435\u043c \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c\u0441\u044f \u0431\u0435\u0437 \u043d\u0435\u0451. FT \u043e\u0442\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f, \u0437\u0430\u0434\u0430\u0447\u0430 \u0442\u0435\u0445 \u0434\u043e\u043b\u0433\u0430 \u043d\u0430 \u0438\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0437\u0430\u043a\u0438\u0434\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0432 \u0431\u044d\u043a\u043b\u043e\u0433 \u0431\u043b\u0438\u0436\u0430\u0439\u0448\u0435\u0433\u043e \u0441\u043f\u0440\u0438\u043d\u0442\u0430, \u0434\u0435\u0444\u0435\u043a\u0442 \u0437\u0430\u043a\u0440\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0438 \u0440\u0435\u043b\u0438\u0437 \u0432\u044b\u0445\u043e\u0434\u0438\u0442 \u0431\u0435\u0437 \u0441\u0431\u043e\u0435\u0432. <s>\u0422\u0430\u043d\u0446\u0443\u044e\u0442 \u0412\u0441\u0435!<\/s><\/p>\n<p>\u00a0<\/p>\n<p>\u0427\u0442\u043e \u0432\u044b\u043d\u0435\u0441 \u0434\u043b\u044f \u0441\u0435\u0431\u044f:<\/p>\n<p> &#8212; \u041d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043a\u043e\u0434\u043e\u0432 FT \u0434\u043b\u044f \u043e\u0434\u043d\u043e\u0439 \u0441\u0442\u043e\u0440\u0438 \u0445\u043e\u0442\u044c \u0438 \u0443\u0441\u043b\u043e\u0436\u043d\u044f\u0435\u0442 \u043e\u0431\u0441\u043b\u0443\u0436\u0438\u0432\u0430\u043d\u0438\u0435 \u0442\u0435\u0445\u0434\u043e\u043b\u0433\u0430, \u043d\u043e \u044d\u043a\u043e\u043d\u043e\u043c\u0438\u0442 \u043d\u0435\u0440\u0432\u044b \u0438 \u0432\u0440\u0435\u043c\u044f \u043f\u0440\u0438 \u043b\u043e\u0432\u043b\u0435 \u0431\u0430\u0433\u043e\u04324<\/p>\n<p> &#8212;\u00a0\u0415\u0441\u043b\u0438 UI \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 FT \u2013 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439. <\/p>\n<\/div>\n<\/details>\n<p>\u041f\u0440\u0430\u043a\u0442\u0438\u043a\u0430 <a href=\"https:\/\/habr.com\/ru\/post\/464021\/\" rel=\"noopener noreferrer nofollow\">FT <\/a>\u0447\u0443\u0442\u044c \u0441\u043b\u043e\u0436\u043d\u0435\u0435 \u0440\u0435\u0437\u0435\u0440\u0432\u043d\u043e\u0439 \u043a\u043e\u043f\u0438\u0438 \u0434\u0430\u043d\u043d\u044b\u0445. \u0414\u043b\u044f \u043d\u0435\u0435 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c \u043d\u0435\u043a\u0438\u0439 \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c \u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0430\u0442\u0435\u043b\u0435\u0439 \u2013 \u0431\u0443\u0434\u044c \u0442\u043e \u0442\u0430\u0431\u043b\u0438\u0446\u0430 \u0432 \u0411\u0414, \u043a\u043e\u043d\u0444\u0438\u0433-\u0444\u0430\u0439\u043b\u044b \u0438\u043b\u0438 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u043c\u0435\u0442\u0430\u0434\u0430\u043d\u043d\u044b\u0445. \u041f\u043b\u044e\u0441 \u0442\u0440\u0435\u0443\u0431\u0435\u0442\u0441\u044f \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0435\u0435 \u0441\u043e\u0433\u043b\u0430\u0441\u0438\u0435 \u0441 \u0440\u043e\u0441\u0442\u043e\u043c <a href=\"https:\/\/habr.com\/ru\/post\/453280\/\" rel=\"noopener noreferrer nofollow\">\u0442\u0435\u0445\u0434\u043e\u043b\u0433\u0430 <\/a>\u0438 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u044c\u044e \u0435\u0433\u043e \u043e\u0431\u0441\u043b\u0443\u0436\u0438\u0432\u0430\u043d\u0438\u044f.<\/p>\n<p>\u0421\u0440\u0430\u0437\u0443 \u0443\u0442\u043e\u0447\u043d\u044e, \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0434\u0430\u043d\u043e \u0434\u043b\u044f <a href=\"https:\/\/martinfowler.com\/articles\/feature-toggles.html\" rel=\"noopener noreferrer nofollow\">Release Toggles<\/a>. \u0418\u0445 \u0441\u0440\u043e\u043a \u0436\u0438\u0437\u043d\u0438 \u2013 \u043d\u0435 \u0434\u043e\u043b\u044c\u0448\u0435 2-3 \u0440\u0435\u043b\u0438\u0437\u043d\u044b\u0445 \u0446\u0438\u043a\u043b\u043e\u0432 (2 \u0441\u0442\u0430\u0442\u044c\u044f \u0438\u0437 <a href=\"https:\/\/habr.com\/ru\/post\/324130\/\" rel=\"noopener noreferrer nofollow\">\u0423\u0433\u043e\u043b\u043e\u0432\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0435\u043a\u0441\u0430 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430<\/a> \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u044f\u0440\u043a\u043e \u043f\u043e\u0434\u0441\u0432\u0435\u0447\u0438\u0432\u0430\u044e\u0442 \u0441\u0442\u043e\u043b\u044c \u0436\u0435\u0441\u0442\u043a\u043e\u0435 \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u0435). \u041d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b \u0434\u043b\u044f \u0443\u043c\u0435\u043d\u044c\u0448\u0435\u043d\u0438\u044f \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0430 \u0432\u043d\u0435\u043f\u043b\u0430\u043d\u043e\u0432\/\u043a\u0440\u0438\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0440\u0435\u043b\u0438\u0437\u043e\u0432. \u041f\u043e\u043b\u044c\u0437\u0430 \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e\u0431\u044b \u0434\u0430\u0436\u0435 \u043f\u0440\u0438 \u043f\u043e\u043b\u043d\u043e\u043c \u043e\u0442\u043a\u0430\u0437\u0435 \u043f\u0440\u043e\u0434\u0430, \u0435\u0433\u043e \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u043b\u0435\u0433\u043a\u043e (\u0432 \u0438\u0434\u0435\u0430\u043b\u0435 \u043c\u0433\u043d\u043e\u0432\u0435\u043d\u043d\u043e, \u0432 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u0434\u0435\u043f\u043b\u043e\u044f) \u0440\u0435\u0430\u043d\u0438\u043c\u0438\u0440\u043e\u0432\u0430\u0442\u044c, \u043e\u0442\u043a\u043b\u044e\u0447\u0438\u0432 \u043d\u043e\u0432\u044b\u0439 \u043a\u043e\u0434.<\/p>\n<p>\u0414\u043e\u043b\u0433\u043e\u0436\u0438\u0432\u0443\u0449\u0438\u0435 FT A\/B \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f, \u043d\u0435\u0441\u0443\u0442 \u0432 \u0441\u0435\u0431\u0435 \u0434\u0440\u0443\u0433\u0443\u044e \u0446\u0435\u043d\u043d\u043e\u0441\u0442\u044c \u0438 \u043d\u0430 \u0441\u043f\u043e\u043a\u043e\u0439\u0441\u0442\u0432\u0438\u0435 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430 \u043f\u0440\u0438 \u0432\u044b\u043a\u043b\u0430\u0434\u043a\u0435 \u043a\u043e\u0434\u0430 \u043e\u0441\u043e\u0431\u043e \u043d\u0435 \u0432\u043b\u0438\u044f\u044e\u0442.<\/p>\n<p>\u0411\u0430\u0437\u043e\u0432\u044b\u0435 \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u044b:<\/p>\n<ul>\n<li>\n<p>\u0412\u044b\u043a\u043b\u044e\u0447\u0435\u043d\u043d\u044b\u0439 FT \u043a\u043e\u0434 \u043d\u0435 \u043c\u0435\u043d\u044f\u0435\u0442, \u0442\u043e \u0435\u0441\u0442\u044c \u043a\u0443\u0440\u0441\u043e\u0440 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u043f\u0440\u043e\u0445\u043e\u0434\u0438\u0442 \u0440\u043e\u0432\u043d\u043e \u0432\u0441\u0435 \u0442\u0435 \u0436\u0435 \u0431\u043b\u043e\u043a\u0438 \u0432 \u0442\u043e\u043c \u0436\u0435 \u043f\u043e\u0440\u044f\u0434\u043a\u0435, \u0447\u0442\u043e \u0438 \u0431\u0435\u0437 FT;<\/p>\n<\/li>\n<li>\n<p>FT \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u043f\u043e\u0432\u0442\u043e\u0440\u043d\u043e. \u041d\u0430 \u043f\u0440\u043e\u0434\u0435 \u0442\u043e\u0447\u043d\u043e, \u0430 \u0434\u0440\u0443\u0433\u0438\u0435 \u0438\u043d\u0441\u0442\u0430\u043d\u0441\u044b \u2013 \u043d\u0430 \u0441\u043e\u0432\u0435\u0441\u0442\u0438 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430;<\/p>\n<\/li>\n<\/ul>\n<details class=\"spoiler\">\n<summary>4 \u043c\u0438\u043d\u0443\u0442\u0430 \u0432\u044b\u0441\u0442\u0443\u043f\u043b\u0435\u043d\u0438\u044f Doug Sven &#8212; \u043a\u0430\u043a \u043d\u0435 \u043d\u0430\u0434\u043e \u0434\u0435\u043b\u0430\u0442\u044c<\/summary>\n<div class=\"spoiler__content\">\n<p><a href=\"https:\/\/dougseven.com\/2014\/04\/17\/knightmare-a-devops-cautionary-tale\/\" rel=\"noopener noreferrer nofollow\">Knightmare: A DevOps \u041f\u0440\u0435\u0434\u043e\u0441\u0442\u0435\u0440\u0435\u0433\u0430\u044e\u0449\u0430\u044f \u0438\u0441\u0442\u043e\u0440\u0438\u044f<\/a><\/p>\n<figure class=\"full-width\"><figcaption>Feature Toggles: The Good, The Bad, and The Ugly with Andy Davies<\/figcaption><\/figure>\n<p>4 \u043c\u0438\u043d\u0443\u0442\u0430 <a href=\"https:\/\/www.youtube.com\/watch?v=r7VI5x2XKXw&amp;t=53s\" rel=\"noopener noreferrer nofollow\">\u0432\u0438\u0434\u0435\u043e<\/a><\/p>\n<\/div>\n<\/details>\n<ul>\n<li>\n<p>FT \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0432\u044b\u043f\u0438\u043b\u0438\u0432\u0430\u0442\u044c \u043f\u043e\u0441\u043b\u0435 \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043d\u0438\u044f \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0438\u044f \u043a\u0440\u0438\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u043e\u0442\u043a\u0430\u0437\u043e\u0432. \u041c\u0435\u043b\u043a\u0438\u0439 \u043a\u043e\u0441\u044f\u043a \u0447\u0435\u0440\u0435\u0437 3-4 \u043c\u0435\u0441\u044f\u0446\u0430 \u0430\u043a\u0442\u0438\u0432\u043d\u043e\u0433\u043e (!) \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u043a\u043e\u0434\u0430 \u2013 \u044f\u0432\u043b\u0435\u043d\u0438\u0435 \u043d\u0430\u0441\u0442\u043e\u043b\u044c\u043a\u043e \u0442\u0440\u0438\u0432\u0438\u0430\u043b\u044c\u043d\u043e\u0435, \u0447\u0442\u043e \u0440\u0430\u0434\u0438 \u043d\u0435\u0433\u043e \u043e\u0442\u043a\u0430\u0442\u044b\u0432\u0430\u0442\u044c \u0432\u0441\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u043d\u0435\u0440\u0430\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e.<\/p>\n<\/li>\n<\/ul>\n<p>\u0414\u043b\u044f \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439 \u043f\u0443\u043d\u043a\u0442 \u0441\u0430\u043c\u044b\u0439 \u0441\u043f\u043e\u0440\u043d\u044b\u0439. \u041e\u0434\u043d\u0430\u043a\u043e \u0432 \u0433\u0438\u0433\u0430\u043d\u0442\u0441\u043a\u043e\u0439 \u043a\u043e\u0434\u043e\u0432\u043e\u0439 \u0431\u0430\u0437\u0435, \u0433\u0434\u0435 \u043f\u043e\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u0440\u0430\u0431\u043e\u0442\u044b \u0434\u0430\u0436\u0435 \u0432 \u0440\u0430\u043c\u043a\u0430\u0445 \u043f\u0430\u043a\u0435\u0442\u0430 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043d\u0435\u043f\u043e\u043b\u043d\u044b\u043c, \u043b\u0443\u0447\u0448\u0435 \u0441\u0440\u0430\u0437\u0443 \u0432\u044b\u043f\u0438\u043b\u0438\u0442\u044c \u043d\u0435\u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0449\u0438\u0439 \u043a\u043e\u0434, \u0447\u0435\u043c \u0432\u0441\u044f\u043a\u0438\u0439 \u0440\u0430\u0437 \u043f\u0440\u0438 \u0440\u0430\u0437\u0431\u043e\u0440\u0435 \u0438\u043d\u0446\u0438\u0434\u0435\u043d\u0442\u043e\u0432 \u0432\u0441\u043f\u043e\u043c\u0438\u043d\u0430\u0442\u044c \u00ab\u0430 \u043e\u043d\u043e \u0435\u0449\u0435 \u043d\u0430\u0434\u043e\u00bb?<\/p>\n<h2>3.\u0422\u0435\u0441\u0442\u044b \u0441\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438\/\u043c\u043e\u0434\u0443\u043b\u044c\u043d\u044b\u0435 \u0442\u0435\u0441\u0442\u044b<\/h2>\n<details class=\"spoiler\">\n<summary>\u0411\u0430\u0439\u043a\u0430 \u0438\u0437 \u0436\u0438\u0437\u043d\u0438 #4<\/summary>\n<div class=\"spoiler__content\">\n<p>\u041f\u0435\u0440\u0435\u043f\u0430\u043b\u0430 \u043a\u0430\u043a-\u0442\u043e \u0437\u0430\u0434\u0430\u0447\u0430 \u043f\u0435\u0440\u0435\u043f\u0438\u0441\u0430\u0442\u044c \u0437\u0430\u043f\u0440\u043e\u0441 Oracle \u043e\u043d\u043b\u0430\u0439\u043d-\u043a\u0430\u043d\u0430\u043b\u0430 \u2013 \u043f\u0435\u0440\u0438\u043e\u0434\u0438\u0447\u0435\u0441\u043a\u0438 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0442\u043e\u0440 \u0432\u044b\u0431\u0438\u0440\u0430\u0435\u0442 \u043f\u043b\u0430\u043d \u0441 full scan \u043f\u043e \u0434\u0430\u0442\u0430\u0441\u0435\u0442\u0443 \u0432 3-4m \u0437\u0430\u043f\u0438\u0441\u0435\u0439. \u042d\u0442\u043e \u0431\u044b\u043b \u043d\u0435 \u043f\u0435\u0440\u0432\u044b\u0439 \u043f\u043e\u0434\u0445\u043e\u0434 \u043a \u0441\u043d\u0430\u0440\u044f\u0434\u0443. \u041e\u0447\u0435\u0432\u0438\u0434\u043d\u044b\u0435 \u0432\u0435\u0449\u0438 \u0432 \u0432\u0438\u0434\u0435 \u0440\u0430\u0437\u0431\u0438\u0435\u043d\u0438\u044f \u043d\u0430 \u0437\u0430\u043f\u0440\u043e\u0441\u044b \u0441 union \u0443\u0436\u0435 \u0431\u044b\u043b\u0438 \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u044b. \u041d\u0443\u0436\u0435\u043d \u0438\u043d\u0434\u0435\u043a\u0441. \u0422\u0430\u043a \u043a\u0430\u043a \u0442\u0430\u0431\u043b\u0438\u0446\u0430 \u0431\u043e\u043b\u044c\u0448\u0430\u044f \u0438 \u0441 \u0430\u043a\u0442\u0438\u0432\u043d\u044b\u043c\u0438 I\/O \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044f\u043c\u0438, DBA \u043f\u0440\u043e\u0441\u044f\u0442 \u043e\u0431\u043e\u0441\u043d\u043e\u0432\u0430\u043d\u0438\u044f, \u0447\u0442\u043e \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0438\u043d\u0434\u0435\u043a\u0430\u0441\u0430 <em>\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e <\/em>\u043f\u043e\u043c\u043e\u0436\u0435\u0442.<\/p>\n<p>\u041f\u0440\u043e\u0441\u044f\u0442 \u2013 \u043f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430. \u0421\u0434\u0435\u043b\u0430\u043d\u043e 2 \u0432\u0435\u0440\u0441\u0438\u0438 \u0437\u0430\u043f\u0440\u043e\u0441\u0430, \u043e\u0431\u0435\u0440\u043d\u0443\u0442\u044b \u0432 FT \u0438 \u0432\u043b\u0438\u0442\u044b \u0432 \u0442\u0435\u0441\u0442\u043e\u0432\u044b\u0439 \u0441\u0442\u0435\u043d\u0434. \u0414\u0430\u043b\u044c\u0448\u0435, \u0447\u0435\u0440\u0435\u0437 <a href=\"https:\/\/betteratoracle.com\/posts\/12-runstats\" rel=\"noopener noreferrer nofollow\">RunStats<\/a>\u00a0\u0430\u043d\u0430\u043b\u0438\u0437 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u0445 \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432, \u043f\u043e\u0442\u043e\u043c \u043f\u0440\u043e\u0433\u043e\u043d \u043d\u0430 \u0441\u043e\u0432\u043f\u0430\u0434\u0435\u043d\u0438\u0435 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u0432 \u043f\u043e \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u043c \u0441\u043e\u0442\u043d\u044f\u043c \u043f\u0440\u0438\u043c\u0435\u0440\u043e\u0432. \u0421\u043e\u0448\u043b\u0438\u0441\u044c \u0438 \u044d\u0442\u043e \u0445\u043e\u0440\u043e\u0448\u043e.<\/p>\n<figure class=\"full-width\"><figcaption>\u041f\u0440\u0438\u043c\u0435\u0440 \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u044f \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438<\/figcaption><\/figure>\n<p>\u0421\u043b\u0435\u0434\u043e\u043c \u0442\u043e \u0436\u0435 \u0441\u0430\u043c\u043e\u0435 \u043d\u0430 \u0440\u0435\u0433\u0440\u0435\u0441\u0441\u0435 \u0438 \u043f\u0440\u043e\u0434\u0435 \u2013 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0448\u044c \u0441\u043a\u0440\u0438\u043f\u0442 \u0438 \u0438\u0434\u0435\u0448\u044c \u043f\u0438\u0442\u044c \u0447\u0430\u0439. \u041f\u0440\u0438\u0445\u043e\u0434\u0438\u0448\u044c \u0438 \u0441\u043c\u043e\u0442\u0440\u0438\u0448\u044c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b \u2013 \u043d\u043e\u0432\u0430\u044f \u0432\u0435\u0440\u0441\u0438\u044f \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0431\u044b\u0441\u0442\u0440\u0435\u0435, \u043e\u0448\u0438\u0431\u043e\u043a \u043d\u0435\u0442.<\/p>\n<p>\u0421\u0430\u043c\u044b\u0439 \u043f\u0440\u0438\u044f\u0442\u043d\u044b\u0439 \u0431\u043e\u043d\u0443\u0441 \u0434\u0430\u043d\u043d\u043e\u0433\u043e \u043f\u043e\u0434\u0445\u043e\u0434\u0430 \u2013 \u043e\u0434\u0438\u043d \u0440\u0430\u0437 \u043d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u0448\u044c \u0442\u0435\u0441\u0442\u044b (\u043f\u0440\u0438 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0435), \u0438 \u043f\u043e\u0442\u043e\u043c \u043d\u0435 \u043f\u0430\u0440\u0438\u0448\u044c\u0441\u044f, \u043a\u043e\u0433\u0434\u0430 \u043d\u0443\u0436\u043d\u043e \u0434\u043e\u043f\u0438\u043b\u0438\u0442\u044c \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b (\u043f\u0440\u043e\u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0440\u0443\u043a\u0430\u043c\u0438 \u0434\u0430\u0436\u0435 20 \u043a\u0435\u0439\u0441\u043e\u0432 3-4 \u0440\u0430\u0437\u0430 \u043f\u043e\u0434\u0440\u044f\u0434 \u0436\u0435\u043b\u0430\u043d\u0438\u044f \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442 \u043c\u0430\u043b\u043e)<\/p>\n<\/div>\n<\/details>\n<p>\u0417\u0430 \u044d\u0442\u043e\u0442 \u043f\u043e\u0434\u0445\u043e\u0434 \u0441\u043f\u0430\u0441\u0438\u0431\u043e \u043a\u043e\u043b\u043b\u0435\u0433\u0430\u043c. \u041a\u0440\u0430\u0439\u043d\u0435 \u043f\u043e\u043b\u0435\u0437\u0435\u043d \u043f\u0440\u0438 \u0440\u0435\u0444\u0430\u043a\u0442\u043e\u0440\u0438\u043d\u0433\u0435 \u043b\u0435\u0433\u0430\u0441\u0438. \u0421\u0443\u0442\u044c \u2013 \u0432\u0437\u044f\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435 \u0432 \u0431\u0430\u0437\u0435 (\u0441\u043f\u0438\u0441\u043e\u043a \u0434\u043e\u0433\u043e\u0432\u043e\u0440\u043e\u0432) \u0438 \u043f\u0440\u043e\u0433\u043d\u0430\u0442\u044c \u043f\u043e \u043c\u0430\u043a\u0441\u0438\u043c\u0443\u043c\u0443 \u0447\u0435\u0440\u0435\u0437 \u043e\u0431\u0435 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043c\u0435\u0442\u043e\u0434\u0430, \u0441\u0442\u0430\u0440\u0443\u044e \u0438 \u043d\u043e\u0432\u0443\u044e. \u0422\u0430\u043a \u043a\u0430\u043a enterprise-\u0431\u0430\u0437\u0430 \u043a\u0438\u0448\u0438\u0442 \u0442\u0435\u0441\u0442\u043e\u0432\u044b\u043c\u0438 \u043f\u0440\u0438\u043c\u0435\u0440\u0430\u043c\u0438 \u0440\u0430\u0437\u043d\u043e\u0439 \u0441\u0442\u0435\u043f\u0435\u043d\u0438 \u043a\u0440\u0438\u0432\u0438\u0437\u043d\u044b, \u043f\u0440\u0438 \u0432\u044b\u0431\u043e\u0440\u043a\u0435 \u0432 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0442\u044b\u0441\u044f\u0447-\u0434\u0435\u0441\u044f\u0442\u043a\u043e\u0432 \u0442\u044b\u0441\u044f\u0447 \u043f\u0440\u0438\u043c\u0435\u0440\u043e\u0432, \u0448\u0430\u043d\u0441\u043e\u0432 \u043f\u0440\u043e\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u043a\u0440\u0438\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u043a\u043e\u0441\u044f\u043a \u043e\u0447\u0435\u043d\u044c \u043c\u0430\u043b\u043e. \u0414\u043e\u0431\u0430\u0432\u0438\u0432 \u0435\u0449\u0435 \u0438 <a href=\"https:\/\/asktom.oracle.com\/pls\/apex\/asktom.search?tag=runstats-valid-for-92\" rel=\"noopener noreferrer nofollow\">\u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0435\u043c \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438<\/a>, \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f \u0445\u043e\u0440\u043e\u0448\u0430\u044f \u0441\u0435\u0440\u0435\u0431\u0440\u044f\u043d\u0430\u044f \u043f\u0443\u043b\u044f \u043f\u0440\u0438 \u0440\u0430\u0437\u0433\u043e\u0432\u043e\u0440\u0435 \u0441 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u043e\u0440\u0430\u043c\u0438.<\/p>\n<p>\u041f\u0440\u0430\u043a\u0442\u0438\u043a\u0430 \u043f\u0440\u0435\u043a\u0440\u0430\u0441\u043d\u043e \u0441\u043e\u0447\u0435\u0442\u0430\u0435\u0442\u0441\u044f \u0441 FT &#8212; \u0432 \u0440\u0430\u043c\u043a\u0430\u0445 \u043e\u0434\u043d\u043e\u0433\u043e \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u043a\u043e\u0434\u0430 \u043b\u0435\u0433\u043a\u043e \u0441\u0440\u0430\u0432\u043d\u0438\u0442\u044c \u0441\u0442\u0430\u0440\u043e\u0435 \u0438 \u043d\u043e\u0432\u043e\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u044f.<\/p>\n<details class=\"spoiler\">\n<summary>\u041f\u0440\u0438\u043c\u0435\u0440\u044b \u043a\u043e\u0434\u0430<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"sql\">declare   vTime1  number := 0;   vTime2  number := 0;    procedure prc(pID<\/code><\/pre>\n<\/div>\n<\/details>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-335673","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/335673","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=335673"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/335673\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=335673"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=335673"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=335673"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}