{"id":300157,"date":"2020-03-15T15:00:21","date_gmt":"2020-03-15T15:00:21","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=300157"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=300157","title":{"rendered":"\u0410\u043d\u0430\u0442\u043e\u043c\u0438\u044f \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u041d\u0421\u0418"},"content":{"rendered":"\n<div class=\"post__text post__text-html post__text_v1\" id=\"post-content-body\" data-io-article-url=\"https:\/\/habr.com\/ru\/post\/492414\/\"><i>\u0414\u0430\u043d\u043d\u0430\u044f \u0441\u0442\u0430\u0442\u044c\u044f \u043e\u0441\u043d\u043e\u0432\u0430\u043d\u0430 \u043d\u0430 \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u0445 \u0441\u043e\u0431\u044b\u0442\u0438\u044f\u0445, <br \/>   \u0438 \u0432\u0441\u0435 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b \u0432 \u043d\u0435\u0439 \u043d\u0435 \u0432\u044b\u043c\u044b\u0448\u043b\u0435\u043d\u043d\u044b\u0435. (\u0421) <\/i><\/p>\n<p>  \u0412 \u043d\u0430\u0447\u0430\u043b\u0435 \u0445\u043e\u0442\u0435\u043b\u043e\u0441\u044c \u0431\u044b \u043e\u0442\u043c\u0435\u0442\u0438\u0442\u044c, \u0447\u0442\u043e \u0441\u0442\u0430\u0442\u044c\u044f \u043d\u0435 \u043f\u0440\u0438\u0437\u0432\u0430\u043d\u0430 \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u0438\u0437\u043e\u0431\u0440\u0435\u0442\u0435\u043d\u0438\u0435 \u0432\u0435\u043b\u043e\u0441\u0438\u043f\u0435\u0434\u0430, \u043f\u043e\u0442\u043e\u043c\u0443 \u043a\u0430\u043a \u043c\u043d\u043e\u0433\u0438\u0435 \u043f\u0440\u0438\u0451\u043c\u044b \u0443\u0436\u0435 \u0434\u0430\u0432\u043d\u043e \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0442 \u0432 \u043a\u0443\u043b\u044c\u0442\u0443\u0440\u0435 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0431\u0430\u0437 \u0434\u0430\u043d\u043d\u044b\u0445. \u041e\u0434\u043d\u0430\u043a\u043e \u043e\u0431\u043e\u0431\u0449\u0438\u0442\u044c, \u043f\u0440\u043e\u0430\u043d\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043e\u043d\u0438 \u043c\u043e\u0433\u0443\u0442 \u0440\u0435\u0448\u0438\u0442\u044c \u0438 \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u044c, \u043a\u0430\u043a \u0441 \u043d\u0438\u043c\u0438 \u043c\u043e\u0436\u043d\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c. \u0410 \u043f\u0440\u043e\u0431\u043b\u0435\u043c \u0445\u0432\u0430\u0442\u0430\u0435\u0442 \u043d\u0435\u0441\u043c\u043e\u0442\u0440\u044f \u043d\u0430 \u0442\u043e, \u0447\u0442\u043e \u043d\u043e\u0440\u043c\u0430\u0442\u0438\u0432\u043d\u043e-\u0441\u043f\u0440\u0430\u0432\u043e\u0447\u043d\u0430\u044f \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f (\u041d\u0421\u0418) \u043d\u0435 \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0441\u044f \u043a \u0431\u0438\u0437\u043d\u0435\u0441-\u043b\u043e\u0433\u0438\u043a\u0435, \u0430 \u0441\u043a\u043e\u0440\u0435\u0435 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0432 \u043e\u0431\u0441\u043b\u0443\u0436\u0438\u0432\u0430\u043d\u0438\u0438 \u0443 \u043d\u0435\u0451. \u0421\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0439 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u043f\u043e \u0440\u0438\u0441\u043e\u0432\u0430\u043d\u0438\u044e \u043e\u0447\u0435\u0440\u0435\u0434\u043d\u043e\u0439 \u0442\u0430\u0431\u043b\u0438\u0447\u043a\u0438 \u0434\u043b\u044f \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0441\u043f\u0440\u0430\u0432\u043e\u0447\u043d\u0438\u043a\u0430 \u043e\u0447\u0435\u043d\u044c \u0441\u043a\u043e\u0440\u043e \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442 \u043e\u0431\u0440\u0430\u0441\u0442\u0430\u0442\u044c \u043a\u043e\u0441\u0442\u044b\u043b\u044f\u043c\u0438 \u0438\u043b\u0438 \u0442\u0440\u0443\u0434\u043e\u0451\u043c\u043a\u0438\u043c\u0438 \u043f\u0435\u0440\u0435\u0434\u0435\u043b\u043a\u0430\u043c\u0438. <br \/>  <a name=\"habracut\"><\/a><br \/>  \u0412\u043e\u0442 \u0438 \u0432 \u043c\u043e\u0451\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043e\u043a\u0430\u0437\u0430\u043b\u0430\u0441\u044c \u0442\u0430 \u0436\u0435 \u043a\u0430\u0440\u0442\u0438\u043d\u0430 \u2014 \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u0441\u0442\u043e\u0438\u0442 \u043d\u0430 \u043f\u0440\u043e\u0434\u0443\u043a\u0442\u0438\u0432\u0435 \u0431\u043e\u043b\u0435\u0435 \u0434\u0435\u0441\u044f\u0442\u0438 \u043b\u0435\u0442, \u0441\u0442\u0440\u043e\u0438\u043b\u0430\u0441\u044c \u043f\u043e \u0442\u043e\u043c\u0443 \u0436\u0435 \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0443, \u0435\u0441\u043b\u0438 \u0447\u0442\u043e \u043d\u0443\u0436\u043d\u043e, \u0440\u0438\u0441\u0443\u0435\u043c \u0438 \u0432\u043a\u043b\u044e\u0447\u0430\u0435\u043c \u0432 \u043e\u0431\u043e\u0440\u043e\u0442. \u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u0431\u044b\u043b\u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u044b \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0442\u0430\u0431\u043b\u0438\u0446 \u0434\u043b\u044f \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0440\u0430\u0437\u043d\u043e\u0433\u043e \u0440\u043e\u0434\u0430 \u043e\u0431\u043e\u0440\u0443\u0434\u043e\u0432\u0430\u043d\u0438\u044f. \u041d\u043e \u0432\u043e\u0442 \u043f\u0440\u0438\u0448\u0451\u043b \u0447\u0430\u0441 \u0425, \u043a\u043e\u0433\u0434\u0430 \u0441\u0442\u0430\u043b\u043e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0435\u0449\u0451 \u043f\u0430\u0440\u0443 \u0442\u0430\u0431\u043b\u0438\u0446 \u0434\u043b\u044f \u043d\u043e\u0432\u043e\u0433\u043e \u043e\u0431\u043e\u0440\u0443\u0434\u043e\u0432\u0430\u043d\u0438\u044f \u0438 \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u0432\u0441\u0435 (\u0432\u043a\u043b\u044e\u0447\u0430\u044f \u0441\u0442\u0430\u0440\u044b\u0435) \u0434\u043e\u043b\u0436\u043d\u044b \u0432\u0445\u043e\u0434\u0438\u0442\u044c \u0432 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d\u043d\u0443\u044e \u0433\u0440\u0443\u043f\u043f\u0443. \u042d\u0442\u043e \u0437\u043d\u0430\u0447\u0438\u0442, \u0447\u0442\u043e \u0441\u0441\u044b\u043b\u043a\u0438 \u043d\u0430 \u0440\u0430\u0437\u043d\u044b\u0435 \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u0431\u044b\u0442\u044c \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u044b \u0432 \u043a\u0440\u043e\u0441\u0441-\u0442\u0430\u0431\u043b\u0438\u0446\u0443 \u043c\u0435\u0436\u0434\u0443 \u0433\u0440\u0443\u043f\u043f\u043e\u0439 \u0438 \u0432\u0441\u0435\u043c\u0438 \u043f\u044f\u0442\u044c\u044e \u0432\u0438\u0434\u0430\u043c\u0438 \u043e\u0431\u043e\u0440\u0443\u0434\u043e\u0432\u0430\u043d\u0438\u044f, \u0442\u043e \u0435\u0441\u0442\u044c \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0441\u0432\u043e\u0451 \u043f\u043e\u043b\u044f \u0441 \u043a\u043e\u043d\u0441\u0442\u0440\u0435\u0438\u043d\u0442\u043e\u043c \u043d\u0430 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0443\u044e \u0442\u0430\u0431\u043b\u0438\u0446\u0443. \u0410 \u0435\u0441\u043b\u0438 \u0435\u0449\u0451 \u043e\u0434\u043d\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u0441\u044f, \u043c\u0435\u043d\u044f\u0442\u044c \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443. \u0418 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0443 \u043d\u0443\u0436\u043d\u043e \u0434\u0435\u043b\u0430\u0442\u044c \u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u0442\u043e\u0433\u043e, \u043a\u0430\u043a\u0438\u0435 \u043f\u043e\u043b\u044f \u0437\u0430\u043f\u043e\u043b\u043d\u0435\u043d\u044b. \u0412\u043e\u0442 \u0438 \u0432\u043e\u0437\u043d\u0438\u043a\u0430\u0435\u0442 <b>\u043f\u0435\u0440\u0432\u0430\u044f \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430<\/b>, <i>\u043a\u0430\u043a \u0440\u0430\u0437\u043d\u044b\u0435 \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u043e\u0431\u043e\u0431\u0449\u0438\u0442\u044c, \u0447\u0442\u043e \u0431\u044b \u0441 \u043d\u0438\u043c\u0438 \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u043e \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0438 \u043d\u0435 \u043c\u0435\u043d\u044f\u0442\u044c \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443, \u0435\u0441\u043b\u0438 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0435\u0449\u0451 \u043e\u0434\u043d\u0430<\/i>. \u0417\u0430\u043c\u0435\u0447\u0430\u0442\u0435\u043b\u044c\u043d\u0430\u044f \u043c\u044b\u0441\u043b\u044c, \u0441\u043e\u0437\u0434\u0430\u0451\u043c \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u0443\u044e \u0442\u0430\u0431\u043b\u0438\u0447\u043a\u0443, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043f\u0440\u0438\u0437\u0432\u0430\u043d\u0430 \u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0430\u0431\u0441\u0442\u0440\u0430\u043a\u0442\u043d\u043e\u0435 \u043f\u043e\u043d\u044f\u0442\u0438\u0435 \u043e\u0431\u043e\u0440\u0443\u0434\u043e\u0432\u0430\u043d\u0438\u0435 \u0441 \u0443\u043a\u0430\u0437\u0430\u043d\u0438\u0435\u043c \u0442\u0438\u043f\u0430, \u0430 \u0442\u043e\u0433\u0434\u0430 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u0442\u0430\u0431\u043b\u0438\u0447\u043a\u0438 \u0441\u0441\u044b\u043b\u0430\u044e\u0442\u0441\u044f \u043f\u043e \u0432\u043d\u0435\u0448\u043d\u0435\u043c\u0443 \u043a\u043b\u044e\u0447\u0443 \u043d\u0430 \u0441\u0432\u043e\u0435\u0433\u043e \u0440\u043e\u0434\u0438\u0442\u0435\u043b\u044f. \u041d\u0430 \u044d\u0442\u043e\u0439 \u0440\u0430\u0434\u043e\u0441\u0442\u043d\u043e\u0439 \u0432\u043e\u043b\u043d\u0435 \u043c\u044b \u0437\u0430\u043b\u0438\u0432\u0430\u0435\u043c \u0432 \u0441\u043e\u0437\u0434\u0430\u043d\u043d\u0443\u044e \u0442\u0430\u0431\u043b\u0438\u0447\u043a\u0443 \u0437\u0430\u043f\u0438\u0441\u0438 \u0438\u0437 \u043e\u0434\u043d\u043e\u0439 \u0438 \u043f\u044b\u0442\u0430\u0435\u043c\u0441\u044f \u0442\u043e\u0436\u0435 \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0434\u043b\u044f \u0434\u0440\u0443\u0433\u043e\u0439. \u041d\u043e \u0447\u0442\u043e-\u0442\u043e \u043f\u043e\u0448\u043b\u043e \u043d\u0435 \u0442\u0430\u043a, \u0441\u0440\u0430\u0431\u043e\u0442\u0430\u043b\u043e \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0435 \u043f\u0435\u0440\u0432\u0438\u0447\u043d\u043e\u0433\u043e \u043a\u043b\u044e\u0447\u0430, \u043a \u0447\u0435\u043c\u0443 \u0431\u044b \u044d\u0442\u043e? \u0410 \u043a \u0442\u043e\u043c\u0443, \u0447\u0442\u043e \u043d\u0430 \u0437\u0430\u0440\u0435 \u0431\u0443\u0440\u043d\u043e\u0439 \u043c\u043e\u043b\u043e\u0434\u043e\u0441\u0442\u0438 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0439 \u0442\u0430\u0431\u043b\u0438\u0447\u043a\u0435 \u0431\u044b\u043b\u0438 \u0441\u0432\u043e\u0438 \u0441\u0438\u043a\u0432\u0435\u043d\u0441\u044b. \u041a\u043e\u043d\u0435\u0447\u043d\u043e, \u0441\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0435\u043c \u044d\u0442\u043e \u0431\u0435\u0437\u043e\u0431\u0440\u0430\u0437\u0438\u0435 \u043f\u043e\u043f\u0440\u0430\u0432\u0438\u043b\u0438, \u043d\u043e \u0441\u0442\u0430\u0440\u044b\u0435 \u043a\u043b\u044e\u0447\u0438 \u0432\u0441\u0451 \u0440\u0430\u0432\u043d\u043e \u043e\u0441\u0442\u0430\u043b\u0438\u0441\u044c. \u0411\u043e\u043b\u0435\u0435 \u0442\u043e\u0433\u043e, \u043e\u043d\u0438 \u043a\u043e\u0440\u043d\u044f\u043c\u0438 \u043f\u0440\u043e\u0440\u043e\u0441\u043b\u0438 \u043f\u043e \u0432\u043d\u0435\u0448\u043d\u0438\u043c \u043a\u043b\u044e\u0447\u0430\u043c \u0441 \u0434\u0440\u0443\u0433\u0438\u043c\u0438 \u0442\u0430\u0431\u043b\u0438\u0446\u0430\u043c. \u0424\u0438\u043a\u0441\u0438\u0440\u0443\u0435\u043c <b>\u0432\u0442\u043e\u0440\u0443\u044e \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0443<\/b>, <i>\u0441\u0432\u044f\u0437\u0430\u043d\u043d\u0443\u044e \u0441\u043e \u0441\u043a\u0432\u043e\u0437\u043d\u043e\u0439 \u043d\u0443\u043c\u0435\u0440\u0430\u0446\u0438\u0435\u0439 \u0432\u0441\u0435\u0445 \u0441\u043f\u0440\u0430\u0432\u043e\u0447\u043d\u0438\u043a\u043e\u0432<\/i>. <\/p>\n<p>  \u041d\u0430 \u044d\u0442\u043e\u043c \u043c\u0443\u0447\u0435\u043d\u0438\u044f \u0441 \u0442\u0430\u0431\u043b\u0438\u0446\u0430\u043c\u0438 \u043e\u0431\u043e\u0440\u0443\u0434\u043e\u0432\u0430\u043d\u0438\u044f \u043d\u0435 \u0437\u0430\u043a\u043e\u043d\u0447\u0438\u043b\u0438\u0441\u044c. \u041f\u043e\u0442\u043e\u043c\u0443 \u043a\u0430\u043a \u043f\u043e \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u043c \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u044f\u043c \u043e\u0431\u043e\u0440\u0443\u0434\u043e\u0432\u0430\u043d\u0438\u0435 \u0438\u043c\u0435\u0435\u0442 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0435 \u0445\u0430\u0440\u0430\u043a\u0442\u0435\u0440\u0438\u0441\u0442\u0438\u043a\u0438, \u0431\u043e\u043b\u0435\u0435 \u0442\u043e\u0433\u043e \u0438\u0445 \u0447\u0438\u0441\u043b\u043e \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e, \u0430 \u043e\u0434\u043d\u0430 \u0445\u0430\u0440\u0430\u043a\u0442\u0435\u0440\u0438\u0441\u0442\u0438\u043a\u0430 \u043c\u043e\u0436\u0435\u0442 \u0438\u043c\u0435\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439. \u0410 \u0437\u043d\u0430\u0447\u0438\u0442 \u043f\u043e\u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f <b>\u0442\u0440\u0435\u0442\u044c\u044f \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430<\/b>, <i>\u0430 \u0438\u043c\u0435\u043d\u043d\u043e \u0438\u043c\u0435\u0442\u044c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0445\u0440\u0430\u043d\u0438\u0442\u044c \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0435 \u0447\u0438\u0441\u043b\u043e \u0445\u0430\u0440\u0430\u043a\u0442\u0435\u0440\u0438\u0441\u0442\u0438\u043a \u043a\u0430\u043a\u043e\u0439-\u0442\u043e \u0437\u0430\u043f\u0438\u0441\u0438<\/i>. <\/p>\n<p>  \u0412\u0440\u043e\u0434\u0435 \u043a\u0430\u043a \u0441 \u044d\u0442\u0438\u043c \u0441\u043f\u0440\u0430\u0432\u0438\u043b\u0438\u0441\u044c, \u043d\u043e \u0437\u0430\u043a\u0430\u0437\u0447\u0438\u043a \u043d\u0435 \u0434\u0440\u0435\u043c\u043b\u0435\u0442, \u0443 \u043d\u0435\u0433\u043e \u0432\u0441\u0435\u0433\u0434\u0430 \u0435\u0441\u0442\u044c \u043d\u0430\u0433\u043e\u0442\u043e\u0432\u0435 \u0447\u0442\u043e-\u043d\u0438\u0431\u0443\u0434\u044c \u043d\u043e\u0432\u0435\u043d\u044c\u043a\u043e\u0435. \u0418 \u0432\u043e\u0442 \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442 \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u0435 \u2014 \u0432\u0441\u0435 \u0441\u043f\u0440\u0430\u0432\u043e\u0447\u043d\u0438\u043a\u0438 \u0438\u0441\u0442\u043e\u0440\u0438\u0447\u043d\u044b\u0435 (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u043f\u0440\u043e\u0434\u0443\u043a\u0442\u0430 \u0431\u044b\u043b\u043e \u043e\u0434\u043d\u0438\u043c, \u0430 \u043f\u043e\u0442\u043e\u043c \u0435\u0433\u043e \u043f\u0435\u0440\u0435\u0438\u043c\u0435\u043d\u043e\u0432\u0430\u043b\u0438, \u0438 \u043f\u043e \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u043c \u043d\u0430 \u0440\u0430\u0437\u043d\u044b\u0435 \u0434\u0430\u0442\u044b \u043d\u0443\u0436\u043d\u043e \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u0430\u043a\u0442\u0443\u0430\u043b\u044c\u043d\u043e\u0435 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435). \u0421\u0430\u043c\u043e \u043f\u043e \u0441\u0435\u0431\u0435 \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u0435 \u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u043e\u0435, \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u0441\u043a\u0430\u0436\u0435\u0448\u044c. \u0410 \u0435\u0441\u043b\u0438 \u0435\u0449\u0451 \u0432 \u043e\u0442\u0434\u0435\u043b\u0435 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0435\u0441\u0442\u044c \u043a\u0442\u043e-\u0442\u043e, \u043a\u0442\u043e \u043f\u0440\u043e\u0445\u043e\u0434\u0438\u0442 \u0438\u0441\u043f\u044b\u0442\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u0441\u0440\u043e\u043a, \u0442\u0430\u043a \u0432\u043e\u043e\u0431\u0449\u0435 \u0432\u0441\u0451 \u0432 \u0448\u043e\u043a\u043e\u043b\u0430\u0434\u0435, \u043c\u043e\u0436\u043d\u043e \u0438 \u043d\u0435 \u0437\u0430\u043c\u0435\u0442\u0438\u0442\u044c, \u0447\u0442\u043e \u044d\u0442\u043e \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430. \u041e\u0434\u043d\u0430\u043a\u043e \u043f\u0440\u043e\u0445\u043e\u0434\u0438\u0442 \u0432\u0441\u0451, \u043a\u0430\u043a \u043e\u0431\u044b\u0447\u043d\u043e \u2014 \u0441 \u043f\u043e\u043b\u043d\u044b\u043c \u0430\u0432\u0440\u0430\u043b\u043e\u043c, \u0430 \u0442\u0443\u0442 \u0435\u0449\u0451 \u044d\u0442\u0438\u043c \u043d\u0443\u0436\u043d\u043e \u0437\u0430\u043d\u0438\u043c\u0430\u0442\u044c\u0441\u044f. \u0421\u043e\u0437\u0434\u0430\u0451\u043c \u0442\u0430\u0431\u043b\u0438\u0447\u043a\u0438, \u0434\u0443\u0431\u043b\u0438\u0440\u0443\u044e\u0449\u0438\u0435 \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0445 \u0441\u043f\u0440\u0430\u0432\u043e\u0447\u043d\u0438\u043a\u043e\u0432 \u0434\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u0442\u0430\u043c \u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0445\u0440\u043e\u043d\u043e\u043b\u043e\u0433\u0438\u044e \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439 \u0441\u043f\u0440\u0430\u0432\u043e\u0447\u043d\u0438\u043a\u0430. \u041d\u043e, \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u044f \u044d\u0442\u0438 \u0442\u0430\u0431\u043b\u0438\u0446\u044b, \u043c\u044b \u0437\u0430\u043e\u0434\u043d\u043e \u0441\u043e\u0437\u0434\u0430\u0451\u043c \u0441\u0435\u0431\u0435 <b>\u0447\u0435\u0442\u0432\u0451\u0440\u0442\u0443\u044e \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0443<\/b>, <i>\u0442\u0435\u043f\u0435\u0440\u044c \u0432 \u043a\u043e\u0434\u0435 \u043d\u0443\u0436\u043d\u043e \u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u0434\u0430\u0442\u044b \u043e\u0431\u0440\u0430\u0449\u0430\u0442\u044c\u0441\u044f \u0442\u043e \u043b\u0438 \u043a \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u0442\u0430\u0431\u043b\u0438\u0446\u0435, \u0442\u043e \u043b\u0438 \u043a \u0438\u0441\u0442\u043e\u0440\u0438\u0447\u0435\u0441\u043a\u043e\u0439<\/i>. <\/p>\n<p>  \u041d\u0443 \u043c\u044b \u0436\u0435 \u043c\u043e\u043b\u043e\u0434\u0446\u044b, \u043c\u044b \u0438 \u044d\u0442\u043e \u043f\u043e\u0431\u0435\u0434\u0438\u043b\u0438))) \u0422\u0435\u043f\u0435\u0440\u044c, \u043f\u043e\u043f\u0438\u0432\u0430\u044f \u0447\u0430\u0439 \u0438\u0437 \u0441\u0432\u043e\u0435\u0439 \u043a\u0440\u0443\u0436\u043a\u0438, \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0448\u044c \u0434\u0438\u0441\u043a\u0443\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441 \u0434\u0440\u0443\u0433\u0438\u043c\u0438 \u043a\u043e\u043b\u043b\u0435\u0433\u0430\u043c\u0438 \u043d\u0430 \u0442\u0435\u043c\u0443, \u0447\u0442\u043e \u0438\u043c \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u043b\u043e\u0441\u044c \u0440\u0435\u0448\u0430\u0442\u044c, \u0438 \u043f\u043e\u043d\u0438\u043c\u0430\u0435\u0448\u044c, \u0447\u0442\u043e \u0441\u043f\u0438\u0441\u043e\u043a \u043f\u0440\u043e\u0431\u043b\u0435\u043c \u043f\u043e\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f. \u0412 \u043e\u0431\u0441\u0443\u0436\u0434\u0435\u043d\u0438\u0438 \u0441\u0442\u043e\u0438\u0442 \u0432\u043e\u043f\u0440\u043e\u0441 \u043a\u0430\u043a \u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0432\u0435\u0440\u0441\u0438\u0438 \u043e\u0434\u043d\u043e\u0439 \u0438 \u0442\u043e\u0439 \u0436\u0435 \u0437\u0430\u043f\u0438\u0441\u0438. \u0425\u043e\u0447\u0443 \u043e\u0433\u043e\u0432\u043e\u0440\u0438\u0442\u0441\u044f, \u0447\u0442\u043e \u0432\u0435\u0440\u0441\u0438\u044f, \u044d\u0442\u043e \u043d\u0435 \u0442\u043e, \u0447\u0442\u043e \u0443\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0443 \u0438\u0441\u0442\u043e\u0440\u0438\u0447\u043d\u043e\u0441\u0442\u0438. \u0412 \u0438\u0441\u0442\u043e\u0440\u0438\u0447\u043d\u043e\u0441\u0442\u0438 \u043f\u043e\u043d\u044f\u0442\u043d\u043e, \u0434\u043e \u0442\u0430\u043a\u043e\u0433\u043e-\u0442\u043e \u0447\u0438\u0441\u043b\u0430 \u0431\u044b\u043b\u043e \u043e\u0434\u043d\u043e \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435, \u0430 \u043d\u0430\u0447\u0438\u043d\u0430\u044f \u0441 \u044d\u0442\u043e\u0439 \u0434\u0430\u0442\u044b \u0430\u043a\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u043c \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u0434\u0440\u0443\u0433\u043e\u0435. \u0410 \u0432 \u0432\u0435\u0440\u0441\u0438\u043e\u043d\u043d\u043e\u0441\u0442\u0438 \u043f\u043e\u0434\u0440\u0430\u0437\u0443\u043c\u0435\u0432\u0430\u0435\u0442\u0441\u044f, \u0447\u0442\u043e \u0437\u0430\u043f\u0438\u0441\u044c \u0431\u044b\u043b\u0430 \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0430 \u0441 \u043e\u0448\u0438\u0431\u043a\u043e\u0439, \u0430 \u0447\u0435\u0440\u0435\u0437 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0447\u0430\u0441\u043e\u0432 \u044d\u0442\u043e \u043f\u043e\u043d\u044f\u043b\u0438 \u0438 \u0435\u0451 \u0438\u0437\u043c\u0435\u043d\u0438\u043b\u0438, \u0438 \u043d\u0443\u0436\u043d\u043e \u0437\u043d\u0430\u0442\u044c \u0432\u0441\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u044d\u0442\u043e\u0439 \u0437\u0430\u043f\u0438\u0441\u0438. \u0412\u043e-\u043f\u0435\u0440\u0432\u044b\u0445, \u0437\u0434\u0435\u0441\u044c \u0434\u043e\u043b\u0436\u043d\u043e \u0431\u044b\u0442\u044c \u0434\u0440\u043e\u0431\u043b\u0435\u043d\u0438\u0435 \u043d\u0430 \u0432\u0440\u0435\u043c\u044f, \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0441\u0443\u0442\u043a\u0438. \u0410 \u0432\u043e-\u0432\u0442\u043e\u0440\u044b\u0445, \u0442\u0430\u043a\u0438\u0435 \u0441\u043b\u0435\u0434\u044b \u043d\u0443\u0436\u043d\u044b \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u0440\u0430\u0437\u0431\u043e\u0440\u043e\u043a. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0437\u0430\u043f\u043e\u043b\u043d\u044f\u043b\u0438 \u043f\u0440\u0430\u0439\u0441, \u043e\u0448\u0438\u0431\u043b\u0438\u0441\u044c, \u0443\u0441\u043f\u0435\u043b\u0438 \u0442\u043e\u0432\u0430\u0440 \u043f\u0440\u043e\u0434\u0430\u0442\u044c \u043f\u043e \u0442\u0430\u043a\u043e\u0439 \u0446\u0435\u043d\u0435, \u0430 \u043f\u043e\u0442\u043e\u043c \u043f\u043e\u043f\u0440\u0430\u0432\u0438\u043b\u0438, \u043d\u043e \u0432 \u043a\u043e\u043d\u0446\u0435 \u0434\u043d\u044f \u0441\u043b\u0443\u0447\u0438\u043b\u0441\u044f \u0434\u0435\u0431\u0430\u043b\u0430\u043d\u0441. \u041e\u0434\u043d\u0430\u043a\u043e \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u0434\u043b\u044f \u0442\u0430\u043a\u0438\u0445 \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u0439 \u043c\u0435\u043d\u044f \u043b\u0438\u0447\u043d\u043e \u043d\u0430\u043f\u0440\u044f\u0433\u043b\u043e, \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u043b\u0430\u0441\u044c \u0432\u0441\u0435 \u0442\u0430\u043a\u0438\u0435 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0432 \u0441\u0430\u043c\u043e\u0439 \u0442\u0430\u0431\u043b\u0438\u0446\u0435. \u041d\u0435 \u0431\u0443\u0434\u0443 \u0443\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0442\u044c \u0445\u043e\u043b\u0438\u0432\u0430\u0440 \u043d\u0430 \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0442\u0430\u043a \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e, \u043d\u043e \u0434\u043b\u044f \u043c\u0435\u043d\u044f \u0442\u043e\u0447\u043d\u043e \u043e\u0431\u043e\u0437\u043d\u0430\u0447\u0438\u043b\u0430\u0441\u044c <b>\u043f\u044f\u0442\u0430\u044f \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430<\/b>, <i>\u0430 \u0438\u043c\u0435\u043d\u043d\u043e \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439 \u0437\u0430\u043f\u0438\u0441\u0435\u0439<\/i>. <\/p>\n<p>  \u0418\u0442\u0430\u043a, \u043e\u0431\u043e\u0431\u0449\u0430\u044f \u0432\u044b\u0448\u0435\u0441\u043a\u0430\u0437\u0430\u043d\u043d\u043e\u0435 \u043c\u044b \u0432\u0438\u0434\u0438\u043c \u043f\u0435\u0440\u0435\u0434 \u0441\u043e\u0431\u043e\u0439 \u043f\u044f\u0442\u044c \u0443\u0432\u0435\u0441\u0438\u0441\u0442\u044b\u0445 \u0433\u0440\u0430\u0431\u0435\u043b\u044c. \u0422\u0435\u043f\u0435\u0440\u044c \u043d\u0430\u0448\u0430 \u0437\u0430\u0434\u0430\u0447\u0430 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c \u0441\u0442\u0440\u0430\u0442\u0435\u0433\u0438\u044e, \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0449\u0443\u044e \u043e\u0431\u043e\u0439\u0442\u0438 \u0438 \u043d\u0435 \u043d\u0430\u0441\u0442\u0443\u043f\u0438\u0442\u044c \u043d\u0430 \u043d\u0438\u0445. <\/p>\n<h2>\u0421\u043a\u043e\u043b\u044c\u043a\u043e \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0441\u0442\u0443\u043f\u0430\u0442\u044c \u043d\u0430 \u043e\u0434\u043d\u0438 \u0438 \u0442\u0435 \u0436\u0435 \u0433\u0440\u0430\u0431\u043b\u0438, \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u0441\u043a\u0438\u043d\u0438\u043c\u0441\u044f \u0438 \u043a\u0443\u043f\u0438\u043c \u043d\u043e\u0432\u044b\u0435<\/h2>\n<p>  \u041d\u0430\u0447\u0438\u043d\u0430\u044f \u043f\u0440\u043e\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441\u0438\u0441\u0442\u0435\u043c\u0443 \u0441 \u043d\u0443\u043b\u044f, \u043d\u0438\u043a\u0442\u043e \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u043f\u0440\u0435\u0434\u0443\u0433\u0430\u0434\u0430\u0442\u044c \u043f\u0443\u0442\u044c \u0435\u0451 \u0440\u0430\u0437\u0432\u0438\u0442\u0438\u044f, \u0430 \u0437\u043d\u0430\u0447\u0438\u0442 \u043d\u0435 \u0441\u043c\u043e\u0436\u0435\u0442 \u0441\u043a\u0430\u0437\u0430\u0442\u044c \u043d\u0430 \u043a\u0430\u043a\u043e\u043c \u0443\u0440\u043e\u0432\u043d\u0435 \u043f\u0440\u0438\u0434\u0451\u0442\u0441\u044f \u043e\u0431\u043e\u0431\u0449\u0430\u0442\u044c, \u043a\u0430\u043a \u0432 \u043e\u043f\u0438\u0441\u0430\u043d\u043d\u043e\u043c \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u0441 \u043e\u0431\u043e\u0440\u0443\u0434\u043e\u0432\u0430\u043d\u0438\u0435\u043c. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0438\u043c\u0435\u0435\u0442 \u0441\u043c\u044b\u0441\u043b \u0441\u0440\u0430\u0437\u0443 \u0437\u0430\u0434\u0430\u0442\u044c \u0430\u0431\u0441\u0442\u0440\u0430\u043a\u0442\u043d\u0443\u044e \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u044c, \u0440\u0430\u0441\u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u044f\u0435\u043c\u0443\u044e \u043d\u0430 \u0432\u0441\u0435 \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u041d\u0421\u0418. \u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u0432\u0441\u0435 \u0441\u043f\u0440\u0430\u0432\u043e\u0447\u043d\u0438\u043a\u0438 \u0431\u0443\u0434\u0443\u0442 \u0438\u043c\u0435\u0442\u044c \u043f\u0440\u043e\u043e\u0431\u0440\u0430\u0437 \u0432 \u0435\u0434\u0438\u043d\u043e\u043c \u0441\u043f\u0440\u0430\u0432\u043e\u0447\u043d\u0438\u043a\u0435 \u0441 \u0440\u0430\u0437\u0434\u0435\u043b\u0435\u043d\u0438\u0435\u043c \u043d\u0430 \u0442\u0438\u043f\u044b. <\/p>\n<pre><code class=\"sql\">CREATE TABLE nsi_type (     nsi_type_id     NUMBER(10) NOT NULL,     name            VARCHAR2(50) NOT NULL,     descr           VARCHAR2(100),     table_name      VARCHAR2(50) NOT NULL,     CONSTRAINT nsi_type_pk PRIMARY KEY (nsi_type_id) );  CREATE TABLE nsi (     nsi_id      NUMBER(10) NOT NULL,     nsi_type_id NUMBER(10) NOT NULL,     descr       VARCHAR2(100),     create_date DATE NOT NULL,     modif_date  DATE NOT NULL,     begin_date  DATE,     CONSTRAINT nsi_nsi_type_fk FOREIGN KEY (nsi_type_id) REFERENCES nsi_type (nsi_type_id),     CONSTRAINT nsi_uk UNIQUE(nsi_type_id, nsi_id) );  CREATE SEQUENCE nsi_seq   MINVALUE 1   START WITH 1   INCREMENT BY 1   CACHE 20; <\/code><\/pre>\n<p>  \u0422\u0430\u0431\u043b\u0438\u0446\u0430 nsi_type \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u0430\u044f, \u0437\u0430\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u043f\u043e \u043c\u0435\u0440\u0435 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043d\u043e\u0432\u044b\u0445 \u0441\u043f\u0440\u0430\u0432\u043e\u0447\u043d\u0438\u043a\u043e\u0432. \u0422\u0430\u0431\u043b\u0438\u0446\u0430 nsi \u0445\u0440\u0430\u043d\u0438\u0442 \u043a\u043b\u044e\u0447\u0438 \u0438 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0435 \u043f\u043e\u043b\u044f. \u0417\u0430\u043e\u0434\u043d\u043e \u0441\u043e\u0437\u0434\u0430\u0451\u043c \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u0441\u0438\u043a\u0432\u0435\u043d\u0441 \u0438 \u0442\u0435\u043c \u0441\u0430\u043c\u044b\u043c <b>\u0437\u0430\u043a\u0440\u044b\u0432\u0430\u0435\u043c \u0432\u0442\u043e\u0440\u0443\u044e \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0443<\/b>. <\/p>\n<p>  \u0422\u0430\u043a \u0436\u0435 \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u043f\u0430\u043a\u0435\u0442, \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0438\u0439 \u043e\u0441\u043d\u043e\u0432\u043d\u0443\u044e \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u043f\u043e \u0440\u0430\u0431\u043e\u0442\u0435 \u0441\u043e \u0441\u043f\u0440\u0430\u0432\u043e\u0447\u043d\u0438\u043a\u0430\u043c\u0438 \u0438 \u0431\u0443\u0434\u0435\u043c \u0435\u0433\u043e \u043f\u043e\u0441\u0442\u0435\u043f\u0435\u043d\u043d\u043e \u0437\u0430\u043f\u043e\u043b\u043d\u044f\u0442\u044c. <\/p>\n<pre><code class=\"sql\">create or replace NONEDITIONABLE PACKAGE BODY pkg_nsi IS      \/* \u041f\u043e \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u044e \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442\u0441\u044f \u0442\u0438\u043f \u041d\u0421\u0418     *  @param p_table_name VARCHAR2 - \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u0442\u0430\u0431\u043b\u0438\u0446\u044b     *  @return nsi.nsi_type_id%TYPE - \u0442\u0438\u043f \u0438\u0437 \u0442\u0430\u0431\u043b\u0438\u0446\u044b nsi_type     *\/     FUNCTION get_type_id(p_table_name IN VARCHAR2)      RETURN nsi_type.nsi_type_id%TYPE     AS        v_type_id \tnsi_type.nsi_type_id%TYPE;      BEGIN         SELECT nsi_type_id INTO v_type_id          FROM nsi_type         WHERE TRIM(LOWER(table_name)) = TRIM(LOWER(p_table_name));          RETURN v_type_id;     END get_type_id;      \/* \u0412\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 id \u0438\u0437 nsi_seq     *  @return nsi.nsi_id%TYPE - id \u0438\u0437 nsi_seq     *\/     FUNCTION get_nsi_id      RETURN nsi.nsi_id%TYPE     AS        v_id \tnsi.nsi_id%TYPE;      BEGIN             SELECT nsi_seq.NEXTVAL INTO v_id FROM DUAL;         RETURN v_id;     END get_nsi_id;      \/* \u041f\u043e \u0442\u0438\u043f\u0443 \u0441\u043f\u0440\u0430\u0432\u043e\u0447\u043d\u0438\u043a\u0430 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u043d\u0430\u0438\u043c\u0435\u043d\u043e\u0432\u0430\u043d\u0438\u0435 \u0442\u0430\u0431\u043b\u0438\u0446\u044b     *  @param p_nsi_type_id nsi_type.nsi_type_id%TYPE - \u0442\u0438\u043f \u0438\u0437 \u0442\u0430\u0431\u043b\u0438\u0446\u044b nsi_type      *  @return nsi_type.table_name%TYPE - \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u0442\u0430\u0431\u043b\u0438\u0446\u044b     *\/     FUNCTION get_table_name(p_nsi_type_id IN nsi_type.nsi_type_id%TYPE)      RETURN nsi_type.table_name%TYPE     AS        v_table_name nsi_type.table_name%TYPE;      BEGIN         SELECT table_name INTO v_table_name          FROM nsi_type         WHERE nsi_type_id = p_nsi_type_id;          RETURN v_table_name;     END get_table_name;      \/* \u0414\u043b\u044f \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d\u043d\u043e\u0433\u043e \u0441\u043f\u0440\u0430\u0432\u0447\u043e\u043d\u0438\u043a\u0430 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0438\u0437 \u0442\u0430\u0431\u043b\u0438\u0446\u044b nsi     *  @param p_nsi_id nsi.nsi_id%TYPE - \u043a\u043b\u044e\u0447 \u0441\u043f\u0440\u0430\u0432\u043e\u0447\u043d\u0438\u043a\u0430      *  @param p_nsi_type_id nsi_type.nsi_type_id%TYPE - \u0442\u0438\u043f \u0441\u043f\u0440\u0430\u0432\u043e\u0447\u043d\u0438\u043a\u0430      *  @return nsi.descr%TYPE - \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435     *\/     FUNCTION get_nsi_descr (         p_nsi_id        IN nsi.nsi_id%TYPE,         p_nsi_type_id   IN nsi.nsi_type_id%TYPE)      RETURN nsi.descr%TYPE     AS        v_nsi_descr  nsi.descr%TYPE;      BEGIN         SELECT descr            INTO v_nsi_descr            FROM nsi          WHERE nsi_id = p_nsi_id            AND nsi_type_id = p_nsi_type_id;          RETURN v_nsi_descr;     END get_nsi_descr; ... END pkg_nsi; <\/code><\/pre>\n<p>  \u0417\u0434\u0435\u0441\u044c \u043f\u043e\u043a\u0430 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u044b \u0432\u0441\u043f\u043e\u043c\u043e\u0433\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0434\u043b\u044f \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0435\u043d\u0438\u044f \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0439 \u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b.<\/p>\n<p>  \u0418\u0442\u0430\u043a \u0441\u0442\u043e\u0438\u0442 \u0437\u0430\u0434\u0430\u0447\u0430 \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0441\u043f\u0440\u0430\u0432\u043e\u0447\u043d\u0438\u043a \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u0430\u0446\u0438\u0439, \u043a\u0443\u0434\u0430 \u0436\u0435 \u0431\u0435\u0437 \u043d\u0435\u0433\u043e, \u043b\u044e\u0431\u043e\u0435 \u043f\u0440\u0435\u0434\u043f\u0440\u0438\u044f\u0442\u0438\u0435 \u043a\u043e\u043d\u0442\u0430\u043a\u0442\u0438\u0440\u0443\u0435\u0442 \u0441\u043e \u0441\u0442\u043e\u0440\u043e\u043d\u043d\u0438\u043c\u0438 \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u0430\u0446\u0438\u044f\u043c\u0438 \u2014 \u044d\u0442\u043e \u0438 \u043f\u043e\u0441\u0442\u0430\u0432\u0449\u0438\u043a\u0438, \u0438 \u043a\u043b\u0438\u0435\u043d\u0442\u044b, \u0438 \u043f\u0430\u0440\u0442\u043d\u0451\u0440\u044b. \u0421\u0440\u0430\u0437\u0443 \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0439 \u0442\u0438\u043f \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0443 nsi_type \u0438 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u043c \u0442\u0430\u0431\u043b\u0438\u0446\u0443 nsi_organization. <\/p>\n<pre><code class=\"sql\">CREATE TABLE nsi_organization (     nsi_id      NUMBER(10) NOT NULL,     name        VARCHAR2(50) NOT NULL,     full_name   VARCHAR2(100) NOT NULL,     inn         VARCHAR2(12) NOT NULL,     CONSTRAINT nsi_organization_pk PRIMARY KEY (nsi_id),     CONSTRAINT nsi_organization_nsi_fk FOREIGN KEY (nsi_id) REFERENCES nsi (nsi_id) );  INSERT INTO nsi_type (nsi_type_id, name, descr, table_name)  VALUES (11, '\u041e\u0440\u0433\u0430\u043d\u0438\u0437\u0430\u0446\u0438\u044f', '\u0410\u043a\u0446\u0438\u043e\u043d\u0435\u0440\u043d\u043e\u0435 \u043e\u0431\u0449\u0435\u0441\u0442\u0432\u043e, \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u044f, \u0444\u0438\u043b\u0438\u0430\u043b, \u043f\u0440\u0435\u0434\u043f\u0440\u0438\u044f\u0442\u0438\u0435', 'nsi_organization'); <\/code><\/pre>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c, \u043f\u043e\u043a\u0430 \u043d\u0435 \u043f\u043e\u0437\u0434\u043d\u043e, \u043d\u0443\u0436\u043d\u043e \u0432\u0441\u043f\u043e\u043c\u043d\u0438\u0442\u044c \u043f\u0440\u043e \u0433\u0440\u0430\u0431\u043b\u0438 \u0441 \u043d\u043e\u043c\u0435\u0440\u043e\u043c \u00ab\u043f\u044f\u0442\u044c\u00bb. \u0415\u0441\u043b\u0438 \u043d\u0430\u0447\u043d\u0451\u043c \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0442\u044c \u0437\u0430\u043f\u0438\u0441\u0438 \u0432 \u0441\u043e\u0437\u0434\u0430\u043d\u043d\u0443\u044e \u0442\u0430\u0431\u043b\u0438\u0446\u0443 \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u0430\u0446\u0438\u0439, \u0442\u043e \u044d\u0442\u043e \u0441\u043e\u0431\u044b\u0442\u0438\u0435 \u043d\u0443\u0436\u043d\u043e \u0433\u0434\u0435-\u0442\u043e \u0444\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u0442\u044c. <\/p>\n<pre><code class=\"sql\">CREATE TABLE nsi_log (     nsi_log_id        NUMBER(10) NOT NULL,     nsi_id            NUMBER(10) NOT NULL,     table_name        VARCHAR2(100),     oper_num          NUMBER,     descr             CLOB,     create_date       DATE,     CONSTRAINT nsi_log_pk PRIMARY KEY (nsi_log_id),     CONSTRAINT nsi_log_oper_num_ch CHECK (oper_num IN (1, 2, 3, 4, 5, 6, 7)) );  COMMENT ON TABLE nsi_log IS '\u041d\u0421\u0418. \u041b\u043e\u0433\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439'; COMMENT ON COLUMN nsi_log.nsi_log_id IS '\u041a\u043b\u044e\u0447'; COMMENT ON COLUMN nsi_log.nsi_id IS '\u0421\u043f\u0440\u0430\u0432\u043e\u0447\u043d\u0438\u043a'; COMMENT ON COLUMN nsi_log.table_name IS '\u041d\u0430\u0438\u043c\u0435\u043d\u043e\u0432\u0430\u043d\u0438\u0435 \u0442\u0430\u0431\u043b\u0438\u0446\u044b'; COMMENT ON COLUMN nsi_log.oper_num IS '\u041d\u043e\u043c\u0435\u0440 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 (1 - \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0437\u0430\u043f\u0438\u0441\u0438, 2 - \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u0437\u0430\u043f\u0438\u0441\u0438, 3 - \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u0435 \u0437\u0430\u043f\u0438\u0441\u0438, 4 - \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u0430, 5 - \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u0430, 6 - \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u0435 \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u0430, 7 - \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0432\u0435\u0440\u0441\u0438\u0438 \u0438\u0441\u0442\u043e\u0440\u0438\u0438).'; COMMENT ON COLUMN nsi_log.descr IS '\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435'; COMMENT ON COLUMN nsi_log.create_date IS '\u0414\u0430\u0442\u0430 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f'; <\/code><\/pre>\n<p>  \u0410 \u0442\u0430\u043a \u0436\u0435 \u0432 \u043f\u0430\u043a\u0435\u0442 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u043b\u043e\u0433\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f.<\/p>\n<pre><code class=\"sql\">    -- \u041e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0435 CHECK nsi_log_oper_num_ch     NSI_LOG_OPERNUM_INSERT          NUMBER := 1;     NSI_LOG_OPERNUM_UPDATE          NUMBER := 2;     NSI_LOG_OPERNUM_DELETE          NUMBER := 3;     NSI_LOG_OPERNUM_ATTR_INSERT     NUMBER := 4;     NSI_LOG_OPERNUM_ATTR_UPDATE     NUMBER := 5;     NSI_LOG_OPERNUM_ATTR_DELETE     NUMBER := 6;     NSI_LOG_OPERNUM_HISTORY_PUSH    NUMBER := 7;      \/* \u0414\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0437\u0430\u043f\u0438\u0441\u0438 \u043b\u043e\u0433\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439.     *  @param p_nsi_id nsi.nsi_id%TYPE - \u0441\u043f\u0440\u0430\u0432\u043e\u0447\u043d\u0438\u043a     *  @param p_nsi_type_id nsi_type.nsi_type_id%TYPE - \u0442\u0438\u043f \u0441\u043f\u0440\u0430\u0432\u043e\u0447\u043d\u0438\u043a\u0430     *  @param p_oper_num NUMBER - \u043d\u043e\u043c\u0435\u0440 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438     *  @param p_descr VARCHAR2 - \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435     *\/     PROCEDURE log_oper (         p_nsi_id        IN nsi.nsi_id%TYPE,         p_nsi_type_id   IN nsi_type.nsi_type_id%TYPE,         p_oper_num      IN NUMBER,         p_descr         IN VARCHAR2)     AS     BEGIN         INSERT INTO nsi_log          (nsi_log_id, nsi_id, table_name, oper_num, descr, create_date)         VALUES          (get_nsi_id(), p_nsi_id, get_table_name(p_nsi_type_id), p_oper_num, p_descr, Sysdate);     END; <\/code><\/pre>\n<p>  \u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c <b>\u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u0430 \u043f\u044f\u0442\u0430\u044f \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430<\/b>, \u0442\u0435\u043f\u0435\u0440\u044c \u0434\u043b\u044f \u043b\u044e\u0431\u043e\u0439 \u0437\u0430\u043f\u0438\u0441\u0438 \u041d\u0421\u0418 \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c, \u0447\u0442\u043e \u0441 \u043d\u0435\u0439 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u043b\u043e.<\/p>\n<p>  \u041f\u044b\u0442\u0430\u0435\u043c\u0441\u044f \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0442\u0443\u0434\u0430 \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u0430\u0446\u0438\u044e.<\/p>\n<pre><code class=\"sql\">INSERT INTO nsi_organization (nsi_id, name, full_name, inn) VALUES (1, '\u0410\u041e &quot;\u0420\u043e\u0433\u0430 \u0438 \u043a\u043e\u043f\u044b\u0442\u0430&quot;', '\u0410\u043a\u0446\u0438\u043e\u043d\u0435\u0440\u043d\u043e\u0435 \u043e\u0431\u0449\u0435\u0441\u0442\u0432\u043e &quot;\u0420\u043e\u0433\u0430 \u0438 \u043a\u043e\u043f\u044b\u0442\u0430&quot;', '11223344'); <\/code><\/pre>\n<p>  \u041a\u043e\u043d\u0435\u0447\u043d\u043e \u043c\u044b \u043d\u0430\u0440\u0432\u0451\u043c\u0441\u044f \u043d\u0430 \u043a\u043e\u043d\u0441\u0442\u0440\u0430\u0438\u043d\u0442 nsi_organization_nsi_fk. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0432\u0441\u0435 \u0441\u043f\u0440\u0430\u0432\u043e\u0447\u043d\u044b\u0435 \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u0431\u044b\u0442\u044c \u0441\u043d\u0430\u0431\u0436\u0435\u043d\u044b \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0439 \u0434\u043e\u0440\u0430\u0431\u043e\u0442\u043a\u043e\u0439 \u0442\u0440\u0438\u0433\u0433\u0435\u0440\u043e\u0432.<\/p>\n<pre><code class=\"sql\">CREATE OR REPLACE TRIGGER nsi_organization_trg_insert  BEFORE INSERT ON nsi_organization FOR EACH ROW DECLARE     v_type_id \tnsi.nsi_type_id%TYPE;     v_log_descr nsi_log.descr%TYPE; BEGIN     v_type_id := pkg_nsi.get_type_id('nsi_organization');     :NEW.nsi_id := pkg_nsi.get_nsi_id();      INSERT INTO nsi (nsi_id, nsi_type_id, descr, create_date, modif_date, begin_date)     VALUES (:NEW.nsi_id, v_type_id, :NEW.name, Trunc(Sysdate), Trunc(Sysdate), Trunc(Sysdate));          v_log_descr := 'name = ''' || :NEW.name || ''', full_name = ''' || :NEW.full_name || ''', inn = ''' || :NEW.inn || ''' ';     pkg_nsi.log_oper (:NEW.nsi_id, v_type_id, pkg_nsi.NSI_LOG_OPERNUM_INSERT, v_log_descr); END;  CREATE OR REPLACE TRIGGER nsi_organization_trg_update  BEFORE UPDATE ON nsi_organization FOR EACH ROW DECLARE     v_type_id \tnsi.nsi_type_id%TYPE;     v_log_descr nsi_log.descr%TYPE; BEGIN     v_type_id := pkg_nsi.get_type_id('nsi_organization');      UPDATE nsi        SET modif_date = Trunc(Sysdate)      WHERE nsi_id = :NEW.nsi_id        AND nsi_type_id = v_type_id;          v_log_descr := 'name = ''' || :NEW.name || ''', full_name = ''' || :NEW.full_name || ''', inn = ''' || :NEW.inn || ''' ';     pkg_nsi.log_oper (:NEW.nsi_id, v_type_id, pkg_nsi.NSI_LOG_OPERNUM_UPDATE, v_log_descr); END;  CREATE OR REPLACE TRIGGER nsi_organization_trg_delete  AFTER DELETE ON nsi_organization FOR EACH ROW DECLARE     v_type_id \tnsi.nsi_type_id%TYPE;     v_log_descr nsi_log.descr%TYPE; BEGIN     v_type_id := pkg_nsi.get_type_id('nsi_organization');      DELETE FROM nsi     WHERE nsi_id = :OLD.nsi_id       AND nsi_type_id = v_type_id;          v_log_descr := 'name = ''' || :OLD.name || ''', full_name = ''' || :OLD.full_name || ''', inn = ''' || :OLD.inn || ''' ';     pkg_nsi.log_oper (:OLD.nsi_id, v_type_id, pkg_nsi.NSI_LOG_OPERNUM_DELETE, v_log_descr); END; <\/code><\/pre>\n<p>  \u0410 \u0442\u0435\u043f\u0435\u0440\u044c \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0437\u0430\u043f\u0438\u0441\u0438 \u043f\u0440\u043e\u0439\u0434\u0451\u0442 \u0431\u0435\u0437 \u043f\u0440\u043e\u0431\u043b\u0435\u043c (\u043a\u043b\u044e\u0447 \u0443\u0436\u0435 \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u043d\u0435 \u043d\u0430\u0434\u043e). \u0417\u0430\u043e\u0434\u043d\u043e \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0435 nsi \u043f\u043e\u044f\u0432\u0438\u0442\u0441\u044f \u043f\u0435\u0440\u0432\u0430\u044f \u0437\u0430\u043f\u0438\u0441\u044c, \u0430 \u0442\u0430\u043a \u0436\u0435 \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0435 \u043b\u043e\u0433\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0431\u0443\u0434\u0435\u0442 \u0437\u0430\u0444\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u043e \u044d\u0442\u043e \u0441\u043e\u0431\u044b\u0442\u0438\u0435.<\/p>\n<pre><code class=\"sql\">INSERT INTO nsi_organization (name, full_name, inn) VALUES ('\u0410\u041e &quot;\u0420\u043e\u0433\u0430 \u0438 \u043a\u043e\u043f\u044b\u0442\u0430&quot;', '\u0410\u043a\u0446\u0438\u043e\u043d\u0435\u0440\u043d\u043e\u0435 \u043e\u0431\u0449\u0435\u0441\u0442\u0432\u043e &quot;\u0420\u043e\u0433\u0430 \u0438 \u043a\u043e\u043f\u044b\u0442\u0430&quot;', '11223344'); <\/code><\/pre>\n<p>  \u041d\u043e \u043f\u043e\u043a\u0430 \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u043c\u0435\u0442\u0438\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0440\u0430\u0441\u0445\u043e\u0434\u044b \u043d\u0430 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u043a\u0430\u043a\u043e\u0433\u043e-\u0442\u043e \u0441\u043f\u0440\u0430\u0432\u043e\u0447\u043d\u0438\u043a\u0430, \u0430 \u043d\u0438\u043a\u0430\u043a \u043d\u0435 \u043f\u0440\u0435\u0438\u043c\u0443\u0449\u0435\u0441\u0442\u0432\u043e \u0435\u0434\u0438\u043d\u043e\u0433\u043e \u043f\u043e\u0434\u0445\u043e\u0434\u0430. \u0422\u043e\u0433\u0434\u0430 \u0432\u0441\u043f\u043e\u043c\u043d\u0438\u043c \u043f\u0440\u043e \u0447\u0435\u0442\u0432\u0451\u0440\u0442\u0443\u044e \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0443 \u2014 \u043d\u0430\u043c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0438\u0441\u0442\u043e\u0440\u0438\u0447\u043d\u043e\u0441\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0445 \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0430\u0445 \u0441\u043f\u0440\u0430\u0432\u043e\u0447\u043d\u0438\u043a\u0430, \u0430 \u0442\u0430\u043a \u0436\u0435 \u0438\u0437\u0432\u043b\u0435\u043a\u0430\u0442\u044c \u0430\u043a\u0442\u0443\u0430\u043b\u044c\u043d\u043e\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u043d\u0430 \u0437\u0430\u0434\u0430\u043d\u043d\u0443\u044e \u0434\u0430\u0442\u0443. <\/p>\n<pre><code class=\"sql\">CREATE TABLE nsi_history (     nsi_history_id  NUMBER(10) NOT NULL,     nsi_id          NUMBER(10) NOT NULL,     nsi_type_id     NUMBER(10) NOT NULL,     version         NUMBER(10) NOT NULL,     content         CLOB NOT NULL,     note            VARCHAR2(100),     begin_date      DATE NOT NULL,     end_date        DATE NOT NULL,          CONSTRAINT nsi_history_pk PRIMARY KEY (nsi_history_id),     CONSTRAINT nsi_history_nsi_type_fk FOREIGN KEY (nsi_type_id) REFERENCES nsi_type (nsi_type_id),     CONSTRAINT nsi_history_nsi_fk FOREIGN KEY (nsi_id) REFERENCES nsi (nsi_id),     CONSTRAINT nsi_history_content_json_chk CHECK (content IS JSON) );  COMMENT ON TABLE nsi_history IS '\u0418\u0441\u0442\u043e\u0440\u0438\u0447\u043d\u043e\u0441\u0442\u044c \u0441\u043f\u0440\u0430\u0432\u043e\u0447\u043d\u0438\u043a\u0430'; COMMENT ON COLUMN nsi_history.nsi_history_id IS '\u041a\u043b\u044e\u0447'; COMMENT ON COLUMN nsi_history.nsi_id IS '\u0421\u043f\u0440\u0430\u0432\u043e\u0447\u043d\u0438\u043a'; COMMENT ON COLUMN nsi_history.nsi_type_id IS '\u0422\u0438\u043f \u0441\u043f\u0440\u0430\u0432\u043e\u0447\u043d\u0438\u043a\u0430'; COMMENT ON COLUMN nsi_history.version IS '\u0412\u0435\u0440\u0441\u0438\u044f'; COMMENT ON COLUMN nsi_history.content IS '\u0421\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435 \u0441\u043f\u0440\u0430\u0432\u043e\u0447\u043d\u0438\u043a\u0430'; COMMENT ON COLUMN nsi_history.note IS '\u041f\u043e\u044f\u0441\u043d\u0435\u043d\u0438\u0435'; COMMENT ON COLUMN nsi_history.begin_date IS '\u0414\u0430\u0442\u0430 \u043d\u0430\u0447\u0430\u043b\u0430 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f'; COMMENT ON COLUMN nsi_history.end_date IS '\u0414\u0430\u0442\u0430 \u043e\u043a\u043e\u043d\u0447\u0430\u043d\u0438\u044f \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f'; <\/code><\/pre>\n<p>  \u0412 \u043f\u0430\u043a\u0435\u0442 pkg_nsi \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0437\u0430\u043f\u0438\u0441\u0438 \u0432 \u0438\u0441\u0442\u043e\u0440\u0438\u0447\u0435\u0441\u043a\u0443\u044e \u0442\u0430\u0431\u043b\u0438\u0446\u0443. \u0425\u0440\u0430\u043d\u0438\u0442\u044c \u0437\u0430\u043f\u0438\u0441\u044c \u0431\u0443\u0434\u0435\u043c \u0432 \u0444\u043e\u0440\u043c\u0430\u0442\u0435 json, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0432 \u043f\u0430\u043a\u0435\u0442\u0435 \u0442\u0430\u043a \u0436\u0435 \u043f\u043e\u044f\u0432\u0438\u0442\u0441\u044f \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c json \u0434\u043b\u044f \u043f\u0435\u0440\u0435\u0434\u0430\u043d\u043d\u043e\u0433\u043e \u0437\u0430\u043f\u0440\u043e\u0441\u0430.<\/p>\n<pre><code class=\"sql\">    \/* \u0414\u043b\u044f \u043f\u0435\u0440\u0435\u0434\u0430\u043d\u043d\u043e\u0433\u043e \u0437\u0430\u043f\u0440\u043e\u0441\u0430 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442\u0441\u044f json     *  @param p_query VARCHAR2 - \u0437\u0430\u043f\u0440\u043e\u0441     *  @return CLOB - \u043d\u043e\u0442\u0430\u0446\u0438\u044f json     *\/     FUNCTION get_json(p_query IN VARCHAR2)      RETURN CLOB     AS       v_theCursor       integer default dbms_sql.open_cursor;       v_columnValue     varchar2(4000);       v_status          integer;       v_descTbl         dbms_sql.desc_tab;       v_colCnt          number;       v_res             clob;     BEGIN         dbms_sql.parse(v_theCursor, p_query, dbms_sql.native);         dbms_sql.describe_columns( v_theCursor, v_colCnt, v_descTbl);          FOR i IN 1 .. v_colCnt LOOP             dbms_sql.define_column(v_theCursor, i, v_columnValue, 4000);         END LOOP;                v_status := dbms_sql.execute(v_theCursor);         WHILE ( dbms_sql.fetch_rows(v_theCursor) &gt; 0 ) LOOP             FOR i IN 1 .. v_colCnt LOOP                 dbms_sql.column_value( v_theCursor, i, v_columnValue );                 IF i &gt; 1 THEN                     v_res := v_res || ', ';                 END IF;                 v_res := v_res || '&quot;' || v_descTbl(i).col_name || '&quot; : &quot;' || replace(v_columnValue, '&quot;', '\\&quot;') || '&quot;';             END LOOP;                          -- \u041f\u043e\u043a\u0430 \u0447\u0442\u043e \u043f\u043e\u0434\u0440\u0430\u0437\u0443\u043c\u0435\u0432\u0430\u0435\u043c, \u0447\u0442\u043e \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0434\u043d\u0430 \u0437\u0430\u043f\u0438\u0441\u044c, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0431\u0435\u0440\u0451\u043c \u0435\u0451             -- \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u0438\u0437\u043c\u0435\u043d\u0438\u043c \u043b\u043e\u0433\u0438\u043a\u0443             EXIT;         END LOOP;                  RETURN '{' || v_res || '}';            exception         when others then dbms_sql.close_cursor( v_theCursor ); RAISE;     END get_json;      \/* \u0421\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435 \u0442\u0435\u043a\u0443\u0449\u0435\u0433\u043e \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u0441\u043f\u0440\u0430\u0432\u043e\u0447\u043d\u0438\u043a\u0430 \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0443 \u0438\u0441\u0442\u043e\u0440\u0438\u0447\u043d\u043e\u0441\u0442\u0438.     *  @param p_nsi_id nsi.nsi_id%TYPE - \u0441\u043f\u0440\u0430\u0432\u043e\u0447\u043d\u0438\u043a     *  @param p_nsi_type_id nsi_type.nsi_type_id%TYPE - \u0442\u0438\u043f \u0441\u043f\u0440\u0430\u0432\u043e\u0447\u043d\u0438\u043a\u0430     *  @param p_end_date nsi_history.end_date%TYPE - \u0434\u0430\u0442\u0430 \u043e\u043a\u043e\u043d\u0447\u0430\u043d\u0438\u044f \u0442\u0435\u043a\u0443\u0449\u0435\u0433\u043e \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0433\u043e \u0441\u043f\u0440\u0430\u0432\u043e\u0447\u043d\u0438\u043a\u0430     *  @param p_note nsi_history.note%TYPE - \u043f\u043e\u044f\u0441\u043d\u0435\u043d\u0438\u0435 \u043f\u0440\u0438\u0447\u0438\u043d\u044b \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0432 \u0438\u0441\u0442\u043e\u0440\u0438\u0438     *\/     PROCEDURE nsi_history_push (         p_nsi_id        IN nsi.nsi_id%TYPE,         p_nsi_type_id   IN nsi_type.nsi_type_id%TYPE,         p_end_date      IN nsi_history.end_date%TYPE,         p_note          IN nsi_history.note%TYPE)     AS         v_table_name VARCHAR2(50);         v_content CLOB;         v_max_ver NUMBER;         v_begin_date DATE;     BEGIN         IF (p_end_date IS NULL) THEN             RAISE_APPLICATION_ERROR (NSI_ERROR_CODE,                  '[nsi_history_push] \u0414\u0430\u0442\u0430 \u043e\u043a\u043e\u043d\u0447\u0430\u043d\u0438\u044f \u0434\u043e\u043b\u0436\u043d\u0430 \u0431\u044b\u0442\u044c \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0430.');          END IF;          IF (Trunc(p_end_date) &gt; Trunc(Sysdate) ) THEN             RAISE_APPLICATION_ERROR (NSI_ERROR_CODE,                  '[nsi_history_push] \u0414\u0430\u0442\u0430 \u043e\u043a\u043e\u043d\u0447\u0430\u043d\u0438\u044f \u043d\u0435 \u0434\u043e\u043b\u0436\u043d\u0430 \u043f\u0440\u0435\u0432\u044b\u0448\u0430\u0442\u044c \u0442\u0435\u043a\u0443\u0449\u0443\u044e \u0434\u0430\u0442\u0443.');          END IF;                  SELECT begin_date INTO v_begin_date           FROM nsi          WHERE nsi_id = p_nsi_id            AND nsi_type_id = p_nsi_type_id;          IF (Trunc(p_end_date) &lt; Trunc(v_begin_date) ) THEN             RAISE_APPLICATION_ERROR (NSI_ERROR_CODE,                  '[nsi_history_push] \u0414\u0430\u0442\u0430 \u043e\u043a\u043e\u043d\u0447\u0430\u043d\u0438\u044f \u043d\u0435 \u0434\u043e\u043b\u0436\u043d\u0430 \u0431\u044b\u0442\u044c \u043c\u0435\u043d\u044c\u0448\u0435 \u0434\u0430\u0442\u044b \u043d\u0430\u0447\u0430\u043b\u0430 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u0442\u0435\u043a\u0443\u0449\u0435\u0439 \u0432\u0435\u0440\u0441\u0438\u0438 \u0437\u0430\u043f\u0438\u0441\u0438.');          END IF;                  v_table_name := get_table_name(p_nsi_type_id);         v_content := get_json ('select * from ' || v_table_name || ' where nsi_id=' || p_nsi_id);                  SELECT MAX(version) INTO v_max_ver           FROM nsi_history          WHERE nsi_id = p_nsi_id            AND nsi_type_id = p_nsi_type_id;                    IF (v_max_ver IS NULL) THEN             v_max_ver := 0;         END IF;          v_max_ver := v_max_ver + 1;                  UPDATE nsi            SET begin_date = Trunc(p_end_date) + 1          WHERE nsi_id = p_nsi_id            AND nsi_type_id = p_nsi_type_id;                     INSERT INTO nsi_history         (nsi_history_id, nsi_id, nsi_type_id, version, content, note, begin_date, end_date)         VALUES (get_nsi_id, p_nsi_id, p_nsi_type_id, v_max_ver, v_content, p_note, v_begin_date, Trunc(p_end_date));                  log_oper(p_nsi_id, p_nsi_type_id, NSI_LOG_OPERNUM_HISTORY_PUSH, v_content);     END nsi_history_push;  <\/code><\/pre>\n<p>  \u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u043b\u044e\u0431\u043e\u0439 \u0441\u043f\u0440\u0430\u0432\u043e\u0447\u043d\u0438\u043a \u043c\u043e\u0436\u0435\u0442 \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u044d\u0442\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0435\u0439, \u0447\u0442\u043e\u0431\u044b \u0443\u0432\u0435\u0441\u0442\u0438 \u0432 \u0438\u0441\u0442\u043e\u0440\u0438\u044e \u0442\u0435\u043a\u0443\u0449\u0435\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435. \u0423\u0436\u0435 \u0445\u043e\u0440\u043e\u0448\u043e, \u0445\u043e\u0442\u044c \u0447\u0442\u043e-\u0442\u043e \u043f\u043e\u043b\u0435\u0437\u043d\u043e\u0435 \u043f\u043e\u044f\u0432\u0438\u043b\u043e\u0441\u044c \u043e\u0442 \u0442\u0430\u043a\u043e\u0433\u043e \u043e\u0431\u043e\u0431\u0449\u0435\u043d\u0438\u044f))) \u0414\u043b\u044f \u0438\u0437\u0432\u043b\u0435\u0447\u0435\u043d\u0438\u044f \u0430\u043a\u0442\u0443\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u0441\u043f\u0440\u0430\u0432\u043e\u0447\u043d\u0438\u043a\u0430 \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u0432 \u043f\u0430\u043a\u0435\u0442 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0443\u044e pipeline-\u0444\u0443\u043d\u043a\u0446\u0438\u044e. \u0417\u0430\u043f\u0438\u0441\u0438 \u0441\u043f\u0440\u0430\u0432\u043e\u0447\u043d\u0438\u043a\u0430 \u0431\u0443\u0434\u0443\u0442 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0442\u044c\u0441\u044f \u0432 \u0442\u0438\u043f, \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u043d\u044b\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u043c\u0438 \u043f\u043e\u043b\u044f\u043c\u0438.<\/p>\n<pre><code class=\"sql\">    -- \u0417\u0430\u043f\u0438\u0441\u044c \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u043f\u043e\u043b\u044f \u0442\u0430\u0431\u043b\u0438\u0446\u044b nsi_organization \u0438 \u0434\u043e\u043f\u043e\u043b\u043d\u0435\u043d\u044b \u0441\u043b\u0443\u0436\u0435\u0431\u043d\u044b\u043c\u0438 \u043f\u043e\u043b\u044f\u043c\u0438 nsi     TYPE nsi_organization_rec IS RECORD(         nsi_id          nsi_organization.nsi_id%TYPE,          name            nsi_organization.name%TYPE,         full_name       nsi_organization.full_name%TYPE,         inn             nsi_organization.inn%TYPE,         nsi_type_id     nsi.nsi_type_id%TYPE,          create_date     nsi.create_date%TYPE,         modif_date      nsi.create_date%TYPE,         version         nsi_history.version%TYPE,         begin_date      nsi.begin_date%TYPE,         end_date        nsi_history.end_date%TYPE     );     TYPE nsi_organization_list IS TABLE OF nsi_organization_rec;      \/* \u0412\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0441\u043f\u0438\u0441\u043e\u043a, \u0430\u043a\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u0439 \u043d\u0430 \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u0443\u044e \u0434\u0430\u0442\u0443.     *  \u0415\u0441\u043b\u0438 \u0434\u0430\u0442\u0430 \u043d\u0435 \u0437\u0430\u0434\u0430\u043d\u0430, \u0430\u043a\u0442\u0443\u0430\u043b\u044c\u043d\u043e\u0439 \u0441\u0447\u0438\u0442\u0430\u0435\u0442\u0441\u044f \u0442\u0435\u043a\u0443\u0449\u0430\u044f \u0434\u0430\u0442\u0430.     *  @param p_date DATE - \u0434\u0430\u0442\u0430, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0441\u043f\u0440\u0430\u0432\u043e\u0447\u043d\u0438\u043a\u0430     *  @return nsi_organization_table - \u0442\u0430\u0431\u043b\u0438\u0446\u0430 \u0441 \u0437\u0430\u043f\u0438\u0441\u044f\u043c\u0438 nsi_organization_rec     *\/     FUNCTION nsi_organization_table(p_date IN DATE := null)      RETURN nsi_organization_list PIPELINED     AS         v_date date;     BEGIN         v_date := Trunc(Sysdate);         IF p_date IS NOT NULL THEN             v_date := Trunc(p_date);         END IF;          FOR rec IN (             SELECT                  o.nsi_id, o.name, o.full_name, o.inn,                 n.nsi_type_id, n.create_date, n.modif_date,                  0 AS version, n.begin_date, to_date(null) AS end_date             FROM                  nsi_organization o INNER JOIN nsi n                 ON (o.nsi_id = n.nsi_id)             WHERE                  n.begin_date &lt;= v_date             UNION ALL             SELECT                  n.nsi_id,                  json_value(h.content, '$.NAME') AS name,                  json_value(h.content, '$.FULL_NAME') AS full_name,                 json_value(h.content, '$.INN') AS inn,                  n.nsi_type_id, n.create_date, n.modif_date,                  h.version, h.begin_date, h.end_date             FROM                  nsi_history h INNER JOIN nsi n                 ON (h.nsi_id = n.nsi_id AND h.nsi_type_id = n.nsi_type_id)             WHERE                      h.begin_date &lt;= v_date                 AND h.end_date &gt;= v_date         ) LOOP             PIPE ROW (rec);         END LOOP;     END nsi_organization_table; <\/code><\/pre>\n<p>  \u041f\u0440\u0438\u043c\u0435\u043d\u0438\u043c \u043a \u043d\u0430\u0448\u0435\u0439 \u0442\u0430\u0431\u043b\u0438\u0446\u0435 nsi_organization. <\/p>\n<pre><code class=\"sql\">select * from nsi where nsi_id=1; --------------------------------------------------------------------------------------- &quot;NSI_ID&quot;\t&quot;NSI_TYPE_ID&quot;\t&quot;DESCR&quot;\t&quot;CREATE_DATE&quot;\t&quot;MODIF_DATE&quot;\t&quot;BEGIN_DATE&quot; 1\t1\t&quot;\u0410\u041e &quot;&quot;\u0420\u043e\u0433\u0430 \u0438 \u043a\u043e\u043f\u044b\u0442\u0430&quot;&quot;&quot;\t11.03.20\t11.03.20\t11.03.20 ---------------------------------------------------------------------------------------  begin -- \u043a\u043e\u043d\u0435\u0447\u043d\u043e \u044d\u0442\u043e \u043d\u0435\u0440\u0435\u0430\u043b\u044c\u043d\u0430\u044f \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u044f \u043f\u043e \u0441\u043c\u0435\u043d\u0435 \u0438\u043d\u043d, \u043d\u043e \u0434\u043b\u044f \u0442\u0435\u0441\u0442\u043e\u0432\u043e\u0433\u043e \u043f\u0440\u0438\u043c\u0435\u0440\u0430 \u0432\u043f\u043e\u043b\u043d\u0435 \u043f\u043e\u0434\u043e\u0439\u0434\u0451\u0442     pkg_nsi.nsi_history_push(202, 1, sysdate, '\u0441\u043c\u0435\u043d\u0430 \u0438\u043d\u043d'); end; select * from nsi_history; --------------------------------------------------------------------------------------- &quot;NSI_HISTORY_ID&quot;\t&quot;NSI_ID&quot;\t&quot;NSI_TYPE_ID&quot;\t&quot;VERSION&quot;\t&quot;CONTENT&quot;\t&quot;NOTE&quot;\t&quot;BEGIN_DATE&quot;\t&quot;END_DATE&quot; 205\t1\t1\t1\t&quot;{&quot;&quot;NSI_ID&quot;&quot; : &quot;&quot;1&quot;&quot;, &quot;&quot;NAME&quot;&quot; : &quot;&quot;\u0410\u041e \\&quot;&quot;\u0420\u043e\u0433\u0430 \u0438 \u043a\u043e\u043f\u044b\u0442\u0430\\&quot;&quot;&quot;&quot;, &quot;&quot;FULL_NAME&quot;&quot; : &quot;&quot;\u0410\u043a\u0446\u0438\u043e\u043d\u0435\u0440\u043d\u043e\u0435 \u043e\u0431\u0449\u0435\u0441\u0442\u0432\u043e \\&quot;&quot;\u0420\u043e\u0433\u0430 \u0438 \u043a\u043e\u043f\u044b\u0442\u0430\\&quot;&quot;&quot;&quot;, &quot;&quot;INN&quot;&quot; : &quot;&quot;11223344&quot;&quot;}&quot;\t&quot;\u0441\u043c\u0435\u043d\u0430 \u0438\u043d\u043d&quot;\t11.03.20\t11.03.20 ---------------------------------------------------------------------------------------  -- \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u043e\u0431\u0440\u0430\u0442\u0438\u0442\u044c \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u043d\u0430 \u0434\u0430\u0442\u0443 \u043d\u0430\u0447\u0430\u043b\u0430 -- \u0442\u0430\u043a \u043a\u0430\u043a \u0431\u044b\u043b \u0432\u044b\u0437\u043e\u0432 \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0432 \u0438\u0441\u0442\u043e\u0440\u0438\u044e, \u0442\u043e \u043d\u043e\u0432\u0430\u044f \u0432\u0435\u0440\u0441\u0438\u044f \u043d\u0430\u0447\u0430\u043b\u0430 \u0431\u044b\u0442\u044c \u0430\u043a\u0442\u0443\u0430\u043b\u044c\u043d\u043e\u0439 \u043d\u0430 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u0434\u0435\u043d\u044c select * from nsi where nsi_id=1; --------------------------------------------------------------------------------------- &quot;NSI_ID&quot;\t&quot;NSI_TYPE_ID&quot;\t&quot;DESCR&quot;\t&quot;CREATE_DATE&quot;\t&quot;MODIF_DATE&quot;\t&quot;BEGIN_DATE&quot; 1\t1\t&quot;\u0410\u041e &quot;&quot;\u0420\u043e\u0433\u0430 \u0438 \u043a\u043e\u043f\u044b\u0442\u0430&quot;&quot;&quot;\t11.03.20\t11.03.20\t12.03.20 ---------------------------------------------------------------------------------------  -- \u043e\u0431\u043d\u043e\u0432\u0438\u043c \u0438\u043d\u043d \u0438 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0432\u044b\u0431\u043e\u0440\u043a\u0443 \u043d\u0430 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0435 \u0434\u0430\u0442\u044b -- \u0440\u0430\u0437\u043b\u0438\u0447\u0438\u044f \u043f\u0440\u0438\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u044e\u0442 \u0432 \u043f\u043e\u043b\u044f\u0445 inn, version, begin_date, end_date -- \u0442\u0435\u043a\u0443\u0449\u0430\u044f \u0437\u0430\u043f\u0438\u0441\u044c \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0435 \u0438\u043c\u0435\u0435\u0442 \u0432\u0435\u0440\u0441\u0438\u044e 0 update nsi_organization set inn='99887766' where nsi_id=1;  select * from table(pkg_nsi.nsi_organization_table(sysdate)); --------------------------------------------------------------------------------------- &quot;NSI_ID&quot;\t&quot;NAME&quot;\t&quot;FULL_NAME&quot;\t&quot;INN&quot;\t&quot;NSI_TYPE_ID&quot;\t&quot;CREATE_DATE&quot;\t&quot;MODIF_DATE&quot;\t&quot;VERSION&quot;\t&quot;BEGIN_DATE&quot;\t&quot;END_DATE&quot; 1\t&quot;\u0410\u041e &quot;&quot;\u0420\u043e\u0433\u0430 \u0438 \u043a\u043e\u043f\u044b\u0442\u0430&quot;&quot;&quot;\t&quot;\u0410\u043a\u0446\u0438\u043e\u043d\u0435\u0440\u043d\u043e\u0435 \u043e\u0431\u0449\u0435\u0441\u0442\u0432\u043e &quot;&quot;\u0420\u043e\u0433\u0430 \u0438 \u043a\u043e\u043f\u044b\u0442\u0430&quot;&quot;&quot;\t&quot;11223344&quot;\t1\t11.03.20\t11.03.20\t1\t11.03.20\t11.03.20 ---------------------------------------------------------------------------------------  select * from table(pkg_nsi.nsi_organization_table(sysdate+1)); --------------------------------------------------------------------------------------- &quot;NSI_ID&quot;\t&quot;NAME&quot;\t&quot;FULL_NAME&quot;\t&quot;INN&quot;\t&quot;NSI_TYPE_ID&quot;\t&quot;CREATE_DATE&quot;\t&quot;MODIF_DATE&quot;\t&quot;VERSION&quot;\t&quot;BEGIN_DATE&quot;\t&quot;END_DATE&quot; 1\t&quot;\u0410\u041e &quot;&quot;\u0420\u043e\u0433\u0430 \u0438 \u043a\u043e\u043f\u044b\u0442\u0430&quot;&quot;&quot;\t&quot;\u0410\u043a\u0446\u0438\u043e\u043d\u0435\u0440\u043d\u043e\u0435 \u043e\u0431\u0449\u0435\u0441\u0442\u0432\u043e &quot;&quot;\u0420\u043e\u0433\u0430 \u0438 \u043a\u043e\u043f\u044b\u0442\u0430&quot;&quot;&quot;\t&quot;99887766&quot;\t1\t11.03.20\t11.03.20\t0\t12.03.20\t --------------------------------------------------------------------------------------- <\/code><\/pre>\n<p>  \u0424\u0443\u043d\u043a\u0446\u0438\u044f nsi_organization_table \u043e\u0447\u0435\u043d\u044c \u043f\u043e\u043b\u0435\u0437\u043d\u0430, \u043f\u043e\u0442\u043e\u043c\u0443 \u043a\u0430\u043a \u0443\u0434\u043e\u0432\u043b\u0435\u0442\u0432\u043e\u0440\u044f\u0435\u0442 \u043d\u0430\u0448\u0438\u043c \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u044f\u043c \u0438 \u043e\u043a\u043e\u043d\u0447\u0430\u0442\u0435\u043b\u044c\u043d\u043e <b>\u0443\u0432\u043e\u0434\u0438\u0442 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0443 \u043d\u043e\u043c\u0435\u0440 \u0447\u0435\u0442\u044b\u0440\u0435 \u0432 \u043f\u0440\u043e\u0448\u043b\u043e\u0435<\/b>. <\/p>\n<p>  \u0418\u0434\u0451\u043c \u0434\u0430\u043b\u044c\u0448\u0435. \u0420\u0430\u0437 \u0443 \u043d\u0430\u0441 \u043f\u043e\u044f\u0432\u0438\u043b\u043e\u0441\u044c \u0442\u0430\u043a\u043e\u0435 \u043f\u0440\u0435\u0438\u043c\u0443\u0449\u0435\u0441\u0442\u0432\u043e \u0441 \u0432\u0432\u0435\u0434\u0435\u043d\u0438\u0435\u043c \u0435\u0434\u0438\u043d\u043e\u0433\u043e \u043f\u043e\u0434\u0445\u043e\u0434\u0430 \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441\u043e \u0432\u0441\u0435\u043c\u0438 \u0441\u043f\u0440\u0430\u0432\u043e\u0447\u043d\u0438\u043a\u0430\u043c\u0438, \u0442\u043e \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u0441\u044f \u0438\u043c \u0438 \u0434\u043b\u044f \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0439 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438, \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043d\u0430\u0434\u0435\u043b\u0435\u043d\u0430 \u043b\u044e\u0431\u0430\u044f \u0437\u0430\u043f\u0438\u0441\u044c \u0438\u0437 \u043b\u044e\u0431\u043e\u0433\u043e \u0441\u043f\u0440\u0430\u0432\u043e\u0447\u043d\u0438\u043a\u0430. \u0422\u0430\u043a\u043e\u0435 \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c \u0443\u0436\u0435 \u0434\u0430\u0432\u043d\u043e \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442, \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f EAV-pattern, \u0435\u0433\u043e \u0438 \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u043c. <\/p>\n<pre><code class=\"sql\">    -- \u041e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0435 CHECK nsi_attribute_type_ch     NSI_ATTRIBUTE_TYPE_STRING   NUMBER := 1;     NSI_ATTRIBUTE_TYPE_INT      NUMBER := 2;     NSI_ATTRIBUTE_TYPE_DOUBLE   NUMBER := 3;     NSI_ATTRIBUTE_TYPE_DATE     NUMBER := 4;  CREATE TABLE nsi_attribute_type (     nsi_attribute_type_id   NUMBER(10) NOT NULL,     value_type              NUMBER NOT NULL,     descr                   VARCHAR2(100) NOT NULL,     CONSTRAINT nsi_attribute_type_pk PRIMARY KEY (nsi_attribute_type_id),     CONSTRAINT nsi_attribute_type_ch CHECK (value_type IN (1, 2, 3, 4)),     CONSTRAINT nsi_attribute_type_fk FOREIGN KEY (nsi_attribute_type_id) REFERENCES nsi (nsi_id) );  COMMENT ON TABLE nsi_attribute_type IS '\u041d\u0421\u0418. \u0422\u0438\u043f \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u0430'; COMMENT ON COLUMN nsi_attribute_type.nsi_attribute_type_id IS '\u041a\u043b\u044e\u0447'; COMMENT ON COLUMN nsi_attribute_type.value_type IS '\u0422\u0438\u043f \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f (1 - \u0441\u0442\u0440\u043e\u043a\u0430, 2 - \u0446\u0435\u043b\u043e\u0435, 3 - \u0434\u0440\u043e\u0431\u043d\u043e\u0435, 4 - \u0434\u0430\u0442\u0430)'; COMMENT ON COLUMN nsi_attribute_type.descr IS '\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435';  CREATE TABLE nsi_attribute (     nsi_attribute_id        NUMBER(10) NOT NULL,     nsi_attribute_type_id   NUMBER(10) NOT NULL,     nsi_id                  NUMBER(10) NOT NULL,     nsi_type_id             NUMBER(10) NOT NULL,     value_1                 VARCHAR2(100),     value_2_3               NUMBER,     value_4                 DATE,     begin_date              DATE,     end_date                DATE,     CONSTRAINT nsi_attribute_pk PRIMARY KEY (nsi_attribute_id),     CONSTRAINT nsi_attribute_type_fk FOREIGN KEY (nsi_attribute_type_id) REFERENCES nsi_attribute_type (nsi_attribute_type_id),     CONSTRAINT nsi_attribute_nsi_fk FOREIGN KEY (nsi_id) REFERENCES nsi (nsi_id) );  COMMENT ON TABLE nsi_attribute IS '\u041d\u0421\u0418. \u0422\u0438\u043f \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u0430'; COMMENT ON COLUMN nsi_attribute.nsi_attribute_id IS '\u041a\u043b\u044e\u0447'; COMMENT ON COLUMN nsi_attribute.nsi_attribute_type_id IS '\u0422\u0438\u043f \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u0430'; COMMENT ON COLUMN nsi_attribute.nsi_id IS '\u0421\u043f\u0440\u0430\u0432\u043e\u0447\u043d\u0438\u043a'; COMMENT ON COLUMN nsi_attribute.nsi_type_id is '\u0422\u0438\u043f \u0441\u043f\u0440\u0430\u0432\u043e\u0447\u043d\u0438\u043a\u0430'; COMMENT ON COLUMN nsi_attribute.value_1 IS '\u0417\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0442\u0438\u043f\u0430 \u0441\u0442\u0440\u043e\u043a\u0430'; COMMENT ON COLUMN nsi_attribute.value_2_3 IS '\u0417\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0442\u0438\u043f\u0430 \u0446\u0435\u043b\u043e\u0435 \u0438\u043b\u0438 \u0434\u0440\u043e\u0431\u043d\u043e\u0435'; COMMENT ON COLUMN nsi_attribute.value_4 IS '\u0417\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0442\u0438\u043f\u0430 \u0434\u0430\u0442\u0430'; COMMENT ON COLUMN nsi_attribute.begin_date IS '\u0414\u0430\u0442\u0430 \u043d\u0430\u0447\u0430\u043b\u0430 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u0430'; COMMENT ON COLUMN nsi_attribute.end_date IS '\u0414\u0430\u0442\u0430 \u043e\u043a\u043e\u043d\u0447\u0430\u043d\u0438\u044f \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u0430'; <\/code><\/pre>\n<p>  \u041e\u0447\u0435\u043d\u044c \u0447\u0430\u0441\u0442\u043e \u0432 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0435 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u043e\u0432 \u0438\u043c\u0435\u043d\u0430 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0435 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0432 \u043a\u0430\u043a\u043e\u043c-\u0442\u043e \u043f\u0430\u0434\u0435\u0436\u0435, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u043d\u043e\u0432\u0443\u044e \u0442\u0430\u0431\u043b\u0438\u0446\u0443 \u0441 \u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u0438\u043c\u0438 \u043b\u0438\u0446\u0430\u043c\u0438 \u0438 \u043f\u043e \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0438 \u0441 \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u0430\u0446\u0438\u044f\u043c\u0438 \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0443 \u0442\u0440\u0438\u0433\u0433\u0435\u0440\u043e\u0432 \u0438 \u0442\u0438\u043f \u0434\u043b\u044f \u0432\u044b\u0431\u043e\u0440\u043a\u0438.<\/p>\n<pre><code class=\"sql\">CREATE TABLE nsi_person (     nsi_id   NUMBER(10) NOT NULL,     surname         VARCHAR2(30) NOT NULL,     name            VARCHAR2(30) NOT NULL,     patronymic      VARCHAR2(30) NOT NULL,     birthday        DATE,     CONSTRAINT nsi_person_pk PRIMARY KEY (nsi_id),     CONSTRAINT nsi_person_nsi_fk FOREIGN KEY (nsi_id) REFERENCES nsi (nsi_id) );  COMMENT ON TABLE nsi_person IS '\u041d\u0421\u0418. \u0424\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u043b\u0438\u0446\u043e'; COMMENT ON COLUMN nsi_person.nsi_id IS '\u041a\u043b\u044e\u0447'; COMMENT ON COLUMN nsi_person.surname IS '\u0424\u0430\u043c\u0438\u043b\u0438\u044f'; COMMENT ON COLUMN nsi_person.name IS '\u0418\u043c\u044f'; COMMENT ON COLUMN nsi_person.patronymic IS '\u041e\u0442\u0447\u0435\u0441\u0442\u0432\u043e'; COMMENT ON COLUMN nsi_person.birthday IS '\u0414\u0430\u0442\u0430 \u0440\u043e\u0436\u0434\u0435\u043d\u0438\u044f';  CREATE OR REPLACE TRIGGER nsi_person_trg_insert  BEFORE INSERT ON nsi_person FOR EACH ROW DECLARE     v_type_id \tnsi.nsi_type_id%TYPE;     v_log_descr nsi_log.descr%TYPE;     v_log_query VARCHAR(4000); BEGIN     v_type_id := pkg_nsi.get_type_id('nsi_person');     :NEW.nsi_id := pkg_nsi.get_nsi_id();      INSERT INTO nsi (nsi_id, nsi_type_id, descr, create_date, modif_date, begin_date)     VALUES (:NEW.nsi_id, v_type_id, :NEW.name, Trunc(Sysdate), Trunc(Sysdate), Trunc(Sysdate));          v_log_query := 'SELECT ''' || :NEW.surname || ''' AS surname, ''' || :NEW.name || ''' AS name, ''' || :NEW.patronymic || ''' AS patronymic, to_date(''' || :NEW.birthday || ''', ''dd.mm.yy'') AS birthday FROM DUAL';     v_log_descr := pkg_nsi.get_json(v_log_query);     pkg_nsi.log_oper (:NEW.nsi_id, v_type_id, pkg_nsi.NSI_LOG_OPERNUM_INSERT, v_log_descr); END;  CREATE OR REPLACE TRIGGER nsi_person_trg_update  BEFORE UPDATE ON nsi_person FOR EACH ROW DECLARE     v_type_id \tnsi.nsi_type_id%TYPE;     v_log_descr nsi_log.descr%TYPE;     v_log_query VARCHAR(4000); BEGIN     v_type_id := pkg_nsi.get_type_id('nsi_person');      UPDATE nsi        SET modif_date = Trunc(Sysdate)      WHERE nsi_id = :NEW.nsi_id        AND nsi_type_id = v_type_id;          v_log_query := 'SELECT ''' || :NEW.surname || ''' AS surname, ''' || :NEW.name || ''' AS name, ''' || :NEW.patronymic || ''' AS patronymic, to_date(''' || :NEW.birthday || ''', ''dd.mm.yy'') AS birthday FROM DUAL';     v_log_descr := pkg_nsi.get_json(v_log_query);     pkg_nsi.log_oper (:NEW.nsi_id, v_type_id, pkg_nsi.NSI_LOG_OPERNUM_UPDATE, v_log_descr); END;  CREATE OR REPLACE TRIGGER nsi_person_trg_delete  AFTER DELETE ON nsi_person FOR EACH ROW DECLARE     v_type_id \tnsi.nsi_type_id%TYPE;     v_log_descr nsi_log.descr%TYPE;     v_log_query VARCHAR(4000); BEGIN     v_type_id := pkg_nsi.get_type_id('nsi_person');      DELETE FROM nsi_history      WHERE nsi_id = :OLD.nsi_id       AND nsi_type_id = v_type_id;      DELETE FROM nsi_attribute      WHERE nsi_id = :OLD.nsi_id       AND nsi_type_id = v_type_id;      DELETE FROM nsi     WHERE nsi_id = :OLD.nsi_id       AND nsi_type_id = v_type_id;          v_log_query := 'SELECT ''' || :OLD.surname || ''' AS surname, ''' || :OLD.name || ''' AS name, ''' || :OLD.patronymic || ''' AS patronymic, to_date(''' || :OLD.birthday || ''', ''dd.mm.yy'') AS birthday FROM DUAL';     v_log_descr := pkg_nsi.get_json(v_log_query);     pkg_nsi.log_oper (:OLD.nsi_id, v_type_id, pkg_nsi.NSI_LOG_OPERNUM_DELETE, v_log_descr); END; <\/code><\/pre>\n<p>  \u041e\u0441\u0442\u0430\u043b\u043e\u0441\u044c \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u043f\u0430\u043a\u0435\u0442 pkg_nsi \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u043e\u0439 \u044d\u0442\u043e\u0439 \u0442\u0430\u0431\u043b\u0438\u0446\u044b.<\/p>\n<pre><code class=\"sql\">-- \u0417\u0430\u043f\u0438\u0441\u044c \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u043f\u043e\u043b\u044f \u0442\u0430\u0431\u043b\u0438\u0446\u044b nsi_person \u0438 \u0434\u043e\u043f\u043e\u043b\u043d\u0435\u043d\u044b \u0441\u043b\u0443\u0436\u0435\u0431\u043d\u044b\u043c\u0438 \u043f\u043e\u043b\u044f\u043c\u0438 nsi     TYPE nsi_person_rec IS RECORD(         nsi_id          nsi_person.nsi_id%TYPE,          surname         nsi_person.surname%TYPE,         name            nsi_person.name%TYPE,         patronymic      nsi_person.patronymic%TYPE,         birthday        nsi_person.birthday%TYPE,         nsi_type_id     nsi.nsi_type_id%TYPE,          create_date     nsi.create_date%TYPE,         modif_date      nsi.create_date%TYPE,         version         nsi_history.version%TYPE,         begin_date      nsi.begin_date%TYPE,         end_date        nsi_history.end_date%TYPE     );     TYPE nsi_person_list IS TABLE OF nsi_person_rec;      \/* \u0412\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0441\u043f\u0438\u0441\u043e\u043a, \u0430\u043a\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u0439 \u043d\u0430 \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u0443\u044e \u0434\u0430\u0442\u0443.     *  \u0415\u0441\u043b\u0438 \u0434\u0430\u0442\u0430 \u043d\u0435 \u0437\u0430\u0434\u0430\u043d\u0430, \u0430\u043a\u0442\u0443\u0430\u043b\u044c\u043d\u043e\u0439 \u0441\u0447\u0438\u0442\u0430\u0435\u0442\u0441\u044f \u0442\u0435\u043a\u0443\u0449\u0430\u044f \u0434\u0430\u0442\u0430.     *  @param p_date DATE - \u0434\u0430\u0442\u0430, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0441\u043f\u0440\u0430\u0432\u043e\u0447\u043d\u0438\u043a\u0430     *  @return nsi_person_table - \u0442\u0430\u0431\u043b\u0438\u0446\u0430 \u0441 \u0437\u0430\u043f\u0438\u0441\u044f\u043c\u0438 nsi_person_rec     *\/     FUNCTION nsi_person_table(p_date IN DATE := null)      RETURN nsi_person_list PIPELINED     AS         v_date date;     BEGIN         v_date := Trunc(Sysdate);         IF p_date IS NOT NULL THEN             v_date := Trunc(p_date);         END IF;          FOR rec IN (             SELECT                  p.nsi_id, p.surname, p.name, p.patronymic, p.birthday,                  n.nsi_type_id, n.create_date, n.modif_date,                  0 AS version, n.begin_date, to_date(null) AS end_date             FROM                  nsi_person p INNER JOIN nsi n                 ON (p.nsi_id = n.nsi_id)             WHERE                  n.begin_date &lt;= v_date             UNION ALL             SELECT                  n.nsi_id,                  json_value(h.content, '$.SURNAME') AS surname,                  json_value(h.content, '$.NAME') AS name,                 json_value(h.content, '$.PATRONYMIC') AS patronymic,                 to_date(json_value(h.content, '$.BIRTHDAY')) AS birthday,                 n.nsi_type_id, n.create_date, n.modif_date,                  h.version, h.begin_date, h.end_date             FROM                  nsi_history h INNER JOIN nsi n                 ON (h.nsi_id = n.nsi_id AND h.nsi_type_id = n.nsi_type_id)             WHERE                      h.begin_date &lt;= v_date                 AND h.end_date &gt;= v_date         ) LOOP             PIPE ROW (rec);         END LOOP;     END nsi_person_table; <\/code><\/pre>\n<p>  \u0418 \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u043a\u043e\u0433\u043e-\u043d\u0438\u0431\u0443\u0434\u044c \u0432 \u044d\u0442\u0443 \u0442\u0430\u0431\u043b\u0438\u0446\u0443.<\/p>\n<pre><code class=\"sql\">INSERT INTO nsi_person (surname, name, patronymic, birthday) VALUES ('\u0414\u0435\u0440\u0435\u0432\u044f\u043d\u043d\u044b\u0439', '\u0411\u0443\u0440\u0430\u0442\u0438\u043d\u043e', '\u041a\u0430\u0440\u043b\u043e\u0432\u0438\u0447', to_date('22.12.70', 'dd.mm.yy')); <\/code><\/pre>\n<p>  \u0421\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u044b \u0434\u043b\u044f \u0441\u0430\u043c\u043e\u0433\u043e \u0432\u043e\u0441\u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e \u0440\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u043f\u0430\u0434\u0435\u0436\u0430.<\/p>\n<pre><code class=\"sql\">INSERT INTO nsi_attribute_type (nsi_attribute_type_id, value_type, descr)  VALUES (1, 1, '\u0424\u0430\u043c\u0438\u043b\u0438\u044f \u0432 \u0440\u043e\u0434. \u043f\u0430\u0434\u0435\u0436\u0435'); INSERT INTO nsi_attribute_type (nsi_attribute_type_id, value_type, descr)  VALUES (2, 1, '\u0418\u043c\u044f \u0432 \u0440\u043e\u0434. \u043f\u0430\u0434\u0435\u0436\u0435'); INSERT INTO nsi_attribute_type (nsi_attribute_type_id, value_type, descr)  VALUES (3, 1, '\u041e\u0442\u0447\u0435\u0441\u0442\u0432\u043e \u0432 \u0440\u043e\u0434. \u043f\u0430\u0434\u0435\u0436\u0435'); <\/code><\/pre>\n<p>  \u0412 \u043f\u0430\u043a\u0435\u0442\u0435 pkg_nsi \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u0430\u043c\u0438 \u0441\u043f\u0440\u0430\u0432\u043e\u0447\u043d\u0438\u043a\u043e\u0432.<\/p>\n<pre><code class=\"sql\">    \/* \u0414\u043b\u044f \u043f\u0435\u0440\u0435\u0434\u0430\u043d\u043d\u043e\u0433\u043e id \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0442\u0438\u043f \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0438 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u0430.     *  @param p_nsi_attribute_type_id nsi_attribute_type.nsi_attribute_type_id%TYPE - \u0422\u0438\u043f \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u0430     *  @param p_value_type nsi_attribute_type.value_type%TYPE - \u0422\u0438\u043f \u0437\u043d\u0430\u0435\u043d\u0438\u044f     *  @param p_descr nsi_attribute_type.descr%TYPE - \u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u0430     *\/     PROCEDURE get_attribute_type (         p_nsi_attribute_type_id IN nsi_attribute_type.nsi_attribute_type_id%TYPE,         p_value_type            OUT nsi_attribute_type.value_type%TYPE,         p_descr                 OUT nsi_attribute_type.descr%TYPE)     AS     BEGIN         SELECT value_type, descr           INTO p_value_type, p_descr           FROM nsi_attribute_type          WHERE nsi_attribute_type_id = p_nsi_attribute_type_id;     END;       \/* \u0420\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u0442 \u0432\u0441\u0442\u0430\u0432\u043a\u0443 \u0437\u0430\u043f\u0438\u0441\u0438.     *  @param p_nsi_attribute_type_id nsi_attribute.nsi_attribute_type_id%TYPE - \u0422\u0438\u043f \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u0430     *  @param p_nsi_id nsi_attribute.nsi_id%TYPE - \u0421\u043f\u0440\u0430\u0432\u043e\u0447\u043d\u0438\u043a     *  @param p_nsi_type_id nsi_attribute.nsi_type_id%TYPE - \u0422\u0438\u043f \u0441\u043f\u0440\u0430\u0432\u043e\u0447\u043d\u0438\u043a\u0430     *  @param p_value_1 nsi_attribute.value_1%TYPE - \u0417\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0441\u0442\u0440\u043e\u043a\u043e\u0432\u043e\u0433\u043e \u0442\u0438\u043f\u0430     *  @param p_value_2_3 nsi_attribute.value_2_3%TYPE - \u0417\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0447\u0438\u0441\u043b\u043e\u0432\u043e\u0433\u043e \u0442\u0438\u043f\u0430     *  @param p_value_4 nsi_attribute.value_4%TYPE - \u0417\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0442\u0438\u043f\u0430 \u0434\u0430\u0442\u044b     *  @param p_begin_date nsi_attribute.begin_date%TYPE - \u0414\u0430\u0442\u0430 \u043d\u0430\u0447\u0430\u043b\u0430 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u0430     *  @param p_end_date nsi_attribute.end_date%TYPE - \u0414\u0430\u0442\u0430 \u043e\u043a\u043e\u043d\u0447\u0430\u043d\u0438\u044f \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u0430     *\/     PROCEDURE nsi_attribute_insert (         p_nsi_attribute_type_id IN nsi_attribute.nsi_attribute_type_id%TYPE,         p_nsi_id                IN nsi_attribute.nsi_id%TYPE,         p_nsi_type_id           IN nsi_attribute.nsi_type_id%TYPE,         p_value_1               IN nsi_attribute.value_1%TYPE,         p_value_2_3             IN nsi_attribute.value_2_3%TYPE,         p_value_4               IN nsi_attribute.value_4%TYPE,         p_begin_date            IN nsi_attribute.begin_date%TYPE,         p_end_date              IN nsi_attribute.end_date%TYPE)     AS         v_id            NUMBER;         v_log_descr     nsi_log.descr%TYPE;         v_value_type    nsi_attribute_type.value_type%TYPE;         v_descr         nsi_attribute_type.descr%TYPE;     BEGIN         v_id := get_nsi_id;         get_attribute_type(p_nsi_attribute_type_id, v_value_type, v_descr);          IF (v_value_type = NSI_ATTRIBUTE_TYPE_STRING) THEN             INSERT INTO nsi_attribute                  (nsi_attribute_id, nsi_attribute_type_id, nsi_id, nsi_type_id,                   value_1, value_2_3, value_4, begin_date, end_date)             VALUES (v_id, p_nsi_attribute_type_id, p_nsi_id, p_nsi_type_id,                     p_value_1, null, null, p_begin_date, p_end_date);                                  v_log_descr := p_value_1;                              ELSIF (v_value_type IN (NSI_ATTRIBUTE_TYPE_INT, NSI_ATTRIBUTE_TYPE_DOUBLE)) THEN             INSERT INTO nsi_attribute                  (nsi_attribute_id, nsi_attribute_type_id, nsi_id, nsi_type_id,                   value_1, value_2_3, value_4, begin_date, end_date)             VALUES (v_id, p_nsi_attribute_type_id, p_nsi_id, p_nsi_type_id,                     null, p_value_2_3, null, p_begin_date, p_end_date);                                  v_log_descr := p_value_2_3;                              ELSE             INSERT INTO nsi_attribute                  (nsi_attribute_id, nsi_attribute_type_id, nsi_id, nsi_type_id,                   value_1, value_2_3, value_4, begin_date, end_date)             VALUES (v_id, p_nsi_attribute_type_id, p_nsi_id, p_nsi_type_id,                     null, null, p_value_4, p_begin_date, p_end_date);                                  v_log_descr := p_value_4;         END IF;                  v_log_descr := '[' || get_nsi_descr(p_nsi_id, p_nsi_type_id) || '] ' ||                        ' \u0410\u0442\u0440\u0438\u0431\u0443\u0442: ' || v_descr ||                         ' \u0417\u043d\u0430\u0447\u0435\u043d\u0438\u0435: ' || v_log_descr ||                         ' \u041f\u0435\u0440\u0438\u043e\u0434: ' || p_begin_date || ' - ' || p_end_date;         log_oper(p_nsi_id, p_nsi_type_id, NSI_LOG_OPERNUM_ATTR_INSERT, v_log_descr);     END;      \/* \u0420\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u0442 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u0442\u0438\u043f\u0430 \u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u0430.     *  @param p_nsi_attribute_id nsi_attribute.nsi_attribute_id%TYPE - \u041a\u043b\u044e\u0447 \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u0430     *  @param p_value_1 nsi_attribute.value_1%TYPE - \u0417\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0441\u0442\u0440\u043e\u043a\u043e\u0432\u043e\u0433\u043e \u0442\u0438\u043f\u0430     *  @param p_value_2_3 nsi_attribute.value_2_3%TYPE - \u0417\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0447\u0438\u0441\u043b\u043e\u0432\u043e\u0433\u043e \u0442\u0438\u043f\u0430     *  @param p_value_4 nsi_attribute.value_4%TYPE - \u0417\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0442\u0438\u043f\u0430 \u0434\u0430\u0442\u044b     *\/     PROCEDURE nsi_attribute_value (         p_nsi_attribute_id      IN nsi_attribute.nsi_attribute_id%TYPE,         p_value_1               IN nsi_attribute.value_1%TYPE,         p_value_2_3             IN nsi_attribute.value_2_3%TYPE,         p_value_4               IN nsi_attribute.value_4%TYPE)     AS         v_nsi_id            nsi.nsi_id%TYPE;         v_nsi_type_id       nsi.nsi_type_id%TYPE;         v_log_descr         nsi_log.descr%TYPE;         v_value_type        nsi_attribute_type.value_type%TYPE;         v_descr             nsi_attribute_type.descr%TYPE;         v_nsi_attribute_type_id  nsi_attribute.nsi_attribute_type_id%TYPE;     BEGIN         SELECT nsi_attribute_type_id, nsi_id, nsi_type_id           INTO v_nsi_attribute_type_id, v_nsi_id, v_nsi_type_id           FROM nsi_attribute           WHERE nsi_attribute_id = p_nsi_attribute_id;                    get_attribute_type(v_nsi_attribute_type_id, v_value_type, v_descr);                  IF (v_value_type = NSI_ATTRIBUTE_TYPE_STRING) THEN             UPDATE nsi_attribute                SET value_1 = p_value_1,                    value_2_3 = null,                    value_4 = null             WHERE nsi_attribute_id = p_nsi_attribute_id;              v_log_descr := p_value_1;                              ELSIF (v_value_type IN (NSI_ATTRIBUTE_TYPE_INT, NSI_ATTRIBUTE_TYPE_DOUBLE)) THEN             UPDATE nsi_attribute                SET value_1 = null,                    value_2_3 = p_value_2_3,                    value_4 = null             WHERE nsi_attribute_id = p_nsi_attribute_id;              v_log_descr := p_value_2_3;                              ELSE             UPDATE nsi_attribute                SET value_1 = null,                    value_2_3 = null,                    value_4 = p_value_4             WHERE nsi_attribute_id = p_nsi_attribute_id;              v_log_descr := p_value_4;         END IF;                    v_log_descr := '[' || get_nsi_descr(v_nsi_id, v_nsi_type_id) || '] ' ||                        ' \u0410\u0442\u0440\u0438\u0431\u0443\u0442: ' || v_descr ||                         ' \u0418\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f: ' || v_log_descr;         log_oper(v_nsi_id, v_nsi_type_id, NSI_LOG_OPERNUM_ATTR_UPDATE, v_log_descr);     END;      \/* \u0420\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u0442 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u043f\u0435\u0440\u0438\u043e\u0434\u0430 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u0430.     *  @param p_nsi_attribute_id nsi_attribute.nsi_attribute_id%TYPE - \u041a\u043b\u044e\u0447 \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u0430     *  @param p_begin_date nsi_attribute.begin_date%TYPE - \u0414\u0430\u0442\u0430 \u043d\u0430\u0447\u0430\u043b\u0430 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u0430     *  @param p_end_date nsi_attribute.end_date%TYPE - \u0414\u0430\u0442\u0430 \u043e\u043a\u043e\u043d\u0447\u0430\u043d\u0438\u044f \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u0430     *\/     PROCEDURE nsi_attribute_period (         p_nsi_attribute_id  IN nsi_attribute.nsi_attribute_id%TYPE,         p_begin_date        IN nsi_attribute.begin_date%TYPE,         p_end_date          IN nsi_attribute.end_date%TYPE)     AS         v_nsi_id        nsi.nsi_id%TYPE;         v_nsi_type_id   nsi.nsi_type_id%TYPE;         v_log_descr     nsi_log.descr%TYPE;         v_value_type    nsi_attribute_type.value_type%TYPE;         v_descr         nsi_attribute_type.descr%TYPE;         v_nsi_attribute_type_id nsi_attribute.nsi_attribute_type_id%TYPE;     BEGIN         SELECT nsi_id, nsi_type_id, nsi_attribute_type_id           INTO v_nsi_id, v_nsi_type_id, v_nsi_attribute_type_id           FROM nsi_attribute          WHERE nsi_attribute_id = p_nsi_attribute_id;              get_attribute_type(v_nsi_attribute_type_id, v_value_type, v_descr);                  UPDATE nsi_attribute            SET begin_date = p_begin_date,                end_date = p_end_date          WHERE nsi_attribute_id = p_nsi_attribute_id;                   v_log_descr := '[' || get_nsi_descr(v_nsi_id, v_nsi_type_id) || '] ' ||                        ' \u0410\u0442\u0440\u0438\u0431\u0443\u0442: ' || v_descr ||                         ' \u0418\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u043f\u0435\u0440\u0438\u043e\u0434\u0430: ' || p_begin_date || ' - ' || p_end_date;         log_oper(v_nsi_id, v_nsi_type_id, NSI_LOG_OPERNUM_ATTR_UPDATE, v_log_descr);     END;      \/* \u0420\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u0442 \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u0435 \u0437\u0430\u043f\u0438\u0441\u0438.     *  @param p_nsi_attribute_id nsi_person.nsi_attribute_id%TYPE - id \u0437\u0430\u043f\u0438\u0441\u0438 nsi_attribute     *\/     PROCEDURE nsi_attribute_delete (p_nsi_attribute_id nsi_attribute.nsi_attribute_id%TYPE)     AS         v_nsi_id        nsi.nsi_id%TYPE;         v_nsi_type_id   nsi.nsi_type_id%TYPE;         v_log_descr     nsi_log.descr%TYPE;         v_value_type    nsi_attribute_type.value_type%TYPE;         v_descr         nsi_attribute_type.descr%TYPE;         v_nsi_attribute_type_id nsi_attribute.nsi_attribute_type_id%TYPE;     BEGIN         SELECT nsi_id, nsi_type_id, nsi_attribute_type_id           INTO v_nsi_id, v_nsi_type_id, v_nsi_attribute_type_id           FROM nsi_attribute          WHERE nsi_attribute_id = p_nsi_attribute_id;              get_attribute_type(v_nsi_attribute_type_id, v_value_type, v_descr);                  DELETE FROM nsi_attribute         WHERE nsi_attribute_id = p_nsi_attribute_id;                   v_log_descr := '[' || get_nsi_descr(v_nsi_id, v_nsi_type_id) || '] ' ||                        ' \u0410\u0442\u0440\u0438\u0431\u0443\u0442: ' || v_descr;         log_oper(v_nsi_id, v_nsi_type_id, NSI_LOG_OPERNUM_ATTR_DELETE, v_log_descr);     END; <\/code><\/pre>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u043f\u0440\u0438\u0441\u0432\u043e\u0438\u043c \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0435 \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u044b.<\/p>\n<pre><code class=\"sql\">begin     pkg_nsi.nsi_attribute_insert(1, 225, 6, '\u0434\u0435\u0440\u0435\u0432\u044f\u043d\u043d\u043e\u0433\u043e', null, null, sysdate, null);     pkg_nsi.nsi_attribute_insert(2, 225, 6, '\u0411\u0443\u0440\u0430\u0442\u0438\u043d\u043e', null, null, sysdate, null);     pkg_nsi.nsi_attribute_insert(3, 225, 6, '\u041a\u0430\u0440\u043b\u043e\u0432\u0438\u0447\u0430', null, null, sysdate, null); end;  -- \u043d\u043e \u043a\u043e\u0433\u0434\u0430 \u043f\u0440\u043e\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u0435\u043c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0432\u0438\u0434\u0438\u043c \u043e\u0448\u0438\u0431\u043a\u0443, \u0444\u0430\u043c\u0438\u043b\u0438\u044f \u0411\u0443\u0440\u0430\u0442\u0438\u043d\u043e \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0430 \u0441 \u043c\u0430\u043b\u0435\u043d\u044c\u043a\u043e\u0439 \u0431\u0443\u043a\u0432\u044b, \u043d\u0443\u0436\u043d\u043e \u0438\u0441\u043f\u0440\u0430\u0432\u0438\u0442\u044c -------------------------------------------------------------------------------------------- &quot;NSI_ATTRIBUTE_ID&quot;\t&quot;NSI_ATTRIBUTE_TYPE_ID&quot;\t&quot;NSI_ID&quot;\t&quot;NSI_TYPE_ID&quot;\t&quot;VALUE_1&quot;\t&quot;VALUE_2_3&quot;\t&quot;VALUE_4&quot;\t&quot;BEGIN_DATE&quot;\t&quot;END_DATE&quot; 230\t1\t225\t6\t&quot;\u0434\u0435\u0440\u0435\u0432\u044f\u043d\u043d\u043e\u0433\u043e&quot;\t\t\t11.03.20\t 232\t2\t225\t6\t&quot;\u0411\u0443\u0440\u0430\u0442\u0438\u043d\u043e&quot;\t\t\t11.03.20\t 234\t3\t225\t6\t&quot;\u041a\u0430\u0440\u043b\u043e\u0432\u0438\u0447\u0430&quot;\t\t\t11.03.20\t --------------------------------------------------------------------------------------------  begin     pkg_nsi.nsi_attribute_value(230, '\u0414\u0435\u0440\u0435\u0432\u044f\u043d\u043d\u043e\u0433\u043e', null, null); end; -------------------------------------------------------------------------------------------- &quot;NSI_ATTRIBUTE_ID&quot;\t&quot;NSI_ATTRIBUTE_TYPE_ID&quot;\t&quot;NSI_ID&quot;\t&quot;NSI_TYPE_ID&quot;\t&quot;VALUE_1&quot;\t&quot;VALUE_2_3&quot;\t&quot;VALUE_4&quot;\t&quot;BEGIN_DATE&quot;\t&quot;END_DATE&quot; 230\t1\t225\t6\t&quot;\u0414\u0435\u0440\u0435\u0432\u044f\u043d\u043d\u043e\u0433\u043e&quot;\t\t\t11.03.20 232\t2\t225\t6\t&quot;\u0411\u0443\u0440\u0430\u0442\u0438\u043d\u043e&quot;\t\t\t11.03.20\t 234\t3\t225\t6\t&quot;\u041a\u0430\u0440\u043b\u043e\u0432\u0438\u0447\u0430&quot;\t\t\t11.03.20\t --------------------------------------------------------------------------------------------  -- \u043f\u0435\u0440\u0435\u043d\u0435\u0441\u0451\u043c \u043d\u0430\u0447\u0430\u043b\u043e \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u0430 \u043d\u0430 \u0434\u0435\u043d\u044c \u0440\u0430\u043d\u044c\u0448\u0435 begin     pkg_nsi.nsi_attribute_period(230, sysdate-1, null);     pkg_nsi.nsi_attribute_period(232, sysdate-1, null);     pkg_nsi.nsi_attribute_period(234, sysdate-1, null); end; -------------------------------------------------------------------------------------------- &quot;NSI_ATTRIBUTE_ID&quot;\t&quot;NSI_ATTRIBUTE_TYPE_ID&quot;\t&quot;NSI_ID&quot;\t&quot;NSI_TYPE_ID&quot;\t&quot;VALUE_1&quot;\t&quot;VALUE_2_3&quot;\t&quot;VALUE_4&quot;\t&quot;BEGIN_DATE&quot;\t&quot;END_DATE&quot; 230\t1\t225\t6\t&quot;\u0414\u0435\u0440\u0435\u0432\u044f\u043d\u043d\u043e\u0433\u043e&quot;\t\t\t10.03.20\t 232\t2\t225\t6\t&quot;\u0411\u0443\u0440\u0430\u0442\u0438\u043d\u043e&quot;\t\t\t10.03.20\t 234\t3\t225\t6\t&quot;\u041a\u0430\u0440\u043b\u043e\u0432\u0438\u0447\u0430&quot;\t\t\t10.03.20\t -------------------------------------------------------------------------------------------- <\/code><\/pre>\n<p>  \u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u043c\u044b <b>\u043f\u043e\u0431\u0435\u0434\u0438\u043c \u0442\u0440\u0435\u0442\u044c\u044e \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0443<\/b>. <\/p>\n<p>  \u041a\u0440\u043e\u043c\u0435 \u0442\u0430\u0431\u043b\u0438\u0446 \u0441\u043f\u0440\u0430\u0432\u043e\u0447\u043d\u0438\u043a\u043e\u0432 \u0432 \u0441\u0438\u0441\u0442\u0435\u043c\u0435 \u041d\u0421\u0418 \u0442\u0430\u043a\u0436\u0435 \u0432\u0430\u0436\u043d\u044b \u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u0435 \u043c\u0435\u0436\u0434\u0443 \u043d\u0438\u043c\u0438. \u0422\u0430\u043a, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u043a\u0440\u0443\u043f\u043d\u044b\u0435 \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u0430\u0446\u0438\u0438 \u0432\u043a\u043b\u044e\u0447\u0430\u044e\u0442 \u0432 \u0441\u0435\u0431\u044f \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0435 \u043f\u043e\u0434\u0440\u0430\u0437\u0434\u0435\u043b\u0435\u043d\u0438\u044f, \u0444\u0438\u043b\u0438\u0430\u043b\u044b, \u043e\u0442\u0434\u0435\u043b\u044b \u0438 \u0442.\u043f., \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u043e\u0436\u043d\u043e \u0432\u044b\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u0432 \u0434\u0440\u0435\u0432\u043e\u0432\u0438\u0434\u043d\u0443\u044e \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443. \u0414\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430 \u0437\u0430\u0432\u0435\u0434\u0451\u043c \u0432 \u043d\u0430\u0448\u0435\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u0435 \u0435\u0449\u0451 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u0430\u0446\u0438\u0439, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0431\u0443\u0434\u0443\u0442 \u0432 \u043f\u043e\u0434\u0447\u0438\u043d\u0435\u043d\u0438\u0438 \u0443 \u0443\u0436\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u0439 \u00ab\u0420\u043e\u0433\u0430 \u0438 \u043a\u043e\u043f\u044b\u0442\u0430\u00bb. <\/p>\n<pre><code class=\"sql\">INSERT INTO nsi_organization (name, full_name, inn) VALUES ('\u041f\u043e\u0434\u0440\u0430\u0437\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u043f\u043e \u043e\u0431\u0441\u043b\u0443\u0436\u0438\u0432\u0430\u043d\u0438\u044e \u0440\u043e\u0433\u043e\u0432', '\u041f\u043e\u0434\u0440\u0430\u0437\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u043f\u043e \u043e\u0431\u0441\u043b\u0443\u0436\u0438\u0432\u0430\u043d\u0438\u044e \u0440\u043e\u0433\u043e\u0432', '1111111111'); INSERT INTO nsi_organization (name, full_name, inn) VALUES ('\u041f\u043e\u0434\u0440\u0430\u0437\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u043f\u043e \u043e\u0431\u0441\u043b\u0443\u0436\u0438\u0432\u0430\u043d\u0438\u044e \u043a\u043e\u043f\u044b\u0442', '\u041f\u043e\u0434\u0440\u0430\u0437\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u043f\u043e \u043e\u0431\u0441\u043b\u0443\u0436\u0438\u0432\u0430\u043d\u0438\u044e \u043a\u043e\u043f\u044b\u0442', '2222222222'); INSERT INTO nsi_organization (name, full_name, inn) VALUES ('\u041e\u0442\u0434\u0435\u043b \u043f\u043e \u0438\u0437\u0433\u043e\u0442\u043e\u0432\u043b\u0435\u043d\u0438\u044e \u043f\u043e\u0434\u043a\u043e\u0432', '\u041e\u0442\u0434\u0435\u043b \u043f\u043e \u0438\u0437\u0433\u043e\u0442\u043e\u0432\u043b\u0435\u043d\u0438\u044e \u043f\u043e\u0434\u043a\u043e\u0432', '3333333333');  ---------------------------------------------------------------------------- 281\t1\t\u041f\u043e\u0434\u0440\u0430\u0437\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u043f\u043e \u043e\u0431\u0441\u043b\u0443\u0436\u0438\u0432\u0430\u043d\u0438\u044e \u0440\u043e\u0433\u043e\u0432\t13.03.20\t13.03.20\t13.03.20 283\t1\t\u041f\u043e\u0434\u0440\u0430\u0437\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u043f\u043e \u043e\u0431\u0441\u043b\u0443\u0436\u0438\u0432\u0430\u043d\u0438\u044e \u043a\u043e\u043f\u044b\u0442\t13.03.20\t13.03.20\t13.03.20 285\t1\t\u041e\u0442\u0434\u0435\u043b \u043f\u043e \u0438\u0437\u0433\u043e\u0442\u043e\u0432\u043b\u0435\u043d\u0438\u044e \u043f\u043e\u0434\u043a\u043e\u0432\t13.03.20\t13.03.20\t13.03.20 1\t1\t\u0410\u041e &quot;\u0420\u043e\u0433\u0430 \u0438 \u043a\u043e\u043f\u044b\u0442\u0430&quot;\t11.03.20\t13.03.20\t12.03.20 ---------------------------------------------------------------------------- <\/code><\/pre>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u043d\u0443\u0436\u043d\u043e \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u0432 \u043a\u0430\u043a\u043e\u043c \u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u0438 \u044d\u0442\u0438 \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u0430\u0446\u0438\u0438 \u043d\u0430\u0445\u043e\u0434\u044f\u0442\u0441\u044f \u043c\u0435\u0436\u0434\u0443 \u0441\u043e\u0431\u043e\u0439. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u0430 \u0442\u0430\u0431\u043b\u0438\u0446\u0430 \u0441 \u0434\u0440\u0435\u0432\u043e\u0432\u0438\u0434\u043d\u043e\u0439 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u043e\u0439 \u0438 \u0443\u043a\u0430\u0437\u0430\u043d\u0438\u0435\u043c \u043f\u0435\u0440\u0438\u043e\u0434\u0430 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f, \u043f\u043e\u0442\u043e\u043c\u0443 \u043a\u0430\u043a \u0432\u0441\u0451 \u043f\u043e\u0434\u0432\u0435\u0440\u0436\u0435\u043d\u043e \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435\u043c \u0432\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0438 \u043d\u0443\u0436\u043d\u043e \u044d\u0442\u043e \u0443\u0447\u0438\u0442\u044b\u0432\u0430\u0442\u044c. <\/p>\n<pre><code class=\"sql\">CREATE TABLE nsi_structure (     nsi_structure_id    NUMBER(10) NOT NULL,     nsi_parent_structure_id NUMBER(10),     nsi_id              NUMBER(10) NOT NULL,     nsi_type_id         NUMBER(10) NOT NULL,     ordnum              NUMBER,     begin_date          DATE NOT NULL,     end_date            DATE,     CONSTRAINT nsi_structure_pk PRIMARY KEY (nsi_structure_id),     CONSTRAINT nsi_parent_struct_fk FOREIGN KEY (nsi_parent_structure_id) REFERENCES nsi_structure (nsi_structure_id),     CONSTRAINT nsi_struct_nsi_fk FOREIGN KEY (nsi_id, nsi_type_id) REFERENCES nsi (nsi_id, nsi_type_id) );  COMMENT ON TABLE nsi_structure IS '\u041d\u0421\u0418. \u0422\u0430\u0431\u043b\u0438\u0446\u0430 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b \u0441\u043f\u0440\u0430\u0432\u043e\u0447\u043d\u0438\u043a\u043e\u0432'; COMMENT ON COLUMN nsi_structure.nsi_structure_id IS '\u041a\u043b\u044e\u0447'; COMMENT ON COLUMN nsi_structure.nsi_parent_structure_id IS '\u041a\u043b\u044e\u0447 \u0440\u043e\u0434\u0438\u0442\u0435\u043b\u044f'; COMMENT ON COLUMN nsi_structure.nsi_id IS '\u0421\u043f\u0440\u0430\u0432\u043e\u0447\u043d\u0438\u043a'; COMMENT ON COLUMN nsi_structure.nsi_type_id IS '\u0422\u0438\u043f \u0441\u043f\u0440\u0430\u0432\u043e\u0447\u043d\u0438\u043a\u0430'; COMMENT ON COLUMN nsi_structure.ordnum IS '\u041f\u043e\u0440\u044f\u0434\u043a\u043e\u0432\u044b\u0439 \u043d\u043e\u043c\u0435\u0440'; COMMENT ON COLUMN nsi_structure.begin_date IS '\u0414\u0430\u0442\u0430 \u043d\u0430\u0447\u0430\u043b\u0430 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f'; COMMENT ON COLUMN nsi_structure.end_date IS '\u0414\u0430\u0442\u0430 \u043e\u043a\u043e\u043d\u0447\u0430\u043d\u0438\u044f \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f'; <\/code><\/pre>\n<p>  \u041a\u043e\u043d\u0435\u0447\u043d\u043e, \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u0440\u0430\u0441\u0448\u0438\u0440\u0438\u0442\u044c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u043f\u0430\u043a\u0435\u0442\u0430 pkg_nsi, \u0447\u0442\u043e\u0431\u044b \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u043d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0442\u044c \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 \u0434\u043b\u044f \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0445 \u0442\u0430\u0431\u043b\u0438\u0446. <\/p>\n<pre><code class=\"sql\">    \/* \u0420\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u0442 \u0432\u0441\u0442\u0430\u0432\u043a\u0443 \u0437\u0430\u043f\u0438\u0441\u0438.     *  @param p_nsi_parent_structure_id nsi_structure.nsi_parent_structure_id%TYPE - \u0437\u0430\u043f\u0438\u0441\u044c \u0440\u043e\u0434\u0438\u0442\u0435\u043b\u044f     *  @param p_nsi_id nsi_structure.nsi_id%TYPE - \u0441\u043f\u0440\u0430\u0432\u043e\u0447\u043d\u0438\u043a     *  @param p_nsi_type_id nsi_structure.nsi_type_id%TYPE - \u0442\u0438\u043f \u0441\u043f\u0440\u0430\u0432\u043e\u0447\u043d\u0438\u043a\u0430     *  @param p_ordnum nsi_structure.ordnum%TYPE - \u043f\u043e\u0440\u044f\u0434\u043a\u043e\u0432\u044b\u0439 \u043d\u043e\u043c\u0435\u0440     *  @param p_begin_date nsi_structure.begin_date%TYPE - \u0434\u0430\u0442\u0430 \u043d\u0430\u0447\u0430\u043b\u0430 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u0437\u0430\u043f\u0438\u0441\u0438     *  @param p_end_date nsi_structure.end_date%TYPE - \u0434\u0430\u0442\u0430 \u043e\u043a\u043e\u043d\u0447\u0430\u043d\u0438\u044f \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u0437\u0430\u043f\u0438\u0441\u0438     *\/     FUNCTION nsi_structure_insert (         p_nsi_parent_structure_id   IN nsi_structure.nsi_parent_structure_id%TYPE,         p_nsi_id                    IN nsi_structure.nsi_id%TYPE,         p_nsi_type_id               IN nsi_structure.nsi_type_id%TYPE,         p_ordnum                    IN nsi_structure.ordnum%TYPE,         p_begin_date                IN nsi_structure.begin_date%TYPE,          p_end_date                  IN nsi_structure.end_date%TYPE)     RETURN nsi_structure.nsi_structure_id%TYPE     AS         v_id        NUMBER;         v_log_descr nsi_log.descr%TYPE;         v_type_id \tnsi.nsi_type_id%TYPE;     BEGIN         v_id := get_nsi_id;         v_type_id := get_type_id('nsi_structure');          INSERT INTO nsi_structure (             nsi_structure_id, nsi_parent_structure_id,             nsi_id, nsi_type_id, ordnum, begin_date, end_date)         VALUES (             v_id, p_nsi_parent_structure_id,              p_nsi_id, p_nsi_type_id, p_ordnum, Trunc(p_begin_date), Trunc(p_end_date));                   v_log_descr := '[' || get_nsi_descr(p_nsi_id, p_nsi_type_id) || '] ';         v_log_descr := v_log_descr || '\u041f\u0435\u0440\u0438\u043e\u0434 ' || p_begin_date || ' - ' || p_end_date;         log_oper (v_id, v_type_id, NSI_LOG_OPERNUM_INSERT, v_log_descr);                  RETURN v_id;     END nsi_structure_insert;       \/* \u0420\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u0442 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u043f\u043e\u0440\u044f\u0434\u043a\u043e\u0432\u043e\u0433\u043e \u043d\u043e\u043c\u0435\u0440\u0430 \u0437\u0430\u043f\u0438\u0441\u0438.     *  @param p_nsi_structure_id nsi_structure.nsi_structure_id%TYPE - \u043a\u043b\u044e\u0447 nsi_structure     *  @param p_ordnum nsi_structure.ordnum%TYPE - \u043f\u043e\u0440\u044f\u0434\u043a\u043e\u0432\u044b\u0439 \u043d\u043e\u043c\u0435\u0440     *\/     PROCEDURE nsi_structure_ordnum (         p_nsi_structure_id  IN nsi_structure.nsi_structure_id%TYPE,         p_ordnum            IN nsi_structure.ordnum%TYPE)     AS         v_nsi_id \t\t    nsi_structure.nsi_id%TYPE;         v_nsi_type_id \t    nsi_structure.nsi_type_id%TYPE;         v_type_id \t        nsi.nsi_type_id%TYPE;         v_log_descr         nsi_log.descr%TYPE;     BEGIN         v_type_id := get_type_id('nsi_structure');                  SELECT nsi_id, nsi_type_id           INTO v_nsi_id, v_nsi_type_id           FROM nsi_structure          WHERE nsi_structure_id = p_nsi_structure_id;          UPDATE nsi_structure            SET ordnum = p_ordnum           WHERE nsi_structure_id = p_nsi_structure_id;                   v_log_descr := '[' || get_nsi_descr(v_nsi_id, v_nsi_type_id) || '] ';         v_log_descr := v_log_descr || '\u041d\u043e\u043c\u0435\u0440 ' || p_ordnum;         log_oper (p_nsi_structure_id, v_type_id, NSI_LOG_OPERNUM_UPDATE, v_log_descr);     END;       \/* \u0420\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u0442 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u043f\u0435\u0440\u0438\u043e\u0434\u0430 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u0437\u0430\u043f\u0438\u0441\u0438.     *  @param p_nsi_structure_id nsi_structure.nsi_structure_id%TYPE - \u043a\u043b\u044e\u0447 nsi_structure     *  @param p_begin_date nsi_structure.begin_date%TYPE - \u0434\u0430\u0442\u0430 \u043d\u0430\u0447\u0430\u043b\u0430 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f     *  @param p_end_date nsi_structure.end_date%TYPE - \u0434\u0430\u0442\u0430 \u043e\u043a\u043e\u043d\u0447\u0430\u043d\u0438\u044f \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f     *\/     PROCEDURE nsi_structure_period (         p_nsi_structure_id  IN nsi_structure.nsi_structure_id%TYPE,         p_begin_date        IN nsi_structure.begin_date%TYPE,          p_end_date          IN nsi_structure.end_date%TYPE)     AS         v_nsi_id \t\t    nsi_structure.nsi_id%TYPE;         v_nsi_type_id \t    nsi_structure.nsi_type_id%TYPE;         v_type_id \t        nsi.nsi_type_id%TYPE;         v_log_descr         nsi_log.descr%TYPE;     BEGIN         v_type_id := get_type_id('nsi_structure');                  SELECT nsi_id, nsi_type_id           INTO v_nsi_id, v_nsi_type_id           FROM nsi_structure          WHERE nsi_structure_id = p_nsi_structure_id;          UPDATE nsi_structure            SET begin_date = Trunc(p_begin_date),                end_date = Trunc(p_end_date)           WHERE nsi_structure_id = p_nsi_structure_id;                   v_log_descr := '[' || get_nsi_descr(v_nsi_id, v_nsi_type_id) || '] ';         v_log_descr := v_log_descr || '\u041f\u0435\u0440\u0438\u043e\u0434 ' || p_begin_date || ' - ' || p_end_date;         log_oper (p_nsi_structure_id, v_type_id, NSI_LOG_OPERNUM_UPDATE, v_log_descr);     END;       \/* \u0420\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u0442 \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u0435 \u0437\u0430\u043f\u0438\u0441\u0438.     *  @param p_nsi_structure_id nsi_structure.nsi_structure_id%TYPE - \u043a\u043b\u044e\u0447 nsi_structure     *\/     PROCEDURE nsi_structure_delete (p_nsi_structure_id IN nsi_structure.nsi_structure_id%TYPE)     AS         v_type_id \tnsi.nsi_type_id%TYPE;         v_log_descr nsi_log.descr%TYPE;     BEGIN         v_type_id := pkg_nsi.get_type_id('nsi_structure');                  FOR rec IN (             SELECT nsi_structure_id, nsi_parent_structure_id,                     nsi_id, nsi_type_id, ordnum, begin_date, end_date             FROM nsi_structure             START WITH nsi_structure_id = p_nsi_structure_id             CONNECT BY PRIOR nsi_structure_id = nsi_parent_structure_id         )         LOOP             v_log_descr := '[' || pkg_nsi.get_nsi_descr(rec.nsi_id, rec.nsi_type_id) || '] ';             v_log_descr := v_log_descr || '\u041f\u0435\u0440\u0438\u043e\u0434 ' || rec.begin_date || ' - ' || rec.end_date;             pkg_nsi.log_oper (rec.nsi_structure_id, v_type_id, pkg_nsi.NSI_LOG_OPERNUM_DELETE, v_log_descr);         END LOOP;                  DELETE FROM nsi_structure         WHERE nsi_structure_id = p_nsi_structure_id;     END; <\/code><\/pre>\n<p>  \u041f\u043e\u0441\u043b\u0435 \u043f\u043e\u044f\u0432\u043b\u0435\u043d\u0438\u044f \u0442\u0430\u043a\u043e\u0433\u043e \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0430 \u043c\u043e\u0436\u043d\u043e \u0441\u043c\u0435\u043b\u043e \u0432\u044b\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0442\u044c \u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u044f \u043c\u0435\u0436\u0434\u0443 \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u0430\u0446\u0438\u044f\u043c\u0438.<\/p>\n<pre><code class=\"sql\">declare     id number;     root_id number; begin     root_id := pkg_nsi.nsi_structure_insert(null, 1, 1, null, to_date('13.02.20', 'dd.mm.yy'), null);     id := pkg_nsi.nsi_structure_insert(root_id, 281, 1, null, to_date('13.02.20', 'dd.mm.yy'), to_date('15.02.20', 'dd.mm.yy'));     id := pkg_nsi.nsi_structure_insert(root_id, 283, 1, null, to_date('13.02.20', 'dd.mm.yy'), null);     id := pkg_nsi.nsi_structure_insert(id, 285, 1, null, to_date('13.02.20', 'dd.mm.yy'), null); end;  SELECT * FROM nsi_structure START WITH (nsi_parent_structure_id IS NULL) CONNECT BY (nsi_parent_structure_id = PRIOR nsi_structure_id); ----------------------------------------------------------------------------------- 316\t\t1\t1\t\t13.02.20\t 318\t316\t281\t1\t\t13.02.20\t15.02.20 320\t316\t283\t1\t\t13.02.20\t 322\t320\t285\t1\t\t13.02.20\t -----------------------------------------------------------------------------------  -- \u0430 \u0435\u0441\u043b\u0438 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0437\u0430\u0434\u0430\u0442\u044c \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d\u043d\u0443\u044e \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0443 begin     pkg_nsi.nsi_structure_ordnum(320, 1);     pkg_nsi.nsi_structure_ordnum(318, 2); end;  SELECT * FROM nsi_structure START WITH (nsi_parent_structure_id IS NULL) CONNECT BY (nsi_parent_structure_id = PRIOR nsi_structure_id) ORDER SIBLINGS BY ordnum; ----------------------------------------------------------------------------------- 316\t\t1\t1\t\t13.02.20\t 320\t316\t283\t1\t1\t13.02.20\t 322\t320\t285\t1\t\t13.02.20\t 318\t316\t281\t1\t2\t13.02.20\t15.02.20 -----------------------------------------------------------------------------------  -- \u0438\u0437\u043c\u0435\u043d\u0438\u043c \u043f\u0435\u0440\u0438\u043e\u0434\u044b \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u043f\u043e\u0434\u0440\u0430\u0437\u0434\u0435\u043b\u0435\u043d\u0438\u044f begin     pkg_nsi.nsi_structure_period(320, to_date('14.02.20', 'dd.mm.yy'), to_date('14.02.20', 'dd.mm.yy')); end;  SELECT * FROM nsi_structure START WITH (nsi_parent_structure_id IS NULL) CONNECT BY (nsi_parent_structure_id = PRIOR nsi_structure_id) ORDER SIBLINGS BY ordnum; ----------------------------------------------------------------------------------- 316\t\t1\t1\t\t13.02.20\t 320\t316\t283\t1\t1\t14.02.20\t14.02.20 322\t320\t285\t1\t\t13.02.20\t 318\t316\t281\t1\t2\t13.02.20\t15.02.20 ----------------------------------------------------------------------------------- <\/code><\/pre>\n<p>  \u0422\u0430\u043a \u043a\u0430\u043a \u0441\u043f\u0440\u0430\u0432\u043e\u0447\u043d\u0438\u043a\u0438 \u043e\u0442\u0434\u0435\u043b\u0435\u043d\u044b \u043e\u0442 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b, \u0442\u043e \u043a\u0430\u0436\u0434\u044b\u0439 \u0440\u0430\u0437 \u043e\u0431\u0440\u0430\u0449\u0430\u0442\u044c\u0441\u044f \u043a \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u0430\u0446\u0438\u044f\u043c \u0441 \u0443\u0447\u0451\u0442\u043e\u043c \u0438\u0445 \u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u0439 \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u0433\u0440\u0430\u043c\u043e\u0437\u043a\u043e, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0443\u043f\u0440\u043e\u0441\u0442\u0438\u043c \u0441\u0435\u0431\u0435 \u0436\u0438\u0437\u043d\u044c.<\/p>\n<pre><code class=\"sql\">CREATE OR REPLACE VIEW V_NSI_ORGANIZATION AS SELECT      s.nsi_structure_id, s.nsi_parent_structure_id,     s.ordnum, s.begin_date, s.end_date,     s.nsi_id, s.nsi_type_id, o.name, o.full_name, o.inn FROM nsi_structure s INNER JOIN nsi_organization o     ON (s.nsi_id = o.nsi_id) START WITH (nsi_parent_structure_id IS NULL) CONNECT BY (nsi_parent_structure_id = PRIOR nsi_structure_id) ORDER SIBLINGS BY ordnum;  SELECT * FROM v_nsi_organization; ----------------------------------------------------------------------------------- 316\t\t\t13.02.20\t\t1\t1\t\u0410\u041e &quot;\u0420\u043e\u0433\u0430 \u0438 \u043a\u043e\u043f\u044b\u0442\u0430&quot;\t\u0410\u043a\u0446\u0438\u043e\u043d\u0435\u0440\u043d\u043e\u0435 \u043e\u0431\u0449\u0435\u0441\u0442\u0432\u043e &quot;\u0420\u043e\u0433\u0430 \u0438 \u043a\u043e\u043f\u044b\u0442\u0430&quot;\t99887766 320\t316\t1\t14.02.20\t14.02.20\t283\t1\t\u041f\u043e\u0434\u0440\u0430\u0437\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u043f\u043e \u043e\u0431\u0441\u043b\u0443\u0436\u0438\u0432\u0430\u043d\u0438\u044e \u043a\u043e\u043f\u044b\u0442\t\u041f\u043e\u0434\u0440\u0430\u0437\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u043f\u043e \u043e\u0431\u0441\u043b\u0443\u0436\u0438\u0432\u0430\u043d\u0438\u044e \u043a\u043e\u043f\u044b\u0442\t2222222222 322\t320\t\t13.02.20\t\t285\t1\t\u041e\u0442\u0434\u0435\u043b \u043f\u043e \u0438\u0437\u0433\u043e\u0442\u043e\u0432\u043b\u0435\u043d\u0438\u044e \u043f\u043e\u0434\u043a\u043e\u0432\t\u041e\u0442\u0434\u0435\u043b \u043f\u043e \u0438\u0437\u0433\u043e\u0442\u043e\u0432\u043b\u0435\u043d\u0438\u044e \u043f\u043e\u0434\u043a\u043e\u0432\t3333333333 318\t316\t2\t13.02.20\t15.02.20\t281\t1\t\u041f\u043e\u0434\u0440\u0430\u0437\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u043f\u043e \u043e\u0431\u0441\u043b\u0443\u0436\u0438\u0432\u0430\u043d\u0438\u044e \u0440\u043e\u0433\u043e\u0432\t\u041f\u043e\u0434\u0440\u0430\u0437\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u043f\u043e \u043e\u0431\u0441\u043b\u0443\u0436\u0438\u0432\u0430\u043d\u0438\u044e \u0440\u043e\u0433\u043e\u0432\t1111111111 ----------------------------------------------------------------------------------- <\/code><\/pre>\n<p>  \u0422\u043e, \u0447\u0442\u043e \u043c\u044b \u0441\u0442\u0440\u043e\u0438\u043c \u0434\u0435\u0440\u0435\u0432\u043e \u044d\u0442\u043e \u0437\u0430\u043c\u0435\u0447\u0430\u0442\u0435\u043b\u044c\u043d\u043e, \u043d\u043e \u0432\u0441\u0435 \u0443\u0437\u043b\u044b \u044d\u0442\u043e\u0433\u043e \u0434\u0435\u0440\u0435\u0432\u0430 \u043e\u0442\u043d\u043e\u0441\u044f\u0442\u0441\u044f \u043a \u043e\u0434\u043d\u043e\u0439 \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u0438, \u0430 \u043d\u0430\u0448\u0430 \u0437\u0430\u0434\u0430\u0447\u0430 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u0435 \u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u044f \u043c\u0435\u0436\u0434\u0443 \u0440\u0430\u0437\u043d\u044b\u043c\u0438 \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u044f\u043c\u0438. \u042d\u0442\u043e \u0442\u043e\u0436\u0435 \u043d\u0435 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430, \u043f\u043e\u0442\u043e\u043c\u0443 \u043a\u0430\u043a \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u043d\u0435 \u0437\u0430\u0432\u044f\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043d\u0430 \u043a\u0430\u043a\u043e\u0439-\u0442\u043e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d\u043d\u044b\u0439 \u0441\u043f\u0440\u0430\u0432\u043e\u0447\u043d\u0438\u043a, \u0430 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0432 \u0446\u0435\u043b\u043e\u043c \u043d\u0430 \u0432\u0441\u0435\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u0435 \u041d\u0421\u0418. \u0414\u043b\u044f \u043f\u0440\u0438\u043c\u0435\u0440\u0430 \u043f\u043e\u0441\u0442\u0440\u043e\u0438\u043c \u043a\u043b\u0430\u0441\u0441\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440 \u0434\u043b\u044f \u0434\u043e\u043b\u0436\u043d\u043e\u0441\u0442\u0435\u0439 \u0433\u043e\u0441\u0443\u0434\u0430\u0440\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0439 \u0433\u0440\u0430\u0436\u0434\u0430\u043d\u0441\u043a\u043e\u0439 \u0441\u043b\u0443\u0436\u0431\u044b \u0438 \u043a\u043b\u0430\u0441\u0441\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440 \u0434\u043b\u044f \u0434\u043e\u043b\u0436\u043d\u043e\u0441\u0442\u0435\u0439 \u043c\u0443\u043d\u0438\u0446\u0438\u043f\u0430\u043b\u0438\u0442\u0435\u0442\u0430. <\/p>\n<pre><code class=\"sql\">CREATE TABLE nsi_classifier (     nsi_id      NUMBER(10) NOT NULL,     code        VARCHAR2(10),     name        VARCHAR2(200) NOT NULL,     CONSTRAINT nsi_classifier_pk PRIMARY KEY (nsi_id),     CONSTRAINT nsi_classifier_nsi_fk FOREIGN KEY (nsi_id) REFERENCES nsi (nsi_id) );  COMMENT ON TABLE nsi_classifier IS '\u041d\u0421\u0418. \u041a\u043b\u0430\u0441\u0441\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440'; COMMENT ON COLUMN nsi_classifier.nsi_id IS '\u041a\u043b\u044e\u0447'; COMMENT ON COLUMN nsi_classifier.code IS '\u041a\u043e\u0434'; COMMENT ON COLUMN nsi_classifier.name IS '\u041d\u0430\u0438\u043c\u0435\u043d\u043e\u0432\u0430\u043d\u0438\u0435';   CREATE OR REPLACE TRIGGER nsi_classifier_trg_insert  BEFORE INSERT ON nsi_classifier FOR EACH ROW DECLARE     v_type_id \tnsi.nsi_type_id%TYPE;     v_log_descr nsi_log.descr%TYPE;     v_log_query VARCHAR(4000); BEGIN     v_type_id := pkg_nsi.get_type_id('nsi_classifier');     :NEW.nsi_id := pkg_nsi.get_nsi_id();      INSERT INTO nsi (nsi_id, nsi_type_id, descr, create_date, modif_date, begin_date)     VALUES (:NEW.nsi_id, v_type_id, :NEW.name, Trunc(Sysdate), Trunc(Sysdate), Trunc(Sysdate));          v_log_query := 'SELECT ''' || :NEW.name || ''' AS name, ''' || :NEW.code || ''' AS code FROM DUAL';     v_log_descr := pkg_nsi.get_json(v_log_query);     pkg_nsi.log_oper (:NEW.nsi_id, v_type_id, pkg_nsi.NSI_LOG_OPERNUM_INSERT, v_log_descr); END;  CREATE OR REPLACE TRIGGER nsi_classifier_trg_update  BEFORE UPDATE ON nsi_classifier FOR EACH ROW DECLARE     v_type_id \tnsi.nsi_type_id%TYPE;     v_log_descr nsi_log.descr%TYPE;     v_log_query VARCHAR(4000); BEGIN     v_type_id := pkg_nsi.get_type_id('nsi_classifier');      UPDATE nsi        SET modif_date = Trunc(Sysdate)      WHERE nsi_id = :NEW.nsi_id        AND nsi_type_id = v_type_id;          v_log_query := 'SELECT ''' || :NEW.name || ''' AS name, ''' || :NEW.code || ''' AS code FROM DUAL';     v_log_descr := pkg_nsi.get_json(v_log_query);     pkg_nsi.log_oper (:NEW.nsi_id, v_type_id, pkg_nsi.NSI_LOG_OPERNUM_UPDATE, v_log_descr); END;  CREATE OR REPLACE TRIGGER nsi_classifier_trg_delete  AFTER DELETE ON nsi_classifier FOR EACH ROW DECLARE     v_type_id \tnsi.nsi_type_id%TYPE;     v_log_descr nsi_log.descr%TYPE;     v_log_query VARCHAR(4000); BEGIN     v_type_id := pkg_nsi.get_type_id('nsi_classifier');      DELETE FROM nsi_history      WHERE nsi_id = :OLD.nsi_id       AND nsi_type_id = v_type_id;      DELETE FROM nsi_attribute      WHERE nsi_id = :OLD.nsi_id       AND nsi_type_id = v_type_id;      DELETE FROM nsi     WHERE nsi_id = :OLD.nsi_id       AND nsi_type_id = v_type_id;          v_log_query := 'SELECT ''' || :OLD.name || ''' AS name, ''' || :OLD.code || ''' AS code FROM DUAL';     v_log_descr := pkg_nsi.get_json(v_log_query);     pkg_nsi.log_oper (:OLD.nsi_id, v_type_id, pkg_nsi.NSI_LOG_OPERNUM_DELETE, v_log_descr); END; <\/code><\/pre>\n<p>  <\/p>\n<pre><code class=\"sql\">CREATE TABLE nsi_post_group (     nsi_id   NUMBER(10) NOT NULL,     name     VARCHAR2(50) NOT NULL,     CONSTRAINT nsi_post_group_pk PRIMARY KEY (nsi_id),     CONSTRAINT nsi_post_group_nsi_fk FOREIGN KEY (nsi_id) REFERENCES nsi (nsi_id) );  COMMENT ON TABLE nsi_post_group is '\u041d\u0421\u0418. \u0413\u0440\u0443\u043f\u043f\u0430 \u0434\u043e\u043b\u0436\u043d\u043e\u0441\u0442\u0438'; COMMENT ON COLUMN nsi_post_group.nsi_id is '\u041a\u043b\u044e\u0447'; COMMENT ON COLUMN nsi_post_group.name is '\u041d\u0430\u0438\u043c\u0435\u043d\u043e\u0432\u0430\u043d\u0438\u0435';   CREATE OR REPLACE TRIGGER nsi_post_group_trg_insert  BEFORE INSERT ON nsi_post_group FOR EACH ROW DECLARE     v_type_id \tnsi.nsi_type_id%TYPE;     v_log_descr nsi_log.descr%TYPE;     v_log_query VARCHAR(4000); BEGIN     v_type_id := pkg_nsi.get_type_id('nsi_post_group');     :NEW.nsi_id := pkg_nsi.get_nsi_id();      INSERT INTO nsi (nsi_id, nsi_type_id, descr, create_date, modif_date, begin_date)     VALUES (:NEW.nsi_id, v_type_id, :NEW.name, Trunc(Sysdate), Trunc(Sysdate), Trunc(Sysdate));          v_log_query := 'SELECT ''' || :NEW.name || ''' AS name FROM DUAL';     v_log_descr := pkg_nsi.get_json(v_log_query);     pkg_nsi.log_oper (:NEW.nsi_id, v_type_id, pkg_nsi.NSI_LOG_OPERNUM_INSERT, v_log_descr); END;  CREATE OR REPLACE TRIGGER nsi_post_group_trg_update  BEFORE UPDATE ON nsi_post_group FOR EACH ROW DECLARE     v_type_id \tnsi.nsi_type_id%TYPE;     v_log_descr nsi_log.descr%TYPE;     v_log_query VARCHAR(4000); BEGIN     v_type_id := pkg_nsi.get_type_id('nsi_post_group');      UPDATE nsi        SET modif_date = Trunc(Sysdate)      WHERE nsi_id = :NEW.nsi_id        AND nsi_type_id = v_type_id;          v_log_query := 'SELECT ''' || :NEW.name || ''' AS name FROM DUAL';     v_log_descr := pkg_nsi.get_json(v_log_query);     pkg_nsi.log_oper (:NEW.nsi_id, v_type_id, pkg_nsi.NSI_LOG_OPERNUM_UPDATE, v_log_descr); END;  CREATE OR REPLACE TRIGGER nsi_post_group_trg_delete  AFTER DELETE ON nsi_post_group FOR EACH ROW DECLARE     v_type_id \tnsi.nsi_type_id%TYPE;     v_log_descr nsi_log.descr%TYPE;     v_log_query VARCHAR(4000); BEGIN     v_type_id := pkg_nsi.get_type_id('nsi_post_group');      DELETE FROM nsi_history      WHERE nsi_id = :OLD.nsi_id       AND nsi_type_id = v_type_id;      DELETE FROM nsi_attribute      WHERE nsi_id = :OLD.nsi_id       AND nsi_type_id = v_type_id;      DELETE FROM nsi     WHERE nsi_id = :OLD.nsi_id       AND nsi_type_id = v_type_id;          v_log_query := 'SELECT ''' || :OLD.name || ''' AS name FROM DUAL';     v_log_descr := pkg_nsi.get_json(v_log_query);     pkg_nsi.log_oper (:OLD.nsi_id, v_type_id, pkg_nsi.NSI_LOG_OPERNUM_DELETE, v_log_descr); END; <\/code><\/pre>\n<p>  <\/p>\n<pre><code class=\"sql\">CREATE TABLE nsi_post_category (     nsi_id   NUMBER(10) NOT NULL,     name     VARCHAR2(50) NOT NULL,     CONSTRAINT nsi_post_category_pk PRIMARY KEY (nsi_id),     CONSTRAINT nsi_post_category_nsi_fk FOREIGN KEY (nsi_id) REFERENCES nsi (nsi_id) );  COMMENT ON TABLE nsi_post_category is '\u041d\u0421\u0418. \u041a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u044f \u0434\u043e\u043b\u0436\u043d\u043e\u0441\u0442\u0438'; COMMENT ON COLUMN nsi_post_category.nsi_id is '\u041a\u043b\u044e\u0447'; COMMENT ON COLUMN nsi_post_category.name is '\u041d\u0430\u0438\u043c\u0435\u043d\u043e\u0432\u0430\u043d\u0438\u0435';   CREATE OR REPLACE TRIGGER nsi_post_category_trg_insert  BEFORE INSERT ON nsi_post_category FOR EACH ROW DECLARE     v_type_id \tnsi.nsi_type_id%TYPE;     v_log_descr nsi_log.descr%TYPE;     v_log_query VARCHAR(4000); BEGIN     v_type_id := pkg_nsi.get_type_id('nsi_post_category');     :NEW.nsi_id := pkg_nsi.get_nsi_id();      INSERT INTO nsi (nsi_id, nsi_type_id, descr, create_date, modif_date, begin_date)     VALUES (:NEW.nsi_id, v_type_id, :NEW.name, Trunc(Sysdate), Trunc(Sysdate), Trunc(Sysdate));          v_log_query := 'SELECT ''' || :NEW.name || ''' AS name FROM DUAL';     v_log_descr := pkg_nsi.get_json(v_log_query);     pkg_nsi.log_oper (:NEW.nsi_id, v_type_id, pkg_nsi.NSI_LOG_OPERNUM_INSERT, v_log_descr); END;  CREATE OR REPLACE TRIGGER nsi_post_category_trg_update  BEFORE UPDATE ON nsi_post_category FOR EACH ROW DECLARE     v_type_id \tnsi.nsi_type_id%TYPE;     v_log_descr nsi_log.descr%TYPE;     v_log_query VARCHAR(4000); BEGIN     v_type_id := pkg_nsi.get_type_id('nsi_post_category');      UPDATE nsi        SET modif_date = Trunc(Sysdate)      WHERE nsi_id = :NEW.nsi_id        AND nsi_type_id = v_type_id;          v_log_query := 'SELECT ''' || :NEW.name || ''' AS name FROM DUAL';     v_log_descr := pkg_nsi.get_json(v_log_query);     pkg_nsi.log_oper (:NEW.nsi_id, v_type_id, pkg_nsi.NSI_LOG_OPERNUM_UPDATE, v_log_descr); END;  CREATE OR REPLACE TRIGGER nsi_post_category_trg_delete  AFTER DELETE ON nsi_post_category FOR EACH ROW DECLARE     v_type_id \tnsi.nsi_type_id%TYPE;     v_log_descr nsi_log.descr%TYPE;     v_log_query VARCHAR(4000); BEGIN     v_type_id := pkg_nsi.get_type_id('nsi_post_category');      DELETE FROM nsi_history      WHERE nsi_id = :OLD.nsi_id       AND nsi_type_id = v_type_id;      DELETE FROM nsi_attribute      WHERE nsi_id = :OLD.nsi_id       AND nsi_type_id = v_type_id;      DELETE FROM nsi     WHERE nsi_id = :OLD.nsi_id       AND nsi_type_id = v_type_id;          v_log_query := 'SELECT ''' || :OLD.name || ''' AS name FROM DUAL';     v_log_descr := pkg_nsi.get_json(v_log_query);     pkg_nsi.log_oper (:OLD.nsi_id, v_type_id, pkg_nsi.NSI_LOG_OPERNUM_DELETE, v_log_descr); END; <\/code><\/pre>\n<p>  <\/p>\n<pre><code class=\"sql\">CREATE TABLE nsi_post (     nsi_id          NUMBER(10) NOT NULL,     code_OKPDTR     VARCHAR2(10),     name            VARCHAR2(50) NOT NULL,     CONSTRAINT nsi_post_pk PRIMARY KEY (nsi_id),     CONSTRAINT nsi_post_nsi_fk FOREIGN KEY (nsi_id) REFERENCES nsi (nsi_id) );  COMMENT ON TABLE nsi_post IS '\u041d\u0421\u0418. \u0414\u043e\u043b\u0436\u043d\u043e\u0441\u0442\u044c'; COMMENT ON COLUMN nsi_post.nsi_id IS '\u041a\u043b\u044e\u0447'; COMMENT ON COLUMN nsi_post.code_OKPDTR IS '\u041a\u043e\u0434 \u041e\u041a\u041f\u0414\u0422\u0420'; COMMENT ON COLUMN nsi_post.name IS '\u041d\u0430\u0438\u043c\u0435\u043d\u043e\u0432\u0430\u043d\u0438\u0435';   CREATE OR REPLACE TRIGGER nsi_post_trg_insert  BEFORE INSERT ON nsi_post FOR EACH ROW DECLARE     v_type_id \tnsi.nsi_type_id%TYPE;     v_log_descr nsi_log.descr%TYPE;     v_log_query VARCHAR(4000); BEGIN     v_type_id := pkg_nsi.get_type_id('nsi_post');     :NEW.nsi_id := pkg_nsi.get_nsi_id();      INSERT INTO nsi (nsi_id, nsi_type_id, descr, create_date, modif_date, begin_date)     VALUES (:NEW.nsi_id, v_type_id, :NEW.name, Trunc(Sysdate), Trunc(Sysdate), Trunc(Sysdate));          v_log_query := 'SELECT ''' || :OLD.name || ''' AS name, ''' || :OLD.code_OKPDTR || ''' AS code_OKPDTR FROM DUAL';     v_log_descr := pkg_nsi.get_json(v_log_query);     pkg_nsi.log_oper (:NEW.nsi_id, v_type_id, pkg_nsi.NSI_LOG_OPERNUM_INSERT, v_log_descr); END;  CREATE OR REPLACE TRIGGER nsi_post_trg_update  BEFORE UPDATE ON nsi_post FOR EACH ROW DECLARE     v_type_id \tnsi.nsi_type_id%TYPE;     v_log_descr nsi_log.descr%TYPE;     v_log_query VARCHAR(4000); BEGIN     v_type_id := pkg_nsi.get_type_id('nsi_post');      UPDATE nsi        SET modif_date = Trunc(Sysdate)      WHERE nsi_id = :NEW.nsi_id        AND nsi_type_id = v_type_id;          v_log_query := 'SELECT ''' || :OLD.name || ''' AS name, ''' || :OLD.code_OKPDTR || ''' AS code_OKPDTR FROM DUAL';     v_log_descr := pkg_nsi.get_json(v_log_query);     pkg_nsi.log_oper (:NEW.nsi_id, v_type_id, pkg_nsi.NSI_LOG_OPERNUM_UPDATE, v_log_descr); END;  CREATE OR REPLACE TRIGGER nsi_post_trg_delete  AFTER DELETE ON nsi_post FOR EACH ROW DECLARE     v_type_id \tnsi.nsi_type_id%TYPE;     v_log_descr nsi_log.descr%TYPE;     v_log_query VARCHAR(4000); BEGIN     v_type_id := pkg_nsi.get_type_id('nsi_post');      DELETE FROM nsi_history      WHERE nsi_id = :OLD.nsi_id       AND nsi_type_id = v_type_id;      DELETE FROM nsi_attribute      WHERE nsi_id = :OLD.nsi_id       AND nsi_type_id = v_type_id;      DELETE FROM nsi     WHERE nsi_id = :OLD.nsi_id       AND nsi_type_id = v_type_id;          v_log_query := 'SELECT ''' || :OLD.name || ''' AS name, ''' || :OLD.code_OKPDTR || ''' AS code_OKPDTR FROM DUAL';     v_log_descr := pkg_nsi.get_json(v_log_query);     pkg_nsi.log_oper (:OLD.nsi_id, v_type_id, pkg_nsi.NSI_LOG_OPERNUM_DELETE, v_log_descr); END; <\/code><\/pre>\n<p>  \u041e\u0441\u0442\u0430\u043b\u043e\u0441\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u0437\u0430\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u0438 \u0441\u043e\u0431\u0440\u0430\u0442\u044c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0435 \u043a\u043b\u0430\u0441\u0441\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440\u044b.  <\/p>\n<pre><code class=\"sql\">INSERT INTO nsi_classifier (name) VALUES ('\u041a\u043b\u0430\u0441\u0441\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440 \u0434\u043e\u043b\u0436\u043d\u043e\u0441\u0442\u0435\u0439 \u0413\u0413\u0421'); INSERT INTO nsi_classifier (name) VALUES ('\u041a\u043b\u0430\u0441\u0441\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440 \u0434\u043e\u043b\u0436\u043d\u043e\u0441\u0442\u0435\u0439 \u043c\u0443\u043d\u0438\u0446\u0438\u043f\u0430\u043b\u0438\u0442\u0435\u0442\u0430');  INSERT INTO nsi_post_group (name) VALUES ('\u0412\u044b\u0441\u0448\u0438\u0435'); INSERT INTO nsi_post_group (name) VALUES ('\u0413\u043b\u0430\u0432\u043d\u044b\u0435'); INSERT INTO nsi_post_group (name) VALUES ('\u0412\u0435\u0434\u0443\u0449\u0438\u0435'); INSERT INTO nsi_post_group (name) VALUES ('\u0421\u0442\u0430\u0440\u0448\u0438\u0435'); INSERT INTO nsi_post_group (name) VALUES ('\u041c\u043b\u0430\u0434\u0448\u0438\u0435');  INSERT INTO nsi_post_category (name) VALUES ('\u0420\u0443\u043a\u043e\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u0438'); INSERT INTO nsi_post_category (name) VALUES ('\u041f\u043e\u043c\u043e\u0449\u043d\u0438\u043a\u0438 (\u0441\u043e\u0432\u0435\u0442\u043d\u0438\u043a\u0438)'); INSERT INTO nsi_post_category (name) VALUES ('\u0421\u043f\u0435\u0446\u0438\u0430\u043b\u0438\u0441\u0442\u044b'); INSERT INTO nsi_post_category (name) VALUES ('\u041e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0432\u0430\u044e\u0449\u0438\u0435 \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u0438\u0441\u0442');  INSERT INTO nsi_post (code_OKPDTR, name) VALUES ('24742', '\u041d\u0430\u0447\u0430\u043b\u044c\u043d\u0438\u043a \u043e\u0442\u0434\u0435\u043b\u0430'); INSERT INTO nsi_post (code_OKPDTR, name) VALUES ('26480', '\u0421\u043e\u0432\u0435\u0442\u043d\u0438\u043a'); INSERT INTO nsi_post (code_OKPDTR, name) VALUES ('23509', '\u041a\u043e\u043d\u0441\u0443\u043b\u044c\u0442\u0430\u043d\u0442'); INSERT INTO nsi_post (code_OKPDTR, name) VALUES ('20419', '\u0412\u0435\u0434\u0443\u0449\u0438\u0439 \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u0438\u0441\u0442'); INSERT INTO nsi_post (code_OKPDTR, name) VALUES ('26541', '\u0421\u043f\u0435\u0446\u0438\u0430\u043b\u0438\u0441\u0442'); INSERT INTO nsi_post (code_OKPDTR, name) VALUES ('26544', '\u0421\u043f\u0435\u0446\u0438\u0430\u043b\u0438\u0441\u0442 2 \u0440\u0430\u0437\u0440\u044f\u0434\u0430');  commit;  declare     post_id number;     classif_id number;     categ_id number;     group_id number; begin     -- \u041a\u043b\u0430\u0441\u0441\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440 \u0434\u043e\u043b\u0436\u043d\u043e\u0441\u0442\u0435\u0439 \u0413\u0413\u0421     classif_id := pkg_nsi.nsi_structure_insert(null, 331, 5, null, to_date('13.02.20', 'dd.mm.yy'), null);     -- \u0420\u0443\u043a\u043e\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u0438     categ_id := pkg_nsi.nsi_structure_insert(classif_id, 347, 4, 1, to_date('13.02.20', 'dd.mm.yy'), null);     -- \u0412\u044b\u0441\u0448\u0438\u0435     group_id := pkg_nsi.nsi_structure_insert(categ_id, 355, 3, 1, to_date('13.02.20', 'dd.mm.yy'), null);     -- \u0413\u043b\u0430\u0432\u043d\u044b\u0435     group_id := pkg_nsi.nsi_structure_insert(categ_id, 357, 3, 2, to_date('13.02.20', 'dd.mm.yy'), null);     -- \u041d\u0430\u0447\u0430\u043b\u044c\u043d\u0438\u043a \u043e\u0442\u0434\u0435\u043b\u0430     post_id := pkg_nsi.nsi_structure_insert(group_id, 335, 2, 1, to_date('13.02.20', 'dd.mm.yy'), null);     -- \u0412\u0435\u0434\u0443\u0449\u0438\u0435     group_id := pkg_nsi.nsi_structure_insert(categ_id, 359, 3, 3, to_date('13.02.20', 'dd.mm.yy'), null);     -- \u041f\u043e\u043c\u043e\u0449\u043d\u0438\u043a\u0438 (\u0441\u043e\u0432\u0435\u0442\u043d\u0438\u043a\u0438)     categ_id := pkg_nsi.nsi_structure_insert(classif_id, 349, 4, 2, to_date('13.02.20', 'dd.mm.yy'), null);     -- \u0412\u044b\u0441\u0448\u0438\u0435     group_id := pkg_nsi.nsi_structure_insert(categ_id, 355, 3, 1, to_date('13.02.20', 'dd.mm.yy'), null);     -- \u0413\u043b\u0430\u0432\u043d\u044b\u0435     group_id := pkg_nsi.nsi_structure_insert(categ_id, 357, 3, 2, to_date('13.02.20', 'dd.mm.yy'), null);     -- \u0412\u0435\u0434\u0443\u0449\u0438\u0435     group_id := pkg_nsi.nsi_structure_insert(categ_id, 359, 3, 3, to_date('13.02.20', 'dd.mm.yy'), null);     -- \u0421\u043e\u0432\u0435\u0442\u043d\u0438\u043a     post_id := pkg_nsi.nsi_structure_insert(group_id, 337, 2, 1, to_date('13.02.20', 'dd.mm.yy'), null);     -- \u0421\u043f\u0435\u0446\u0438\u0430\u043b\u0438\u0441\u0442\u044b     categ_id := pkg_nsi.nsi_structure_insert(classif_id, 351, 4, 3, to_date('13.02.20', 'dd.mm.yy'), null);     -- \u0412\u044b\u0441\u0448\u0438\u0435     group_id := pkg_nsi.nsi_structure_insert(categ_id, 355, 3, 1, to_date('13.02.20', 'dd.mm.yy'), null);     -- \u0413\u043b\u0430\u0432\u043d\u044b\u0435     group_id := pkg_nsi.nsi_structure_insert(categ_id, 357, 3, 2, to_date('13.02.20', 'dd.mm.yy'), null);     -- \u0412\u0435\u0434\u0443\u0449\u0438\u0435     group_id := pkg_nsi.nsi_structure_insert(categ_id, 359, 3, 3, to_date('13.02.20', 'dd.mm.yy'), null);     -- \u0412\u0435\u0434\u0443\u0449\u0438\u0439 \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u0438\u0441\u0442     post_id := pkg_nsi.nsi_structure_insert(group_id, 341, 2, 1, to_date('13.02.20', 'dd.mm.yy'), null);     -- \u0421\u0442\u0430\u0440\u0448\u0438\u0435     group_id := pkg_nsi.nsi_structure_insert(categ_id, 361, 3, 4, to_date('13.02.20', 'dd.mm.yy'), null);     -- \u041e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0432\u0430\u044e\u0449\u0438\u0435 \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u0438\u0441\u0442     categ_id := pkg_nsi.nsi_structure_insert(classif_id, 353, 4, 4, to_date('13.02.20', 'dd.mm.yy'), null);     -- \u0413\u043b\u0430\u0432\u043d\u044b\u0435     group_id := pkg_nsi.nsi_structure_insert(categ_id, 357, 3, 1, to_date('13.02.20', 'dd.mm.yy'), null);     -- \u0412\u0435\u0434\u0443\u0449\u0438\u0435     group_id := pkg_nsi.nsi_structure_insert(categ_id, 359, 3, 2, to_date('13.02.20', 'dd.mm.yy'), null);     -- \u0421\u0442\u0430\u0440\u0448\u0438\u0435     group_id := pkg_nsi.nsi_structure_insert(categ_id, 361, 3, 3, to_date('13.02.20', 'dd.mm.yy'), null);     -- \u041c\u043b\u0430\u0434\u0448\u0438\u0435     group_id := pkg_nsi.nsi_structure_insert(categ_id, 363, 3, 4, to_date('13.02.20', 'dd.mm.yy'), null);     -- \u0421\u043f\u0435\u0446\u0438\u0430\u043b\u0438\u0441\u0442 2 \u0440\u0430\u0437\u0440\u044f\u0434\u0430     post_id := pkg_nsi.nsi_structure_insert(group_id, 345, 2, 1, to_date('13.02.20', 'dd.mm.yy'), null);  commit; end;   SELECT * FROM nsi_structure s START WITH (nsi_id = 331) CONNECT BY (nsi_parent_structure_id = PRIOR nsi_structure_id) ORDER SIBLINGS BY ordnum; ---------------------------------------------------------------------------------- &quot;NSI_STRUCTURE_ID&quot;\t&quot;NSI_PARENT_STRUCTURE_ID&quot;\t&quot;NSI_ID&quot;\t&quot;NSI_TYPE_ID&quot;\t&quot;ORDNUM&quot;\t&quot;BEGIN_DATE&quot;\t&quot;END_DATE&quot; 385\t\t331\t5\t\t13.02.20\t 387\t385\t347\t4\t1\t13.02.20\t 389\t387\t355\t3\t1\t13.02.20\t 391\t387\t357\t3\t2\t13.02.20\t 393\t391\t335\t2\t1\t13.02.20\t 395\t387\t359\t3\t3\t13.02.20\t 397\t385\t349\t4\t2\t13.02.20\t 399\t397\t355\t3\t1\t13.02.20\t 401\t397\t357\t3\t2\t13.02.20\t 403\t397\t359\t3\t3\t13.02.20\t 405\t403\t337\t2\t1\t13.02.20\t 407\t385\t351\t4\t3\t13.02.20\t 409\t407\t355\t3\t1\t13.02.20\t 411\t407\t357\t3\t2\t13.02.20\t 413\t407\t359\t3\t3\t13.02.20\t 415\t413\t341\t2\t1\t13.02.20\t 417\t407\t361\t3\t4\t13.02.20\t 419\t385\t353\t4\t4\t13.02.20\t 421\t419\t357\t3\t1\t13.02.20\t 423\t419\t359\t3\t2\t13.02.20\t 425\t419\t361\t3\t3\t13.02.20\t 427\t419\t363\t3\t4\t13.02.20\t 429\t427\t345\t2\t1\t13.02.20\t ---------------------------------------------------------------------------------- <\/code><\/pre>\n<p>  \u041e\u0439, \u043a\u0430\u043a \u044d\u0442\u043e \u043d\u0435 \u0447\u0438\u0442\u0430\u0431\u0435\u043b\u044c\u043d\u043e!<\/p>\n<pre><code class=\"sql\">CREATE OR REPLACE VIEW V_NSI_CLASSIFIRE_GGS AS SELECT      s.nsi_structure_id, s.nsi_parent_structure_id,     s.ordnum, s.begin_date, s.end_date,     n.nsi_id, n.nsi_type_id, n.descr FROM nsi_structure s INNER JOIN nsi n     ON (s.nsi_id = n.nsi_id) START WITH (s.nsi_id = 331) CONNECT BY (nsi_parent_structure_id = PRIOR nsi_structure_id) ORDER SIBLINGS BY ordnum;   SELECT * FROM V_NSI_CLASSIFIRE_GGS ; ---------------------------------------------------------------------------------- &quot;NSI_STRUCTURE_ID&quot;\t&quot;NSI_PARENT_STRUCTURE_ID&quot;\t&quot;NSI_ID&quot;\t&quot;NSI_TYPE_ID&quot;\t&quot;ORDNUM&quot;\t&quot;BEGIN_DATE&quot;\t&quot;END_DATE&quot; 385\t\t\t13.02.20\t\t331\t5\t\u041a\u043b\u0430\u0441\u0441\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440 \u0434\u043e\u043b\u0436\u043d\u043e\u0441\u0442\u0435\u0439 \u0413\u0413\u0421 387\t385\t1\t13.02.20\t\t347\t4\t\u0420\u0443\u043a\u043e\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u0438 389\t387\t1\t13.02.20\t\t355\t3\t\u0412\u044b\u0441\u0448\u0438\u0435 391\t387\t2\t13.02.20\t\t357\t3\t\u0413\u043b\u0430\u0432\u043d\u044b\u0435 393\t391\t1\t13.02.20\t\t335\t2\t\u041d\u0430\u0447\u0430\u043b\u044c\u043d\u0438\u043a \u043e\u0442\u0434\u0435\u043b\u0430 395\t387\t3\t13.02.20\t\t359\t3\t\u0412\u0435\u0434\u0443\u0449\u0438\u0435 397\t385\t2\t13.02.20\t\t349\t4\t\u041f\u043e\u043c\u043e\u0449\u043d\u0438\u043a\u0438 (\u0441\u043e\u0432\u0435\u0442\u043d\u0438\u043a\u0438) 399\t397\t1\t13.02.20\t\t355\t3\t\u0412\u044b\u0441\u0448\u0438\u0435 401\t397\t2\t13.02.20\t\t357\t3\t\u0413\u043b\u0430\u0432\u043d\u044b\u0435 403\t397\t3\t13.02.20\t\t359\t3\t\u0412\u0435\u0434\u0443\u0449\u0438\u0435 405\t403\t1\t13.02.20\t\t337\t2\t\u0421\u043e\u0432\u0435\u0442\u043d\u0438\u043a 407\t385\t3\t13.02.20\t\t351\t4\t\u0421\u043f\u0435\u0446\u0438\u0430\u043b\u0438\u0441\u0442\u044b 409\t407\t1\t13.02.20\t\t355\t3\t\u0412\u044b\u0441\u0448\u0438\u0435 411\t407\t2\t13.02.20\t\t357\t3\t\u0413\u043b\u0430\u0432\u043d\u044b\u0435 413\t407\t3\t13.02.20\t\t359\t3\t\u0412\u0435\u0434\u0443\u0449\u0438\u0435 415\t413\t1\t13.02.20\t\t341\t2\t\u0412\u0435\u0434\u0443\u0449\u0438\u0439 \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u0438\u0441\u0442 417\t407\t4\t13.02.20\t\t361\t3\t\u0421\u0442\u0430\u0440\u0448\u0438\u0435 419\t385\t4\t13.02.20\t\t353\t4\t\u041e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0432\u0430\u044e\u0449\u0438\u0435 \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u0438\u0441\u0442 421\t419\t1\t13.02.20\t\t357\t3\t\u0413\u043b\u0430\u0432\u043d\u044b\u0435 423\t419\t2\t13.02.20\t\t359\t3\t\u0412\u0435\u0434\u0443\u0449\u0438\u0435 425\t419\t3\t13.02.20\t\t361\t3\t\u0421\u0442\u0430\u0440\u0448\u0438\u0435 427\t419\t4\t13.02.20\t\t363\t3\t\u041c\u043b\u0430\u0434\u0448\u0438\u0435 429\t427\t1\t13.02.20\t\t345\t2\t\u0421\u043f\u0435\u0446\u0438\u0430\u043b\u0438\u0441\u0442 2 \u0440\u0430\u0437\u0440\u044f\u0434\u0430 ---------------------------------------------------------------------------------- <\/code><\/pre>\n<p>  \u0421\u043b\u0435\u0434\u0443\u0435\u0442 \u043d\u0435 \u0437\u0430\u0431\u044b\u0432\u0430\u0442\u044c, \u0447\u0442\u043e \u043a\u0440\u043e\u043c\u0435 \u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u044f \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f (\u0432 \u0442\u043e\u043c \u0447\u0438\u0441\u043b\u0435 \u0438 \u0434\u0440\u0435\u0432\u043e\u0432\u0438\u0434\u043d\u043e\u0433\u043e), \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u0435 \u043f\u0435\u0440\u0435\u0441\u0435\u0447\u0435\u043d\u0438\u044f, \u0442\u043e \u0435\u0441\u0442\u044c \u043a\u0440\u043e\u0441\u0441-\u0442\u0430\u0431\u043b\u0438\u0446. \u0417\u0434\u0435\u0441\u044c \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0435 \u0443\u0441\u043b\u043e\u0432\u0438\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u043f\u0435\u0440\u0435\u0441\u0435\u0447\u0435\u043d\u0438\u044f \u043f\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438.<\/p>\n<pre><code class=\"sql\">CREATE TABLE nsi_cross (     nsi_cross_id        NUMBER(10) NOT NULL,     nsi_main_id         NUMBER(10) NOT NULL,     nsi_main_type_id    NUMBER(10) NOT NULL,     nsi_detail_id       NUMBER(10) NOT NULL,     nsi_detail_type_id  NUMBER(10) NOT NULL,     begin_date          DATE NOT NULL,     end_date            DATE,     CONSTRAINT nsi_cross_pk PRIMARY KEY (nsi_cross_id),     CONSTRAINT nsi_cross_main_nsi_fk FOREIGN KEY (nsi_main_type_id, nsi_main_id) REFERENCES nsi (nsi_type_id, nsi_id),     CONSTRAINT nsi_cross_detail_nsi_fk FOREIGN KEY (nsi_detail_type_id, nsi_detail_id) REFERENCES nsi (nsi_type_id, nsi_id) );  COMMENT ON TABLE nsi_cross IS '\u041d\u0421\u0418. \u041a\u0440\u043e\u0441\u0441-\u0442\u0430\u0431\u043b\u0438\u0446\u0430 \u0441\u043f\u0440\u0430\u0432\u043e\u0447\u043d\u0438\u043a\u043e\u0432'; COMMENT ON COLUMN nsi_cross.nsi_cross_id IS '\u041a\u043b\u044e\u0447'; COMMENT ON COLUMN nsi_cross.nsi_main_id IS '\u041a\u043b\u044e\u0447 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u0442\u0430\u0431\u043b\u0438\u0446\u044b'; COMMENT ON COLUMN nsi_cross.nsi_main_type_id IS '\u0422\u0438\u043f \u0441\u043f\u0440\u0430\u0432\u043e\u0447\u043d\u0438\u043a\u0430 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u0442\u0430\u0431\u043b\u0438\u0446\u044b'; COMMENT ON COLUMN nsi_cross.nsi_detail_id IS '\u041a\u043b\u044e\u0447 \u0442\u0430\u0431\u043b\u0438\u0446\u0438 \u0434\u0435\u0442\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438'; COMMENT ON COLUMN nsi_cross.nsi_detail_type_id IS '\u0422\u0438\u043f \u0441\u043f\u0440\u0430\u0432\u043e\u0447\u043d\u0438\u043a\u0430 \u0442\u0430\u0431\u043b\u0438\u0446\u0438 \u0434\u0435\u0442\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438'; COMMENT ON COLUMN nsi_cross.begin_date IS '\u0414\u0430\u0442\u0430 \u043d\u0430\u0447\u0430\u043b\u0430 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f'; COMMENT ON COLUMN nsi_cross.end_date IS '\u0414\u0430\u0442\u0430 \u043e\u043a\u043e\u043d\u0447\u0430\u043d\u0438\u044f \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f';      \/* \u0420\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u0442 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0443 \u043d\u0430 \u043f\u0435\u0440\u0435\u0441\u0435\u0447\u0435\u043d\u0438\u044f \u043f\u0435\u0440\u0438\u043e\u0434\u0430 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u0437\u0430\u043f\u0438\u0441\u0438 \u043a\u0440\u043e\u0441\u0441-\u0442\u0430\u0431\u043b\u0438\u0446\u044b.     *  @param p_nsi_main_id nsi_cross.nsi_main_id%TYPE - \u0441\u043f\u0440\u0430\u0432\u043e\u0447\u043d\u0438\u043a \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u0437\u0430\u043f\u0438\u0441\u0438     *  @param p_nsi_main_type_id nsi_cross.nsi_main_type_id%TYPE - \u0442\u0438\u043f \u0441\u043f\u0440\u0430\u0432\u043e\u0447\u043d\u0438\u043a\u0430 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u0437\u0430\u043f\u0438\u0441\u0438     *  @param p_nsi_detail_id nsi_cross.nsi_detail_id%TYPE - \u0441\u043f\u0440\u0430\u0432\u043e\u0447\u043d\u0438\u043a \u0437\u0430\u043f\u0438\u0441\u0438 \u0434\u0435\u0442\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438     *  @param p_nsi_detail_type_id nsi_cross.nsi_detail_type_id%TYPE - \u0442\u0442\u0438\u043f \u0441\u043f\u0440\u0430\u0432\u043e\u0447\u043d\u0438\u043a\u0430 \u0437\u0430\u043f\u0438\u0441\u0438 \u0434\u0435\u0442\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438     *  @param p_begin_date DATE - \u0434\u0430\u0442\u0430 \u043d\u0430\u0447\u0430\u043b\u0430 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u0437\u0430\u043f\u0438\u0441\u0438     *  @param p_end_date DATE - \u0434\u0430\u0442\u0430 \u043e\u043a\u043e\u043d\u0447\u0430\u043d\u0438\u044f \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u0437\u0430\u043f\u0438\u0441\u0438     *\/     PROCEDURE nsi_cross_check_period (         p_nsi_cross_id          IN nsi_cross.nsi_cross_id%TYPE,         p_begin_date            IN nsi_cross.begin_date%TYPE,          p_end_date              IN nsi_cross.end_date%TYPE)     AS         v_cnt NUMBER;         v_nsi_main_id           nsi_cross.nsi_main_id%TYPE;         v_nsi_main_type_id      nsi_cross.nsi_main_type_id%TYPE;         v_nsi_detail_id         nsi_cross.nsi_detail_id%TYPE;         v_nsi_detail_type_id    nsi_cross.nsi_detail_type_id%TYPE;     BEGIN         IF (p_end_date IS NOT NULL) AND (Trunc(p_begin_date) &gt; Trunc(p_end_date)) THEN             RAISE_APPLICATION_ERROR (NSI_ERROR_CODE,                  '[nsi_cross_check_period] \u0414\u0430\u0442\u0430 \u043d\u0430\u0447\u0430\u043b\u0430 \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0431\u043e\u043b\u044c\u0448\u0435 \u0434\u0430\u0442\u044b \u043e\u043a\u043e\u043d\u0447\u0430\u043d\u0438\u044f ' || Trunc(p_begin_date) || ' - ' || Trunc(p_end_date));          END IF;                  SELECT MIN(nsi_main_id), MIN(nsi_main_type_id),                MIN(nsi_detail_id), MIN(nsi_detail_type_id)            INTO v_nsi_main_id, v_nsi_main_type_id,                v_nsi_detail_id, v_nsi_detail_type_id            FROM nsi_cross          WHERE nsi_cross_id = p_nsi_cross_id;                   v_cnt := 0;                  IF (v_nsi_main_id IS NOT NULL) THEN                      IF (p_end_date IS NOT NULL) THEN                 SELECT COUNT(*)                   INTO v_cnt                   FROM nsi_cross                  WHERE nsi_main_id = v_nsi_main_id                    AND nsi_main_type_id = v_nsi_main_type_id                    AND nsi_detail_id = v_nsi_detail_id                    AND nsi_detail_type_id = v_nsi_detail_type_id                    AND nsi_cross_id &lt;&gt; p_nsi_cross_id                    AND begin_date &lt;= Trunc(p_end_date)                    AND ((end_date IS NULL) OR (end_date &gt;= Trunc(p_end_date)));             ELSE                 SELECT COUNT(*)                   INTO v_cnt                   FROM nsi_cross                  WHERE nsi_main_id = v_nsi_main_id                    AND nsi_main_type_id = v_nsi_main_type_id                    AND nsi_detail_id = v_nsi_detail_id                    AND nsi_detail_type_id = v_nsi_detail_type_id                    AND nsi_cross_id &lt;&gt; p_nsi_cross_id                    AND ((                         (end_date IS NOT NULL) AND (end_date &gt;= Trunc(p_begin_date))                         ) OR (end_date IS NULL)                         );             END IF;         END IF;          IF (v_cnt &gt; 0) THEN             RAISE_APPLICATION_ERROR (NSI_ERROR_CODE,                  '[nsi_cross_check_period] \u041f\u0440\u0438\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u043f\u0435\u0440\u0435\u0441\u0435\u0447\u0435\u043d\u0438\u0435 \u0441 \u043f\u0435\u0440\u0438\u043e\u0434\u043e\u043c ' || p_begin_date || ' - ' || p_end_date);             END IF;     END;       \/* \u0420\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u0442 \u0432\u0441\u0442\u0430\u0432\u043a\u0443 \u0437\u0430\u043f\u0438\u0441\u0438.     *  @param p_nsi_main_id nsi_cross.nsi_main_id%TYPE - \u0441\u043f\u0440\u0430\u0432\u043e\u0447\u043d\u0438\u043a \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u0437\u0430\u043f\u0438\u0441\u0438     *  @param p_nsi_main_type_id nsi_cross.nsi_main_type_id%TYPE - \u0442\u0438\u043f \u0441\u043f\u0440\u0430\u0432\u043e\u0447\u043d\u0438\u043a\u0430 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u0437\u0430\u043f\u0438\u0441\u0438     *  @param p_nsi_detail_id nsi_cross.nsi_detail_id%TYPE - \u0441\u043f\u0440\u0430\u0432\u043e\u0447\u043d\u0438\u043a \u0437\u0430\u043f\u0438\u0441\u0438 \u0434\u0435\u0442\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438     *  @param p_nsi_detail_type_id nsi_cross.nsi_detail_type_id%TYPE - \u0442\u0442\u0438\u043f \u0441\u043f\u0440\u0430\u0432\u043e\u0447\u043d\u0438\u043a\u0430 \u0437\u0430\u043f\u0438\u0441\u0438 \u0434\u0435\u0442\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438     *  @param p_begin_date DATE - \u0434\u0430\u0442\u0430 \u043d\u0430\u0447\u0430\u043b\u0430 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u0437\u0430\u043f\u0438\u0441\u0438     *  @param p_end_date DATE - \u0434\u0430\u0442\u0430 \u043e\u043a\u043e\u043d\u0447\u0430\u043d\u0438\u044f \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u0437\u0430\u043f\u0438\u0441\u0438     *\/     PROCEDURE nsi_cross_insert (         p_nsi_main_id           IN nsi_cross.nsi_main_id%TYPE,         p_nsi_main_type_id      IN nsi_cross.nsi_main_type_id%TYPE,         p_nsi_detail_id         IN nsi_cross.nsi_detail_id%TYPE,         p_nsi_detail_type_id    IN nsi_cross.nsi_detail_type_id%TYPE,         p_begin_date            IN nsi_cross.begin_date%TYPE,          p_end_date              IN nsi_cross.end_date%TYPE)     AS         v_id        NUMBER;         v_log_descr nsi_log.descr%TYPE;         v_type_id \tnsi.nsi_type_id%TYPE;     BEGIN         v_id := get_nsi_id;         v_type_id := get_type_id('nsi_cross');          INSERT INTO nsi_cross (             nsi_cross_id, nsi_main_id, nsi_main_type_id,             nsi_detail_id, nsi_detail_type_id,              begin_date, end_date)         VALUES (             v_id, p_nsi_main_id, p_nsi_main_type_id,             p_nsi_detail_id, p_nsi_detail_type_id,              Trunc(p_begin_date), Trunc(p_end_date));          nsi_cross_check_period (v_id, p_begin_date, p_end_date);          v_log_descr := '[' || get_nsi_descr(p_nsi_main_id, p_nsi_main_type_id) || ' &lt;=&gt; ' || get_nsi_descr(p_nsi_detail_id, p_nsi_detail_type_id) || '] ';         v_log_descr := v_log_descr || '\u041f\u0435\u0440\u0438\u043e\u0434 ' || p_begin_date || ' - ' || p_end_date;         log_oper (v_id, v_type_id, NSI_LOG_OPERNUM_INSERT, v_log_descr);     END nsi_cross_insert;       \/* \u0420\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u0442 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u043f\u0435\u0440\u0438\u043e\u0434\u0430 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u0437\u0430\u043f\u0438\u0441\u0438.     *  @param p_nsi_cross_id nsi_cross.nsi_cross_id%TYPE - \u043a\u043b\u044e\u0447 nsi_cross     *  @param p_begin_date nsi_cross.begin_date%TYPE - \u0434\u0430\u0442\u0430 \u043d\u0430\u0447\u0430\u043b\u0430 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f     *  @param p_end_date nsi_cross.end_date%TYPE - \u0434\u0430\u0442\u0430 \u043e\u043a\u043e\u043d\u0447\u0430\u043d\u0438\u044f \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f     *\/     PROCEDURE nsi_cross_period (         p_nsi_cross_id  IN nsi_cross.nsi_cross_id%TYPE,         p_begin_date    IN nsi_cross.begin_date%TYPE,          p_end_date      IN nsi_cross.end_date%TYPE)     AS         v_main_id \t\t    nsi_cross.nsi_main_id%TYPE;         v_main_type_id \t    nsi_cross.nsi_main_type_id%TYPE;         v_detail_id \t\tnsi_cross.nsi_detail_id%TYPE;         v_detail_type_id \tnsi_cross.nsi_detail_type_id%TYPE;         v_type_id \t        nsi.nsi_type_id%TYPE;         v_log_descr         nsi_log.descr%TYPE;     BEGIN         v_type_id := get_type_id('nsi_cross');                  SELECT nsi_main_id, nsi_main_type_id,                nsi_detail_id, nsi_detail_type_id           INTO v_main_id, v_main_type_id,                v_detail_id, v_detail_type_id           FROM nsi_cross          WHERE nsi_cross_id = p_nsi_cross_id;          nsi_cross_check_period (p_nsi_cross_id, p_begin_date, p_end_date);          UPDATE nsi_cross            SET begin_date = Trunc(p_begin_date),                end_date = Trunc(p_end_date)           WHERE nsi_cross_id = p_nsi_cross_id;                   v_log_descr := '[' || get_nsi_descr(v_main_id, v_main_type_id) || ' &lt;=&gt; ' || get_nsi_descr(v_detail_id, v_detail_type_id) || '] ';         v_log_descr := v_log_descr || '\u041f\u0435\u0440\u0438\u043e\u0434 ' || p_begin_date || ' - ' || p_end_date;         log_oper (p_nsi_cross_id, v_type_id, NSI_LOG_OPERNUM_UPDATE, v_log_descr);     END;       \/* \u0420\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u0442 \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u0435 \u0437\u0430\u043f\u0438\u0441\u0438.     *  @param p_nsi_cross_id nsi_cross.nsi_cross_id%TYPE - \u043a\u043b\u044e\u0447 nsi_cross     *\/     PROCEDURE nsi_cross_delete (p_nsi_cross_id IN nsi_cross.nsi_cross_id%TYPE)     AS         v_type_id \tnsi.nsi_type_id%TYPE;         v_log_descr nsi_log.descr%TYPE;     BEGIN         v_type_id := pkg_nsi.get_type_id('nsi_cross');                  FOR rec IN (             SELECT nsi_cross_id, nsi_main_id, nsi_main_type_id,                     nsi_detail_id, nsi_detail_type_id,                     begin_date, end_date             FROM nsi_cross             WHERE nsi_cross_id = p_nsi_cross_id         )         LOOP             v_log_descr := '[' || pkg_nsi.get_nsi_descr(rec.nsi_main_id, rec.nsi_main_type_id) || ' &lt;=&gt; ' || pkg_nsi.get_nsi_descr(rec.nsi_detail_id, rec.nsi_detail_type_id) || '] ';             v_log_descr := v_log_descr || '\u041f\u0435\u0440\u0438\u043e\u0434 ' || rec.begin_date || ' - ' || rec.end_date;             pkg_nsi.log_oper (rec.nsi_cross_id, v_type_id, pkg_nsi.NSI_LOG_OPERNUM_DELETE, v_log_descr);         END LOOP;                  DELETE FROM nsi_cross         WHERE nsi_cross_id = p_nsi_cross_id;     END; <\/code><\/pre>\n<p>  \u0412\u0441\u0451, \u0442\u0435\u043f\u0435\u0440\u044c \u043c\u044b \u0441 \u0443\u0432\u0435\u0440\u0435\u043d\u043d\u043e\u0441\u0442\u044c\u044e \u043c\u043e\u0436\u0435\u043c \u0441\u043a\u0430\u0437\u0430\u0442\u044c, \u0447\u0442\u043e <b>\u0437\u0430\u043a\u0440\u044b\u043b\u0438 \u043f\u0435\u0440\u0432\u0443\u044e \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0443<\/b>. <br \/>  \u041a\u043e\u043d\u0435\u0447\u043d\u043e \u043c\u043e\u0436\u043d\u043e \u043c\u043d\u043e\u0433\u043e \u0447\u0435\u0433\u043e \u043f\u044b\u0442\u0430\u0442\u044c\u0441\u044f \u043f\u0440\u0438\u043a\u0440\u0443\u0442\u0438\u0442\u044c \u043a \u044d\u0442\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u0435, \u043d\u043e \u044f \u0434\u0443\u043c\u0430\u044e, \u0447\u0442\u043e \u043f\u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u043d\u0443\u044e \u0437\u0430\u0434\u0430\u0447\u0443 \u0432 \u043d\u0430\u0447\u0430\u043b\u0435 \u0441\u0442\u0430\u0442\u044c\u0438 \u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u043b\u0430, \u0430 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u043e\u0435 \u0443\u0436\u0435 \u043c\u043e\u0436\u043d\u043e \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0432 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u0434\u0438\u0441\u043a\u0443\u0441\u0441\u0438\u0438. <\/p>\n<p>  \u041c\u0430\u0442\u0435\u0440\u0438\u0430\u043b \u043f\u043e\u0434\u0433\u043e\u0442\u0430\u0432\u043b\u0438\u0432\u0430\u043b\u0441\u044f \u043d\u0430 \u0432\u0435\u0440\u0441\u0438\u0438 Oracle 18c, \u0445\u043e\u0442\u044f \u043d\u0430\u0442\u0438\u0432\u043d\u043e\u0435 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0430\u043d\u0438\u0435 \u0444\u043e\u0440\u043c\u0430\u0442\u0430 json \u0443\u0436\u0435 \u043f\u0440\u0438\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u0432 \u0432\u0435\u0440\u0441\u0438\u0438 12. \u0417\u0434\u0435\u0441\u044c <a href=\"https:\/\/yadi.sk\/d\/8UH9cgdOodyBxQ\">\u0441\u0441\u044b\u043b\u043a\u0430<\/a> \u0441 \u0430\u0440\u0445\u0438\u0432\u043e\u043c \u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0432.<\/div>\n<p> \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\/492414\/\"> https:\/\/habr.com\/ru\/post\/492414\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"\n<div class=\"post__text post__text-html post__text_v1\" id=\"post-content-body\" data-io-article-url=\"https:\/\/habr.com\/ru\/post\/492414\/\"><i>\u0414\u0430\u043d\u043d\u0430\u044f \u0441\u0442\u0430\u0442\u044c\u044f \u043e\u0441\u043d\u043e\u0432\u0430\u043d\u0430 \u043d\u0430 \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u0445 \u0441\u043e\u0431\u044b\u0442\u0438\u044f\u0445, <br \/>   \u0438 \u0432\u0441\u0435 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b \u0432 \u043d\u0435\u0439 \u043d\u0435 \u0432\u044b\u043c\u044b\u0448\u043b\u0435\u043d\u043d\u044b\u0435. (\u0421) <\/i><\/p>\n<p>  \u0412 \u043d\u0430\u0447\u0430\u043b\u0435 \u0445\u043e\u0442\u0435\u043b\u043e\u0441\u044c \u0431\u044b \u043e\u0442\u043c\u0435\u0442\u0438\u0442\u044c, \u0447\u0442\u043e \u0441\u0442\u0430\u0442\u044c\u044f \u043d\u0435 \u043f\u0440\u0438\u0437\u0432\u0430\u043d\u0430 \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u0438\u0437\u043e\u0431\u0440\u0435\u0442\u0435\u043d\u0438\u0435 \u0432\u0435\u043b\u043e\u0441\u0438\u043f\u0435\u0434\u0430, \u043f\u043e\u0442\u043e\u043c\u0443 \u043a\u0430\u043a \u043c\u043d\u043e\u0433\u0438\u0435 \u043f\u0440\u0438\u0451\u043c\u044b \u0443\u0436\u0435 \u0434\u0430\u0432\u043d\u043e \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0442 \u0432 \u043a\u0443\u043b\u044c\u0442\u0443\u0440\u0435 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0431\u0430\u0437 \u0434\u0430\u043d\u043d\u044b\u0445. \u041e\u0434\u043d\u0430\u043a\u043e \u043e\u0431\u043e\u0431\u0449\u0438\u0442\u044c, \u043f\u0440\u043e\u0430\u043d\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043e\u043d\u0438 \u043c\u043e\u0433\u0443\u0442 \u0440\u0435\u0448\u0438\u0442\u044c \u0438 \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u044c, \u043a\u0430\u043a \u0441 \u043d\u0438\u043c\u0438 \u043c\u043e\u0436\u043d\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c. \u0410 \u043f\u0440\u043e\u0431\u043b\u0435\u043c \u0445\u0432\u0430\u0442\u0430\u0435\u0442 \u043d\u0435\u0441\u043c\u043e\u0442\u0440\u044f \u043d\u0430 \u0442\u043e, \u0447\u0442\u043e \u043d\u043e\u0440\u043c\u0430\u0442\u0438\u0432\u043d\u043e-\u0441\u043f\u0440\u0430\u0432\u043e\u0447\u043d\u0430\u044f \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f (\u041d\u0421\u0418) \u043d\u0435 \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0441\u044f \u043a \u0431\u0438\u0437\u043d\u0435\u0441-\u043b\u043e\u0433\u0438\u043a\u0435, \u0430 \u0441\u043a\u043e\u0440\u0435\u0435 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0432 \u043e\u0431\u0441\u043b\u0443\u0436\u0438\u0432\u0430\u043d\u0438\u0438 \u0443 \u043d\u0435\u0451. \u0421\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0439 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u043f\u043e \u0440\u0438\u0441\u043e\u0432\u0430\u043d\u0438\u044e \u043e\u0447\u0435\u0440\u0435\u0434\u043d\u043e\u0439 \u0442\u0430\u0431\u043b\u0438\u0447\u043a\u0438 \u0434\u043b\u044f \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0441\u043f\u0440\u0430\u0432\u043e\u0447\u043d\u0438\u043a\u0430 \u043e\u0447\u0435\u043d\u044c \u0441\u043a\u043e\u0440\u043e \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442 \u043e\u0431\u0440\u0430\u0441\u0442\u0430\u0442\u044c \u043a\u043e\u0441\u0442\u044b\u043b\u044f\u043c\u0438 \u0438\u043b\u0438 \u0442\u0440\u0443\u0434\u043e\u0451\u043c\u043a\u0438\u043c\u0438 \u043f\u0435\u0440\u0435\u0434\u0435\u043b\u043a\u0430\u043c\u0438.   <\/p>\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-300157","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/300157","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=300157"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/300157\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=300157"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=300157"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=300157"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}