{"id":310791,"date":"2020-10-01T09:00:43","date_gmt":"2020-10-01T09:00:43","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=310791"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=310791","title":{"rendered":"10 \u043f\u0440\u0438\u0451\u043c\u043e\u0432 \u0440\u0430\u0431\u043e\u0442\u044b \u0441 Oracle"},"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\/company\/sberbank\/blog\/519358\/\">\u0412 \u0421\u0431\u0435\u0440\u0435 \u0435\u0441\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u0430\u043a\u0442\u0438\u043a Oracle, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u043e\u0433\u0443\u0442 \u043e\u043a\u0430\u0437\u0430\u0442\u044c\u0441\u044f \u0432\u0430\u043c \u043f\u043e\u043b\u0435\u0437\u043d\u044b. \u0414\u0443\u043c\u0430\u044e, \u0447\u0430\u0441\u0442\u044c \u0432\u0430\u043c \u0437\u043d\u0430\u043a\u043e\u043c\u0430, \u043d\u043e \u043c\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u0434\u043b\u044f \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e ETL-\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0430, \u043d\u043e \u0438 \u0445\u0440\u0430\u043d\u0438\u043c\u044b\u0435 \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u044b Oracle. \u041d\u0430 Oracle PL\/SQL \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u044b \u043d\u0430\u0438\u0431\u043e\u043b\u0435\u0435 \u0441\u043b\u043e\u0436\u043d\u044b\u0435 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u044b \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 \u0432 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0430, \u0433\u0434\u0435 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u00ab\u043f\u0440\u043e\u0447\u0443\u0432\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u043a\u0430\u0436\u0434\u044b\u0439 \u0431\u0430\u0439\u0442\u00bb.<\/p>\n<ul>\n<li>\u0410\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u0436\u0443\u0440\u043d\u0430\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0439<\/li>\n<li>\u041a\u0430\u043a \u0431\u044b\u0442\u044c, \u0435\u0441\u043b\u0438 \u0445\u043e\u0447\u0435\u0442\u0441\u044f \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0432\u044c\u044e\u0448\u043a\u0443 \u0441 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430\u043c\u0438<\/li>\n<li>\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u0438 \u0432 \u0437\u0430\u043f\u0440\u043e\u0441\u0430\u0445<\/li>\n<li>\u041a\u0430\u043a \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c \u043f\u043b\u0430\u043d \u0437\u0430\u043f\u0440\u043e\u0441\u0430 \u043f\u0440\u0438 \u0432\u0441\u0442\u0430\u0432\u043a\u0435 \u0434\u0430\u043d\u043d\u044b\u0445 \u0447\u0435\u0440\u0435\u0437 database link<\/li>\n<li>\u0417\u0430\u043f\u0443\u0441\u043a \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440 \u0432 \u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u044b\u0445 \u0441\u0435\u0441\u0441\u0438\u044f\u0445<\/li>\n<li>\u041f\u0440\u043e\u0442\u044f\u0433\u0438\u0432\u0430\u043d\u0438\u0435 \u043e\u0441\u0442\u0430\u0442\u043a\u043e\u0432<\/li>\n<li>\u041e\u0431\u044a\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0435 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u0438\u0441\u0442\u043e\u0440\u0438\u0439 \u0432 \u043e\u0434\u043d\u0443<\/li>\n<li>\u041d\u043e\u0440\u043c\u0430\u043b\u0430\u0439\u0437\u0435\u0440<\/li>\n<li>\u0412\u0438\u0437\u0443\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0432 \u0444\u043e\u0440\u043c\u0430\u0442\u0435 SVG<\/li>\n<li>\u041f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043f\u043e\u0438\u0441\u043a\u0430 \u043f\u043e \u043c\u0435\u0442\u0430\u0434\u0430\u043d\u043d\u044b\u043c Oracle<\/li>\n<\/ul>\n<p>  <a name=\"habracut\"><\/a>  <\/p>\n<h3>\u0410\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u0436\u0443\u0440\u043d\u0430\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0439<\/h3>\n<p>  \u041d\u0430 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0431\u0430\u0437\u0430\u0445 \u0434\u0430\u043d\u043d\u044b\u0445 Oracle \u0432 \u0421\u0431\u0435\u0440\u0435 \u0441\u0442\u043e\u0438\u0442 \u0442\u0440\u0438\u0433\u0433\u0435\u0440 \u043d\u0430 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u044e, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0437\u0430\u043f\u043e\u043c\u0438\u043d\u0430\u0435\u0442, \u043a\u0442\u043e, \u043a\u043e\u0433\u0434\u0430 \u0438 \u0447\u0442\u043e \u043c\u0435\u043d\u044f\u043b \u0432 \u043a\u043e\u0434\u0435 \u0441\u0435\u0440\u0432\u0435\u0440\u043d\u044b\u0445 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432. \u0422\u0435\u043c \u0441\u0430\u043c\u044b\u043c \u0438\u0437 \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u0436\u0443\u0440\u043d\u0430\u043b\u0430 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0439 \u043c\u043e\u0436\u043d\u043e \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u0430\u0432\u0442\u043e\u0440\u0430 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439. \u0422\u0430\u043a\u0436\u0435 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u0442\u0441\u044f \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044f \u0432\u0435\u0440\u0441\u0438\u0439. \u0412\u043e \u0432\u0441\u044f\u043a\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435, \u0435\u0441\u043b\u0438 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442 \u0437\u0430\u0431\u044b\u043b \u0441\u0434\u0430\u0442\u044c \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0432 Git, \u0442\u043e \u044d\u0442\u043e\u0442 \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c \u0435\u0433\u043e \u043f\u043e\u0434\u0441\u0442\u0440\u0430\u0445\u0443\u0435\u0442. \u041e\u043f\u0438\u0448\u0435\u043c \u043f\u0440\u0438\u043c\u0435\u0440 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0442\u0430\u043a\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0436\u0443\u0440\u043d\u0430\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0439. \u041e\u0434\u0438\u043d \u0438\u0437 \u0443\u043f\u0440\u043e\u0449\u0451\u043d\u043d\u044b\u0445 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u043e\u0432 \u0442\u0440\u0438\u0433\u0433\u0435\u0440\u0430 \u043d\u0430 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u044e, \u043f\u0438\u0448\u0443\u0449\u0435\u0433\u043e \u0432 \u0436\u0443\u0440\u043d\u0430\u043b \u0432 \u0432\u0438\u0434\u0435 \u0442\u0430\u0431\u043b\u0438\u0446\u044b ddl_changes_log, \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0442\u0430\u043a:<\/p>\n<pre><code class=\"sql\">create table DDL_CHANGES_LOG (   id               INTEGER,   change_date      DATE,   sid              VARCHAR2(100),   schemaname       VARCHAR2(30),   machine          VARCHAR2(100),   program          VARCHAR2(100),   osuser           VARCHAR2(100),   obj_owner        VARCHAR2(30),   obj_type         VARCHAR2(30),   obj_name         VARCHAR2(30),   previous_version CLOB,   changes_script   CLOB );  create or replace trigger trig_audit_ddl_trg   before ddl on database declare   v_sysdate              date;   v_valid                number;   v_previous_obj_owner   varchar2(30) := '';   v_previous_obj_type    varchar2(30) := '';   v_previous_obj_name    varchar2(30) := '';   v_previous_change_date date;   v_lob_loc_old          clob := '';   v_lob_loc_new          clob := '';   v_n                    number;   v_sql_text             ora_name_list_t;   v_sid                  varchar2(100) := '';   v_schemaname           varchar2(30) := '';   v_machine              varchar2(100) := '';   v_program              varchar2(100) := '';   v_osuser               varchar2(100) := ''; begin   v_sysdate := sysdate;   -- find whether compiled object already presents and is valid   select count(*)     into v_valid     from sys.dba_objects    where owner = ora_dict_obj_owner      and object_type = ora_dict_obj_type      and object_name = ora_dict_obj_name      and status = 'VALID'      and owner not in ('SYS', 'SPOT', 'WMSYS', 'XDB', 'SYSTEM')      and object_type in ('TRIGGER', 'PROCEDURE', 'FUNCTION', 'PACKAGE', 'PACKAGE BODY', 'VIEW');   -- find information about previous compiled object   select max(obj_owner) keep(dense_rank last order by id),          max(obj_type) keep(dense_rank last order by id),          max(obj_name) keep(dense_rank last order by id),          max(change_date) keep(dense_rank last order by id)     into v_previous_obj_owner, v_previous_obj_type, v_previous_obj_name, v_previous_change_date     from ddl_changes_log;   -- if compile valid object or compile invalid package body broken by previous compilation of package then log it   if (v_valid = 1 or v_previous_obj_owner = ora_dict_obj_owner and      (v_previous_obj_type = 'PACKAGE' and ora_dict_obj_type = 'PACKAGE BODY' or      v_previous_obj_type = 'PACKAGE BODY' and ora_dict_obj_type = 'PACKAGE') and      v_previous_obj_name = ora_dict_obj_name and      v_sysdate - v_previous_change_date &lt;= 1 \/ 24 \/ 60 \/ 2) and      ora_sysevent in ('CREATE', 'ALTER') then     -- store previous version of object (before compilation) from dba_source or dba_views in v_lob_loc_old     if ora_dict_obj_type &lt;&gt; 'VIEW' then       for z in (select substr(text, 1, length(text) - 1) || chr(13) || chr(10) as text                   from sys.dba_source                  where owner = ora_dict_obj_owner                    and type = ora_dict_obj_type                    and name = ora_dict_obj_name                  order by line) loop         v_lob_loc_old := v_lob_loc_old || z.text;       end loop;     else       select sys.dbms_metadata_util.long2clob(v.textlength, 'SYS.VIEW$', 'TEXT', v.rowid) into v_lob_loc_old         from sys.&quot;_CURRENT_EDITION_OBJ&quot; o, sys.view$ v, sys.user$ u        where o.obj# = v.obj#          and o.owner# = u.user#          and u.name = ora_dict_obj_owner          and o.name = ora_dict_obj_name;     end if;     -- store new version of object (after compilation) from v_sql_text in v_lob_loc_new     v_n := ora_sql_txt(v_sql_text);     for i in 1 .. v_n loop       v_lob_loc_new := v_lob_loc_new || replace(v_sql_text(i), chr(10), chr(13) || chr(10));     end loop;     -- find information about session that changed this object     select max(to_char(sid)), max(schemaname), max(machine), max(program), max(osuser)       into v_sid, v_schemaname, v_machine, v_program, v_osuser       from v$session      where audsid = userenv('sessionid');     -- store changes in ddl_changes_log     insert into ddl_changes_log       (id, change_date, sid, schemaname, machine, program, osuser,        obj_owner, obj_type, obj_name, previous_version, changes_script)     values       (seq_ddl_changes_log.nextval, v_sysdate, v_sid, v_schemaname, v_machine, v_program, v_osuser,        ora_dict_obj_owner, ora_dict_obj_type, ora_dict_obj_name, v_lob_loc_old, v_lob_loc_new);   end if; exception   when others then     null; end;<\/code><\/pre>\n<p>  \u0412 \u044d\u0442\u043e\u043c \u0442\u0440\u0438\u0433\u0433\u0435\u0440\u0435 \u043f\u043e\u043b\u0443\u0447\u0430\u044e\u0442 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u0438 \u043d\u043e\u0432\u043e\u0435 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435 \u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u0443\u0435\u043c\u043e\u0433\u043e \u043e\u0431\u044a\u0435\u043a\u0442\u0430, \u0434\u043e\u043f\u043e\u043b\u043d\u044f\u044e\u0442 \u0435\u0433\u043e \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0438\u043c \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u044b\u043c \u0438\u0437 \u0441\u043b\u043e\u0432\u0430\u0440\u044f \u0434\u0430\u043d\u043d\u044b\u0445 \u0438 \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u044e\u0442 \u0432 \u043b\u043e\u0433 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439.<\/p>\n<h3>\u041a\u0430\u043a \u0431\u044b\u0442\u044c, \u0435\u0441\u043b\u0438 \u0445\u043e\u0447\u0435\u0442\u0441\u044f \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0432\u044c\u044e\u0448\u043a\u0443 \u0441 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430\u043c\u0438<\/h3>\n<p>  \u0422\u0430\u043a\u043e\u0435 \u0436\u0435\u043b\u0430\u043d\u0438\u0435 \u043c\u043e\u0436\u0435\u0442 \u0447\u0430\u0441\u0442\u043e \u043f\u043e\u0441\u0435\u0449\u0430\u0442\u044c \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430 \u043d\u0430 Oracle. \u041f\u043e\u0447\u0435\u043c\u0443 \u043c\u043e\u0436\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u0443 \u0438\u043b\u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u0441 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430\u043c\u0438, \u043d\u043e \u043d\u0435 \u0431\u044b\u0432\u0430\u0435\u0442 \u0432\u044c\u044e\u0448\u0435\u043a \u0441 \u0432\u0445\u043e\u0434\u043d\u044b\u043c\u0438 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430\u043c\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043f\u0440\u0438 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f\u0445? \u0412 Oracle \u0435\u0441\u0442\u044c \u0447\u0435\u043c \u0437\u0430\u043c\u0435\u043d\u0438\u0442\u044c \u044d\u0442\u043e \u043d\u0435\u0434\u043e\u0441\u0442\u0430\u044e\u0449\u0435\u0435, \u043d\u0430 \u043d\u0430\u0448 \u0432\u0437\u0433\u043b\u044f\u0434, \u043f\u043e\u043d\u044f\u0442\u0438\u0435.<br \/>  \u0420\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043f\u0440\u0438\u043c\u0435\u0440. \u041f\u0443\u0441\u0442\u044c \u0435\u0441\u0442\u044c \u0442\u0430\u0431\u043b\u0438\u0446\u0430 \u0441 \u043f\u0440\u043e\u0434\u0430\u0436\u0430\u043c\u0438 \u043f\u043e \u043f\u043e\u0434\u0440\u0430\u0437\u0434\u0435\u043b\u0435\u043d\u0438\u044f\u043c \u0437\u0430 \u043a\u0430\u0436\u0434\u044b\u0439 \u0434\u0435\u043d\u044c.<\/p>\n<pre><code class=\"sql\">create table DIVISION_SALES (   division_id INTEGER,   dt          DATE,   sales_amt   NUMBER );<\/code><\/pre>\n<p>  \u0422\u0430\u043a\u043e\u0439 \u0437\u0430\u043f\u0440\u043e\u0441 \u0441\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u0435\u0442 \u043f\u0440\u043e\u0434\u0430\u0436\u0438 \u043f\u043e \u043f\u043e\u0434\u0440\u0430\u0437\u0434\u0435\u043b\u0435\u043d\u0438\u044f\u043c \u0437\u0430 \u0434\u0432\u0430 \u0434\u043d\u044f. \u0412 \u0434\u0430\u043d\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435, 30.04.2020 \u0438 11.09.2020.<\/p>\n<pre><code class=\"sql\">select t1.division_id,        t1.dt          dt1,        t2.dt          dt2,        t1.sales_amt   sales_amt1,        t2.sales_amt   sales_amt2   from (select dt, division_id, sales_amt           from division_sales          where dt = to_date('30.04.2020', 'dd.mm.yyyy')) t1,        (select dt, division_id, sales_amt           from division_sales          where dt = to_date('11.09.2020', 'dd.mm.yyyy')) t2  where t1.division_id = t2.division_id;<\/code><\/pre>\n<p>  \u0412\u043e\u0442 \u0432\u044c\u044e\u0448\u043a\u0430, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u0445\u043e\u0447\u0435\u0442\u0441\u044f \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0434\u043b\u044f \u043e\u0431\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u0442\u0430\u043a\u043e\u0433\u043e \u0437\u0430\u043f\u0440\u043e\u0441\u0430. \u0425\u043e\u0447\u0435\u0442\u0441\u044f \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0442\u044c \u0434\u0430\u0442\u044b \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432. \u041e\u0434\u043d\u0430\u043a\u043e \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0441 \u043d\u0435 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0442\u0430\u043a\u043e\u0435 \u0441\u0434\u0435\u043b\u0430\u0442\u044c.<\/p>\n<pre><code class=\"sql\">create or replace view vw_division_sales_report(in_dt1 date, in_dt2 date) as select t1.division_id,        t1.dt          dt1,        t2.dt          dt2,        t1.sales_amt   sales_amt1,        t2.sales_amt   sales_amt2   from (select dt, division_id, sales_amt           from division_sales          where dt = in_dt1) t1,        (select dt, division_id, sales_amt           from division_sales          where dt = in_dt2) t2  where t1.division_id = t2.division_id;<\/code><\/pre>\n<p>  \u041f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u0435\u0442\u0441\u044f \u0442\u0430\u043a\u043e\u0435 \u043e\u0431\u0445\u043e\u0434\u043d\u043e\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0435. \u0421\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u0442\u0438\u043f \u043f\u043e\u0434 \u0441\u0442\u0440\u043e\u043a\u0443 \u0438\u0437 \u044d\u0442\u043e\u0439 \u0432\u044c\u044e\u0448\u043a\u0438.<\/p>\n<pre><code class=\"sql\">create type t_division_sales_report as object (   division_id INTEGER,   dt1         DATE,   dt2         DATE,   sales_amt1  NUMBER,   sales_amt2  NUMBER );<\/code><\/pre>\n<p>  \u0418 \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u0442\u0438\u043f \u043f\u043e\u0434 \u0442\u0430\u0431\u043b\u0438\u0446\u0443 \u0438\u0437 \u0442\u0430\u043a\u0438\u0445 \u0441\u0442\u0440\u043e\u043a.<\/p>\n<pre><code class=\"sql\">create type t_division_sales_report_table as table of t_division_sales_report;<\/code><\/pre>\n<p>  \u0412\u043c\u0435\u0441\u0442\u043e \u0432\u044c\u044e\u0448\u043a\u0438 \u043d\u0430\u043f\u0438\u0448\u0435\u043c pipelined \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u0441 \u0432\u0445\u043e\u0434\u043d\u044b\u043c\u0438 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430\u043c\u0438-\u0434\u0430\u0442\u0430\u043c\u0438.<\/p>\n<pre><code class=\"sql\">create or replace function func_division_sales(in_dt1 date, in_dt2 date)   return t_division_sales_report_table   pipelined as begin   for z in (select t1.division_id,                    t1.dt          dt1,                    t2.dt          dt2,                    t1.sales_amt   sales_amt1,                    t2.sales_amt   sales_amt2               from (select dt, division_id, sales_amt                       from division_sales                      where dt = in_dt1) t1,                    (select dt, division_id, sales_amt                       from division_sales                      where dt = in_dt2) t2              where t1.division_id = t2.division_id) loop     pipe row(t_division_sales_report(z.division_id,                                      z.dt1,                                      z.dt2,                                      z.sales_amt1,                                      z.sales_amt2));   end loop; end;<\/code><\/pre>\n<p>  \u041e\u0431\u0440\u0430\u0449\u0430\u0442\u044c\u0441\u044f \u043a \u043d\u0435\u0439 \u043c\u043e\u0436\u043d\u043e \u0442\u0430\u043a:<\/p>\n<pre><code class=\"sql\">select *   from table(func_division_sales(to_date('30.04.2020', 'dd.mm.yyyy'),                                  to_date('11.09.2020', 'dd.mm.yyyy')));<\/code><\/pre>\n<p>  \u042d\u0442\u043e\u0442 \u0437\u0430\u043f\u0440\u043e\u0441 \u0438 \u0432\u044b\u0434\u0430\u0441\u0442 \u043d\u0430\u043c \u0442\u0430\u043a\u043e\u0439 \u0436\u0435 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442, \u043a\u0430\u043a \u0437\u0430\u043f\u0440\u043e\u0441 \u0432 \u043d\u0430\u0447\u0430\u043b\u0435 \u044d\u0442\u043e\u0439 \u0437\u0430\u043c\u0435\u0442\u043a\u0438 \u0441 \u044f\u0432\u043d\u044b\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u043f\u043e\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u043d\u044b\u043c\u0438 \u0434\u0430\u0442\u0430\u043c\u0438.<br \/>  Pipelined \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u0442\u0430\u043a\u0436\u0435 \u043f\u043e\u043b\u0435\u0437\u043d\u044b, \u0435\u0441\u043b\u0438 \u043d\u0443\u0436\u043d\u043e \u043f\u0435\u0440\u0435\u0434\u0430\u0442\u044c \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 \u0432\u043d\u0443\u0442\u0440\u044c \u0441\u043b\u043e\u0436\u043d\u043e\u0433\u043e \u0437\u0430\u043f\u0440\u043e\u0441\u0430.<br \/>  \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0441\u043b\u043e\u0436\u043d\u0443\u044e \u0432\u044c\u044e\u0448\u043a\u0443, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043f\u043e\u043b\u0435 field1, \u043f\u043e \u043a\u043e\u0442\u043e\u0440\u043e\u043c\u0443 \u0445\u043e\u0447\u0435\u0442\u0441\u044f \u043e\u0442\u0444\u0438\u043b\u044c\u0442\u0440\u043e\u0432\u0430\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435, \u0437\u0430\u043f\u0440\u044f\u0442\u0430\u043d\u043e \u0433\u0434\u0435-\u0442\u043e \u0433\u043b\u0443\u0431\u043e\u043a\u043e \u0432\u043e \u0432\u044c\u044e\u0448\u043a\u0435.<\/p>\n<pre><code class=\"sql\">create or replace view complex_view as  select field1, ...    from (select field1, ...            from (select field1, ... from deep_table), table1           where ...),         table2   where ...;<\/code><\/pre>\n<p>  \u0418 \u0437\u0430\u043f\u0440\u043e\u0441 \u0438\u0437 \u0432\u044c\u044e\u0448\u043a\u0438 \u0441 \u0444\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u043c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435\u043c field1 \u043c\u043e\u0436\u0435\u0442 \u0438\u043c\u0435\u0442\u044c \u043f\u043b\u043e\u0445\u043e\u0439 \u043f\u043b\u0430\u043d \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f.<\/p>\n<pre><code class=\"sql\">select field1, ... from complex_view  where field1 = 'myvalue';<\/code><\/pre>\n<p>  \u0422.\u0435. \u0432\u043c\u0435\u0441\u0442\u043e \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u043e\u0442\u0444\u0438\u043b\u044c\u0442\u0440\u043e\u0432\u0430\u0442\u044c deep_table \u043f\u043e \u0443\u0441\u043b\u043e\u0432\u0438\u044e field1 = &#8216;myvalue&#8217;, \u0437\u0430\u043f\u0440\u043e\u0441 \u043c\u043e\u0436\u0435\u0442 \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u0441\u043e\u0435\u0434\u0438\u043d\u0438\u0442\u044c \u0432\u0441\u0435 \u0442\u0430\u0431\u043b\u0438\u0446\u044b, \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0430\u0432 \u0438\u0437\u043b\u0438\u0448\u043d\u0435 \u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u043e\u0431\u044a\u0451\u043c \u0434\u0430\u043d\u043d\u044b\u0445, \u0430 \u043f\u043e\u0442\u043e\u043c \u0443\u0436\u0435 \u0444\u0438\u043b\u044c\u0442\u0440\u043e\u0432\u0430\u0442\u044c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u043f\u043e \u0443\u0441\u043b\u043e\u0432\u0438\u044e field1 = &#8216;myvalue&#8217;. \u0422\u0430\u043a\u043e\u0439 \u0441\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u043c\u043e\u0436\u043d\u043e \u0438\u0437\u0431\u0435\u0436\u0430\u0442\u044c, \u0435\u0441\u043b\u0438 \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0432\u043c\u0435\u0441\u0442\u043e \u0432\u044c\u044e\u0448\u043a\u0438 pipelined \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u0441 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u043c, \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u043f\u0440\u0438\u0441\u0432\u0430\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u043f\u043e\u043b\u044e field1.<\/p>\n<h3>\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u0438 \u0432 \u0437\u0430\u043f\u0440\u043e\u0441\u0430\u0445<\/h3>\n<p>  \u0411\u044b\u0432\u0430\u0435\u0442, \u0447\u0442\u043e \u043e\u0434\u0438\u043d \u0438 \u0442\u043e\u0442 \u0436\u0435 \u0437\u0430\u043f\u0440\u043e\u0441 \u0432 \u0411\u0414 Oracle \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u0442 \u0432\u0441\u044f\u043a\u0438\u0439 \u0440\u0430\u0437 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0439 \u043e\u0431\u044a\u0451\u043c \u0434\u0430\u043d\u043d\u044b\u0445 \u0432 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0449\u0438\u0445\u0441\u044f \u0432 \u043d\u0451\u043c \u0442\u0430\u0431\u043b\u0438\u0446\u0430\u0445 \u0438 \u043f\u043e\u0434\u0437\u0430\u043f\u0440\u043e\u0441\u0430\u0445. \u041a\u0430\u043a \u0437\u0430\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0442\u043e\u0440 \u0432\u0441\u044f\u043a\u0438\u0439 \u0440\u0430\u0437 \u043f\u043e\u043d\u0438\u043c\u0430\u0442\u044c, \u043a\u0430\u043a\u043e\u0439 \u0438\u0437 \u0441\u043f\u043e\u0441\u043e\u0431\u043e\u0432 \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044f \u0442\u0430\u0431\u043b\u0438\u0446 \u043d\u0430 \u044d\u0442\u043e\u0442 \u0440\u0430\u0437 \u043b\u0443\u0447\u0448\u0435 \u0438 \u043a\u0430\u043a\u0438\u0435 \u0438\u043d\u0434\u0435\u043a\u0441\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c? \u0420\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0437\u0430\u043f\u0440\u043e\u0441, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0441\u043e\u0435\u0434\u0438\u043d\u044f\u0435\u0442 \u043f\u043e\u0440\u0446\u0438\u044e \u0438\u0437\u043c\u0435\u043d\u0438\u0432\u0448\u0438\u0445\u0441\u044f \u0441 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0439 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u043e\u0441\u0442\u0430\u0442\u043a\u043e\u0432 \u043f\u043e \u0441\u0447\u0435\u0442\u0430\u043c \u0441\u043e \u0441\u043f\u0440\u0430\u0432\u043e\u0447\u043d\u0438\u043a\u043e\u043c \u0441\u0447\u0435\u0442\u043e\u0432. \u041f\u043e\u0440\u0446\u0438\u044f \u0438\u0437\u043c\u0435\u043d\u0438\u0432\u0448\u0438\u0445\u0441\u044f \u043e\u0441\u0442\u0430\u0442\u043a\u043e\u0432 \u043f\u043e \u0441\u0447\u0435\u0442\u0430\u043c \u0441\u0438\u043b\u044c\u043d\u043e \u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f \u043e\u0442 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u043a \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0435, \u0441\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u044f \u0442\u043e \u0441\u043e\u0442\u043d\u0438 \u0441\u0442\u0440\u043e\u043a, \u0442\u043e \u043c\u0438\u043b\u043b\u0438\u043e\u043d\u044b \u0441\u0442\u0440\u043e\u043a. \u0412 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u0440\u0430\u0437\u043c\u0435\u0440\u0430 \u044d\u0442\u043e\u0439 \u043f\u043e\u0440\u0446\u0438\u0438 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0441\u043e\u0435\u0434\u0438\u043d\u044f\u0442\u044c \u0438\u0437\u043c\u0435\u043d\u0438\u0432\u0448\u0438\u0435\u0441\u044f \u043e\u0441\u0442\u0430\u0442\u043a\u0438 \u0441\u043e \u0441\u0447\u0435\u0442\u0430\u043c\u0438 \u0442\u043e \u0441\u043f\u043e\u0441\u043e\u0431\u043e\u043c \/*+ use_nl*\/, \u0442\u043e \u0441\u043f\u043e\u0441\u043e\u0431\u043e\u043c \/*+ use_hash*\/. \u0412\u0441\u044f\u043a\u0438\u0439 \u0440\u0430\u0437 \u043f\u043e\u0432\u0442\u043e\u0440\u043d\u043e \u0441\u043e\u0431\u0438\u0440\u0430\u0442\u044c \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u0443 \u043d\u0435\u0443\u0434\u043e\u0431\u043d\u043e, \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e, \u0435\u0441\u043b\u0438 \u043e\u0442 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u043a \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0435 \u0438\u0437\u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0441\u0442\u0440\u043e\u043a \u043d\u0435 \u0432 \u0441\u043e\u0435\u0434\u0438\u043d\u044f\u0435\u043c\u043e\u0439 \u0442\u0430\u0431\u043b\u0438\u0446\u0435, \u0430 \u0432 \u0441\u043e\u0435\u0434\u0438\u043d\u044f\u0435\u043c\u043e\u043c \u043f\u043e\u0434\u0437\u0430\u043f\u0440\u043e\u0441\u0435. \u041d\u0430 \u043f\u043e\u043c\u043e\u0449\u044c \u0442\u0443\u0442 \u043c\u043e\u0436\u0435\u0442 \u043f\u0440\u0438\u0439\u0442\u0438 \u0445\u0438\u043d\u0442 \/*+ dynamic_sampling()*\/. \u041f\u043e\u043a\u0430\u0436\u0435\u043c, \u043a\u0430\u043a \u043e\u043d \u0432\u043b\u0438\u044f\u0435\u0442, \u043d\u0430 \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u0437\u0430\u043f\u0440\u043e\u0441\u0430. \u041f\u0443\u0441\u0442\u044c \u0442\u0430\u0431\u043b\u0438\u0446\u0430 change_balances \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u043e\u0441\u0442\u0430\u0442\u043a\u043e\u0432, \u0430 accounts \u2013 \u0441\u043f\u0440\u0430\u0432\u043e\u0447\u043d\u0438\u043a \u0441\u0447\u0435\u0442\u043e\u0432. \u0421\u043e\u0435\u0434\u0438\u043d\u044f\u0435\u043c \u044d\u0442\u0438 \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u043f\u043e \u043f\u043e\u043b\u044f\u043c account_id, \u0438\u043c\u0435\u044e\u0449\u0438\u043c\u0441\u044f \u0432 \u043a\u0430\u0436\u0434\u043e\u0439 \u0438\u0437 \u0442\u0430\u0431\u043b\u0438\u0446. \u0412 \u043d\u0430\u0447\u0430\u043b\u0435 \u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u0430 \u0437\u0430\u043f\u0438\u0448\u0435\u043c \u0432 \u044d\u0442\u0438 \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u043f\u043e\u0431\u043e\u043b\u044c\u0448\u0435 \u0441\u0442\u0440\u043e\u043a \u0438 \u043d\u0435 \u0431\u0443\u0434\u0435\u043c \u043c\u0435\u043d\u044f\u0442\u044c \u0438\u0445 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435.<br \/>  \u0421\u043d\u0430\u0447\u0430\u043b\u0430 \u0432\u043e\u0437\u044c\u043c\u0451\u043c 10% \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439 \u043e\u0441\u0442\u0430\u0442\u043a\u043e\u0432 \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0435 change_balances \u0438 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c, \u043a\u0430\u043a\u043e\u0439 \u043f\u043b\u0430\u043d \u0431\u0443\u0434\u0435\u0442 \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c dynamic_sampling:<\/p>\n<pre><code class=\"sql\">SQL&gt; EXPLAIN PLAN   2   SET statement_id = 'test1'   3   INTO plan_table   4  FOR  with c as   5   (select \/*+ dynamic_sampling(change_balances 2)*\/   6     account_id, balance_amount   7      from change_balances   8     where mod(account_id, 10) = 0)   9  select a.account_id, a.account_number, c.balance_amount  10    from c, accounts a  11   where c.account_id = a.account_id;  Explained.  SQL&gt; SQL&gt; SELECT * FROM table (DBMS_XPLAN.DISPLAY); Plan hash value: 874320301  ---------------------------------------------------------------------------------------------- | Id  | Operation          | Name            | Rows  | Bytes |TempSpc| Cost (%CPU)| Time     | ---------------------------------------------------------------------------------------------- |   0 | SELECT STATEMENT   |                 |  9951K|   493M|       |   140K  (1)| 00:28:10 | |*  1 |  HASH JOIN         |                 |  9951K|   493M|  3240K|   140K  (1)| 00:28:10 | |*  2 |   TABLE ACCESS FULL| CHANGE_BALANCES |   100K|  2057K|       |  7172   (1)| 00:01:27 | |   3 |   TABLE ACCESS FULL| ACCOUNTS        |    10M|   295M|       |   113K  (1)| 00:22:37 | ----------------------------------------------------------------------------------------------  Predicate Information (identified by operation id): ---------------------------------------------------     1 - access(&quot;ACCOUNT_ID&quot;=&quot;A&quot;.&quot;ACCOUNT_ID&quot;)    2 - filter(MOD(&quot;ACCOUNT_ID&quot;,10)=0)  Note -----    - dynamic sampling used for this statement (level=2)  20 rows selected.<\/code><\/pre>\n<p>  \u0418\u0442\u0430\u043a, \u0432\u0438\u0434\u0438\u043c, \u0447\u0442\u043e \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u0435\u0442\u0441\u044f \u043f\u0440\u043e\u0439\u0442\u0438 \u0442\u0430\u0431\u043b\u0438\u0446\u044b change_balances \u0438 accounts \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e full scan \u0438 \u0441\u043e\u0435\u0434\u0438\u043d\u0438\u0442\u044c \u0438\u0445 \u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u043e\u043c hash join.<br \/>  \u0422\u0435\u043f\u0435\u0440\u044c \u0440\u0435\u0437\u043a\u043e \u0443\u043c\u0435\u043d\u044c\u0448\u0438\u043c \u0432\u044b\u0431\u043e\u0440\u043a\u0443 \u0438\u0437 change_balances. \u0412\u043e\u0437\u044c\u043c\u0451\u043c 0.1% \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439 \u043e\u0441\u0442\u0430\u0442\u043a\u043e\u0432 \u0438 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c, \u043a\u0430\u043a\u043e\u0439 \u043f\u043b\u0430\u043d \u0431\u0443\u0434\u0435\u0442 \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c dynamic_sampling:<\/p>\n<pre><code class=\"sql\">SQL&gt; EXPLAIN PLAN   2   SET statement_id = 'test2'   3   INTO plan_table   4  FOR  with c as   5   (select \/*+ dynamic_sampling(change_balances 2)*\/   6     account_id, balance_amount   7      from change_balances   8     where mod(account_id, 1000) = 0)   9  select a.account_id, a.account_number, c.balance_amount  10    from c, accounts a  11   where c.account_id = a.account_id;  Explained.  SQL&gt; SQL&gt; SELECT * FROM table (DBMS_XPLAN.DISPLAY); Plan hash value: 2360715730  ------------------------------------------------------------------------------------------------------- | Id  | Operation                    | Name                   | Rows  | Bytes | Cost (%CPU)| Time     | ------------------------------------------------------------------------------------------------------- |   0 | SELECT STATEMENT             |                        | 73714 |  3743K| 16452   (1)| 00:03:18 | |   1 |  NESTED LOOPS                |                        |       |       |            |          | |   2 |   NESTED LOOPS               |                        | 73714 |  3743K| 16452   (1)| 00:03:18 | |*  3 |    TABLE ACCESS FULL         | CHANGE_BALANCES        |   743 | 15603 |  7172   (1)| 00:01:27 | |*  4 |    INDEX RANGE SCAN          | IX_ACCOUNTS_ACCOUNT_ID |   104 |       |     2   (0)| 00:00:01 | |   5 |   TABLE ACCESS BY INDEX ROWID| ACCOUNTS               |    99 |  3069 |   106   (0)| 00:00:02 | -------------------------------------------------------------------------------------------------------  Predicate Information (identified by operation id): ---------------------------------------------------     3 - filter(MOD(&quot;ACCOUNT_ID&quot;,1000)=0)    4 - access(&quot;ACCOUNT_ID&quot;=&quot;A&quot;.&quot;ACCOUNT_ID&quot;)  Note -----    - dynamic sampling used for this statement (level=2)  22 rows selected.<\/code><\/pre>\n<p>  \u041d\u0430 \u044d\u0442\u043e\u0442 \u0440\u0430\u0437 \u043a \u0442\u0430\u0431\u043b\u0438\u0446\u0435 change_balances \u0442\u0430\u0431\u043b\u0438\u0446\u0430 accounts \u043f\u0440\u0438\u0441\u043e\u0435\u0434\u0438\u043d\u044f\u0435\u0442\u0441\u044f \u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u043e\u043c nested loops \u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0438\u043d\u0434\u0435\u043a\u0441 \u0434\u043b\u044f \u0447\u0442\u0435\u043d\u0438\u044f \u0441\u0442\u0440\u043e\u043a \u0438\u0437 accounts.<br \/>  \u0415\u0441\u043b\u0438 \u0436\u0435 \u0445\u0438\u043d\u0442 dynamic_sampling \u0443\u0431\u0440\u0430\u0442\u044c, \u0442\u043e \u0432\u043e \u0432\u0442\u043e\u0440\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043f\u043b\u0430\u043d \u043e\u0441\u0442\u0430\u043d\u0435\u0442\u0441\u044f \u0442\u0430\u043a\u043e\u0439 \u0436\u0435, \u043a\u0430\u043a \u0432 \u043f\u0435\u0440\u0432\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435, \u0438 \u044d\u0442\u043e \u043d\u0435 \u043e\u043f\u0442\u0438\u043c\u0430\u043b\u044c\u043d\u043e.<br \/>  \u041f\u043e\u0434\u0440\u043e\u0431\u043d\u043e\u0441\u0442\u0438 \u043e \u0445\u0438\u043d\u0442\u0435 dynamic_sampling \u0438 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0445 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f\u0445 \u0435\u0433\u043e \u0447\u0438\u0441\u043b\u043e\u0432\u043e\u0433\u043e \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u0430 \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0439\u0442\u0438 \u0432 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438.<\/p>\n<h3>\u041a\u0430\u043a \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c \u043f\u043b\u0430\u043d \u0437\u0430\u043f\u0440\u043e\u0441\u0430 \u043f\u0440\u0438 \u0432\u0441\u0442\u0430\u0432\u043a\u0435 \u0434\u0430\u043d\u043d\u044b\u0445 \u0447\u0435\u0440\u0435\u0437 database link<\/h3>\n<p>  \u0420\u0435\u0448\u0430\u0435\u043c \u0442\u0430\u043a\u0443\u044e \u0437\u0430\u0434\u0430\u0447\u0443. \u041d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440\u0435-\u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0435 \u0434\u0430\u043d\u043d\u044b\u0445 \u0438\u043c\u0435\u044e\u0442\u0441\u044f \u0442\u0430\u0431\u043b\u0438\u0446\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0443\u0436\u043d\u043e \u0441\u043e\u0435\u0434\u0438\u043d\u0438\u0442\u044c \u0438 \u0437\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044c \u0432 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435 \u0434\u0430\u043d\u043d\u044b\u0445. \u0414\u043e\u043f\u0443\u0441\u0442\u0438\u043c, \u043d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440\u0435-\u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0435 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0430 \u0432\u044c\u044e\u0448\u043a\u0430, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0432 \u0441\u0435\u0431\u0435 \u0432\u0441\u044e \u043d\u0443\u0436\u043d\u0443\u044e ETL-\u043b\u043e\u0433\u0438\u043a\u0443 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0439. \u0412\u044c\u044e\u0448\u043a\u0430 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0430 \u043e\u043f\u0442\u0438\u043c\u0430\u043b\u044c\u043d\u043e, \u0432 \u043d\u0435\u0439 \u0443\u043a\u0430\u0437\u0430\u043d\u044b \u0445\u0438\u043d\u0442\u044b \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0442\u043e\u0440\u0443, \u043f\u043e\u0434\u0441\u043a\u0430\u0437\u044b\u0432\u0430\u044e\u0449\u0438\u0435, \u043a\u0430\u043a \u0441\u043e\u0435\u0434\u0438\u043d\u044f\u0442\u044c \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u0438 \u043a\u0430\u043a\u0438\u0435 \u0438\u043d\u0434\u0435\u043a\u0441\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c. \u041d\u0430 \u0441\u0442\u043e\u0440\u043e\u043d\u0435 \u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0430 \u0434\u0430\u043d\u043d\u044b\u0445 \u043d\u0443\u0436\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043d\u0435\u0441\u043b\u043e\u0436\u043d\u0443\u044e \u0432\u0435\u0449\u044c \u2013 \u0432\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435 \u0438\u0437 \u0432\u044c\u044e\u0448\u043a\u0438 \u0432 \u0446\u0435\u043b\u0435\u0432\u0443\u044e \u0442\u0430\u0431\u043b\u0438\u0446\u0443. \u0418 \u0442\u0443\u0442 \u043c\u043e\u0433\u0443\u0442 \u0432\u043e\u0437\u043d\u0438\u043a\u043d\u0443\u0442\u044c \u0441\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u0438. \u0415\u0441\u043b\u0438 \u0432\u0441\u0442\u0430\u0432\u043a\u0443 \u0432 \u0446\u0435\u043b\u0435\u0432\u0443\u044e \u0442\u0430\u0431\u043b\u0438\u0446\u0443 \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0438\u0442\u044c \u043a\u043e\u043c\u0430\u043d\u0434\u043e\u0439 \u0432\u0438\u0434\u0430<\/p>\n<pre><code class=\"sql\">insert into dwh_table   (field1, field2)   select field1, field2 from vw_for_dwh_table@xe_link;<\/code><\/pre>\n<p>  , \u0442\u043e \u0432\u0441\u044f \u043b\u043e\u0433\u0438\u043a\u0430 \u043f\u043b\u0430\u043d\u0430 \u0437\u0430\u043f\u0440\u043e\u0441\u0430, \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0430\u044f\u0441\u044f \u0432\u043e \u0432\u044c\u044e\u0448\u043a\u0435, \u0438\u0437 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0447\u0438\u0442\u0430\u0435\u043c \u0434\u0430\u043d\u043d\u044b\u0435 \u043f\u043e database link, \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043f\u0440\u043e\u0438\u0433\u043d\u043e\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u0430. \u0412\u0441\u0435 \u0445\u0438\u043d\u0442\u044b, \u0437\u0430\u0448\u0438\u0442\u044b\u0435 \u0432 \u044d\u0442\u043e\u0439 \u0432\u044c\u044e\u0448\u043a\u0435 \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u043d\u0435 \u0443\u0447\u0442\u0435\u043d\u044b.<\/p>\n<pre><code class=\"sql\">SQL&gt; EXPLAIN PLAN   2   SET statement_id = 'test'   3   INTO plan_table   4  FOR  insert into dwh_table   5    (field1, field2)   6    select field1, field2 from vw_for_dwh_table@xe_link;  Explained.  SQL&gt; SQL&gt; SELECT * FROM table (DBMS_XPLAN.DISPLAY); Plan hash value: 1788691278  ------------------------------------------------------------------------------------------------------------- | Id  | Operation                | Name             | Rows  | Bytes | Cost (%CPU)| Time     | Inst   |IN-OUT| ------------------------------------------------------------------------------------------------------------- |   0 | INSERT STATEMENT         |                  |     1 |  2015 |     2   (0)| 00:00:01 |        |      | |   1 |  LOAD TABLE CONVENTIONAL | DWH_TABLE        |       |       |            |          |        |      | |   2 |   REMOTE                 | VW_FOR_DWH_TABLE |     1 |  2015 |     2   (0)| 00:00:01 | XE_LI~ | R-&gt;S | -------------------------------------------------------------------------------------------------------------  Remote SQL Information (identified by operation id): ----------------------------------------------------     2 - SELECT \/*+ OPAQUE_TRANSFORM *\/ &quot;FIELD1&quot;,&quot;FIELD2&quot; FROM &quot;VW_FOR_DWH_TABLE&quot; &quot;VW_FOR_DWH_TABLE&quot;        (accessing 'XE_LINK' )   16 rows selected.<\/code><\/pre>\n<p>  \u0427\u0442\u043e\u0431\u044b \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c \u043f\u043b\u0430\u043d \u0437\u0430\u043f\u0440\u043e\u0441\u0430 \u0432\u043e \u0432\u044c\u044e\u0448\u043a\u0435, \u043c\u043e\u0436\u043d\u043e \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0432\u0441\u0442\u0430\u0432\u043a\u043e\u0439 \u0434\u0430\u043d\u043d\u044b\u0445 \u0432 \u0446\u0435\u043b\u0435\u0432\u0443\u044e \u0442\u0430\u0431\u043b\u0438\u0446\u0443 \u0438\u0437 \u043a\u0443\u0440\u0441\u043e\u0440\u0430:<\/p>\n<pre><code class=\"sql\">declare   cursor cr is     select field1, field2 from vw_for_dwh_table@xe_link;   cr_row cr%rowtype; begin   open cr;   loop     fetch cr       into cr_row;     insert into dwh_table       (field1, field2)     values       (cr_row.field1, cr_row.field2);     exit when cr%notfound;   end loop;   close cr; end;<\/code><\/pre>\n<p>  \u0417\u0430\u043f\u0440\u043e\u0441 \u0438\u0437 \u043a\u0443\u0440\u0441\u043e\u0440\u0430<\/p>\n<pre><code class=\"sql\">select field1, field2 from vw_for_dwh_table@xe_link;<\/code><\/pre>\n<p>  \u0432 \u043e\u0442\u043b\u0438\u0447\u0438\u0435 \u043e\u0442 \u0432\u0441\u0442\u0430\u0432\u043a\u0438<\/p>\n<pre><code class=\"sql\">insert into dwh_table   (field1, field2)   select field1, field2 from vw_for_dwh_table@xe_link;<\/code><\/pre>\n<p>  \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u0442 \u043f\u043b\u0430\u043d \u0437\u0430\u043f\u0440\u043e\u0441\u0430, \u0437\u0430\u043b\u043e\u0436\u0435\u043d\u043d\u044b\u0439 \u0432\u043e \u0432\u044c\u044e\u0448\u043a\u0443 \u043d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440\u0435-\u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0435.<\/p>\n<h3>\u0417\u0430\u043f\u0443\u0441\u043a \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440 \u0432 \u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u044b\u0445 \u0441\u0435\u0441\u0441\u0438\u044f\u0445<\/h3>\n<p>  \u0427\u0430\u0441\u0442\u043e \u0441\u0442\u043e\u0438\u0442 \u0437\u0430\u0434\u0430\u0447\u0430 \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0438\u0437 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0440\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u0441\u043a\u043e\u0439 \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u044b \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u044b\u0445 \u0440\u0430\u0441\u0447\u0451\u0442\u043e\u0432 \u0438, \u0434\u043e\u0436\u0434\u0430\u0432\u0448\u0438\u0441\u044c \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0438\u0437 \u043d\u0438\u0445, \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0438\u0442\u044c \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u0440\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u0441\u043a\u043e\u0439 \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u044b. \u042d\u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043f\u043e\u043b\u0435\u0437\u043d\u043e \u043f\u0440\u0438 \u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u044b\u0445 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f\u0445, \u0435\u0441\u043b\u0438 \u0440\u0435\u0441\u0443\u0440\u0441\u044b \u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0442 \u044d\u0442\u043e. \u0415\u0441\u0442\u044c \u043c\u043d\u043e\u0433\u043e \u0441\u043f\u043e\u0441\u043e\u0431\u043e\u0432 \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u044d\u0442\u043e.<br \/>  \u041e\u043f\u0438\u0448\u0435\u043c \u043e\u0447\u0435\u043d\u044c \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0442\u0430\u043a\u043e\u0433\u043e \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c\u0430. \u041f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u044b\u0435 \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u044b \u0431\u0443\u0434\u0435\u043c \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u0432 \u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u044b\u0445 \u201c\u043e\u0434\u043d\u043e\u0440\u0430\u0437\u043e\u0432\u044b\u0445\u201d \u0434\u0436\u043e\u0431\u0430\u0445, \u0440\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u0441\u043a\u0430\u044f \u0436\u0435 \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u0430 \u0432 \u0446\u0438\u043a\u043b\u0435 \u0431\u0443\u0434\u0435\u0442 \u043e\u0436\u0438\u0434\u0430\u0442\u044c \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u044f \u0432\u0441\u0435\u0445 \u044d\u0442\u0438\u0445 \u0434\u0436\u043e\u0431\u043e\u0432.<br \/>  \u0421\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u0441 \u043c\u0435\u0442\u0430\u0434\u0430\u043d\u043d\u044b\u043c\u0438 \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c\u0430. \u0414\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430 \u0441\u0434\u0435\u043b\u0430\u0435\u043c \u0442\u0430\u0431\u043b\u0438\u0446\u0443 \u0441 \u0433\u0440\u0443\u043f\u043f\u0430\u043c\u0438 \u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u043e \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c\u044b\u0445 \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440:<\/p>\n<pre><code class=\"sql\">create table PARALLEL_PROC_GROUP_LIST (   group_id   INTEGER,   group_name VARCHAR2(4000) ); comment on column PARALLEL_PROC_GROUP_LIST.group_id   is '\u041d\u043e\u043c\u0435\u0440 \u0433\u0440\u0443\u043f\u043f\u044b \u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u043e \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c\u044b\u0445 \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440'; comment on column PARALLEL_PROC_GROUP_LIST.group_name   is '\u041d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u0433\u0440\u0443\u043f\u043f\u044b \u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u043e \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c\u044b\u0445 \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440';<\/code><\/pre>\n<p>  \u0414\u0430\u043b\u0435\u0435 \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u0442\u0430\u0431\u043b\u0438\u0446\u0443 \u0441\u043e \u0441\u043a\u0440\u0438\u043f\u0442\u0430\u043c\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0431\u0443\u0434\u0443\u0442 \u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c\u0441\u044f \u0432 \u0433\u0440\u0443\u043f\u043f\u0430\u0445. \u041d\u0430\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u044d\u0442\u043e\u0439 \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043a\u0430\u043a \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u043c, \u0442\u0430\u043a \u0438 \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c\u0441\u044f \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0438:<\/p>\n<pre><code class=\"sql\">create table PARALLEL_PROC_LIST (   group_id    INTEGER,   proc_script VARCHAR2(4000),   is_active   CHAR(1) default 'Y' ); comment on column PARALLEL_PROC_LIST.group_id   is '\u041d\u043e\u043c\u0435\u0440 \u0433\u0440\u0443\u043f\u043f\u044b \u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u043e \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c\u044b\u0445 \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440'; comment on column PARALLEL_PROC_LIST.proc_script   is 'Pl\/sql \u0431\u043b\u043e\u043a \u0441 \u043a\u043e\u0434\u043e\u043c \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u044b'; comment on column PARALLEL_PROC_LIST.is_active   is 'Y - active, N - inactive. \u0421 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u044d\u0442\u043e\u0433\u043e \u043f\u043e\u043b\u044f \u043c\u043e\u0436\u043d\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e \u043e\u0442\u043a\u043b\u044e\u0447\u0430\u0442\u044c \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u0443 \u0438\u0437 \u0433\u0440\u0443\u043f\u043f\u044b';<\/code><\/pre>\n<p>  \u0418 \u0441\u0434\u0435\u043b\u0430\u0435\u043c \u0442\u0430\u0431\u043b\u0438\u0446\u0443 \u0436\u0443\u0440\u043d\u0430\u043b\u0430, \u0433\u0434\u0435 \u0431\u0443\u0434\u0435\u043c \u0441\u043e\u0431\u0438\u0440\u0430\u0442\u044c \u043b\u043e\u0433 \u0442\u043e\u0433\u043e, \u043a\u0430\u043a\u0430\u044f \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u0430 \u043a\u043e\u0433\u0434\u0430 \u0432 \u043a\u0430\u043a\u043e\u043c \u0434\u0436\u043e\u0431\u0435 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u043b\u0430\u0441\u044c:<\/p>\n<pre><code class=\"sql\">create table PARALLEL_PROC_LOG (   run_id      INTEGER,   group_id    INTEGER,   proc_script VARCHAR2(4000),   job_id      INTEGER,   start_time  DATE,   end_time    DATE ); comment on column PARALLEL_PROC_LOG.run_id   is '\u041d\u043e\u043c\u0435\u0440 \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u044b run_in_parallel'; comment on column PARALLEL_PROC_LOG.group_id   is '\u041d\u043e\u043c\u0435\u0440 \u0433\u0440\u0443\u043f\u043f\u044b \u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u043e \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c\u044b\u0445 \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440'; comment on column PARALLEL_PROC_LOG.proc_script   is 'Pl\/sql \u0431\u043b\u043e\u043a \u0441 \u043a\u043e\u0434\u043e\u043c \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u044b'; comment on column PARALLEL_PROC_LOG.job_id   is 'Job_id \u0434\u0436\u043e\u0431\u0430, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0431\u044b\u043b\u0430 \u0437\u0430\u043f\u0443\u0449\u0435\u043d\u0430 \u044d\u0442\u0430 \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u0430'; comment on column PARALLEL_PROC_LOG.start_time   is '\u0412\u0440\u0435\u043c\u044f \u043d\u0430\u0447\u0430\u043b\u0430 \u0440\u0430\u0431\u043e\u0442\u044b'; comment on column PARALLEL_PROC_LOG.end_time   is '\u0412\u0440\u0435\u043c\u044f \u043e\u043a\u043e\u043d\u0447\u0430\u043d\u0438\u044f \u0440\u0430\u0431\u043e\u0442\u044b';  create sequence Seq_Parallel_Proc_Log;<\/code><\/pre>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u043f\u0440\u0438\u0432\u0435\u0434\u0451\u043c \u043a\u043e\u0434 \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u044b \u043f\u043e \u0437\u0430\u043f\u0443\u0441\u043a\u0443 \u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u044b\u0445 \u043f\u043e\u0442\u043e\u043a\u043e\u0432:<\/p>\n<pre><code class=\"sql\">create or replace procedure run_in_parallel(in_group_id integer) as   -- \u041f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u0430 \u043f\u043e \u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u043e\u043c\u0443 \u0437\u0430\u043f\u0443\u0441\u043a\u0443 \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440 \u0438\u0437 \u0442\u0430\u0431\u043b\u0438\u0446\u044b parallel_proc_list.   -- \u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 - \u043d\u043e\u043c\u0435\u0440 \u0433\u0440\u0443\u043f\u043f\u044b \u0438\u0437 parallel_proc_list   v_run_id             integer;   v_job_id             integer;   v_job_id_list        varchar2(32767);   v_job_id_list_ext    varchar2(32767);   v_running_jobs_count integer; begin   select seq_parallel_proc_log.nextval into v_run_id from dual;   -- submit jobs with the same parallel_proc_list.in_group_id   -- store seperated with ',' JOB_IDs in v_job_id_list   v_job_id_list     := null;   v_job_id_list_ext := null;   for z in (select pt.proc_script               from parallel_proc_list pt              where pt.group_id = in_group_id                and pt.is_active = 'Y') loop     dbms_job.submit(v_job_id, z.proc_script);     insert into parallel_proc_log       (run_id, group_id, proc_script, job_id, start_time, end_time)     values       (v_run_id, in_group_id, z.proc_script, v_job_id, sysdate, null);     v_job_id_list     := v_job_id_list || ',' || to_char(v_job_id);     v_job_id_list_ext := v_job_id_list_ext || ' union all select ' ||                          to_char(v_job_id) || ' job_id from dual';   end loop;   commit;   v_job_id_list     := substr(v_job_id_list, 2);   v_job_id_list_ext := substr(v_job_id_list_ext, 12);   -- loop while not all jobs finished   loop     -- set parallel_proc_log.end_time for finished jobs     execute immediate 'update parallel_proc_log set end_time = sysdate where job_id in (' ||                       v_job_id_list_ext ||                       ' minus select job from user_jobs where job in (' ||                       v_job_id_list ||                       ') minus select job_id from parallel_proc_log where job_id in (' ||                       v_job_id_list || ') and end_time is not null)';     commit;     -- check whether all jobs finished     execute immediate 'select count(1) from user_jobs where job in (' ||                       v_job_id_list || ')'       into v_running_jobs_count;     -- if all jobs finished then exit     exit when v_running_jobs_count = 0;     -- sleep a little     sys.dbms_lock.sleep(0.1);   end loop; end;<\/code><\/pre>\n<p>  \u041f\u0440\u043e\u0432\u0435\u0440\u0438\u043c, \u043a\u0430\u043a \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u0430 run_in_parallel. \u0421\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u0442\u0435\u0441\u0442\u043e\u0432\u0443\u044e \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u0443, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u0431\u0443\u0434\u0435\u043c \u0432\u044b\u0437\u044b\u0432\u0430\u0442\u044c \u0432 \u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u044b\u0445 \u0441\u0435\u0441\u0441\u0438\u044f\u0445.<\/p>\n<pre><code class=\"sql\">create or replace procedure sleep(in_seconds integer) as begin   sys.Dbms_Lock.Sleep(in_seconds); end;<\/code><\/pre>\n<p>  \u0417\u0430\u043f\u043e\u043b\u043d\u0438\u043c \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u0433\u0440\u0443\u043f\u043f\u044b \u0438 \u0442\u0430\u0431\u043b\u0438\u0446\u0443 \u0441\u043e c\u043a\u0440\u0438\u043f\u0442\u0430\u043c\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0431\u0443\u0434\u0443\u0442 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c\u0441\u044f \u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u043e.<\/p>\n<pre><code class=\"sql\">insert into PARALLEL_PROC_GROUP_LIST(group_id, group_name) values(1, '\u0422\u0435\u0441\u0442\u043e\u0432\u0430\u044f \u0433\u0440\u0443\u043f\u043f\u0430');  insert into PARALLEL_PROC_LIST(group_id, proc_script, is_active) values(1, 'begin sleep(5); end;', 'Y'); insert into PARALLEL_PROC_LIST(group_id, proc_script, is_active) values(1, 'begin sleep(10); end;', 'Y');<\/code><\/pre>\n<p>  \u0417\u0430\u043f\u0443\u0441\u0442\u0438\u043c \u0433\u0440\u0443\u043f\u043f\u0443 \u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u044b\u0445 \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440.<\/p>\n<pre><code class=\"sql\">begin   run_in_parallel(1); end;<\/code><\/pre>\n<p>  \u041f\u043e \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u0438 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043b\u043e\u0433.<\/p>\n<pre><code class=\"sql\">select * from PARALLEL_PROC_LOG;<\/code><\/pre>\n<p>  <\/p>\n<div class=\"scrollable-table\">\n<table>\n<tr>\n<td><b>RUN_ID<\/b><\/td>\n<td><b>GROUP_ID<\/b><\/td>\n<td><b>PROC_SCRIPT<\/b><\/td>\n<td><b>JOB_ID<\/b><\/td>\n<td><b>START_TIME<\/b><\/td>\n<td><b>END_TIME<\/b><\/td>\n<\/tr>\n<tr>\n<td>1<\/td>\n<td>1<\/td>\n<td>begin sleep(5); end;<\/td>\n<td>1<\/td>\n<td>11.09.2020 15:00:51<\/td>\n<td>11.09.2020 15:00:56<\/td>\n<\/tr>\n<tr>\n<td>1<\/td>\n<td>1<\/td>\n<td>begin sleep(10); end;<\/td>\n<td>2<\/td>\n<td>11.09.2020 15:00:51<\/td>\n<td>11.09.2020 15:01:01<\/td>\n<\/tr>\n<\/table>\n<\/div>\n<p>  \u0412\u0438\u0434\u0438\u043c, \u0447\u0442\u043e \u0432\u0440\u0435\u043c\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440\u043e\u0432 \u0442\u0435\u0441\u0442\u043e\u0432\u043e\u0439 \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u044b \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u043e\u0436\u0438\u0434\u0430\u043d\u0438\u044f\u043c.<\/p>\n<h3>\u041f\u0440\u043e\u0442\u044f\u0433\u0438\u0432\u0430\u043d\u0438\u0435 \u043e\u0441\u0442\u0430\u0442\u043a\u043e\u0432<\/h3>\n<p>  \u041e\u043f\u0438\u0448\u0435\u043c \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0442\u0438\u043f\u043e\u0432\u043e\u0439 \u0431\u0430\u043d\u043a\u043e\u0432\u0441\u043a\u043e\u0439 \u0437\u0430\u0434\u0430\u0447\u0438 \u043f\u043e \u201c\u043f\u0440\u043e\u0442\u044f\u0433\u0438\u0432\u0430\u043d\u0438\u044e \u043e\u0441\u0442\u0430\u0442\u043a\u043e\u0432\u201d. \u0414\u043e\u043f\u0443\u0441\u0442\u0438\u043c, \u0438\u043c\u0435\u0435\u0442\u0441\u044f \u0442\u0430\u0431\u043b\u0438\u0446\u0430 \u0444\u0430\u043a\u0442\u043e\u0432 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u043e\u0441\u0442\u0430\u0442\u043a\u043e\u0432 \u043f\u043e \u0441\u0447\u0435\u0442\u0430\u043c. \u0422\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u043d\u0430 \u043a\u0430\u0436\u0434\u044b\u0439 \u0434\u0435\u043d\u044c \u043a\u0430\u043b\u0435\u043d\u0434\u0430\u0440\u044f \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u0430\u043a\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u0439 \u043e\u0441\u0442\u0430\u0442\u043e\u043a \u043f\u043e \u0441\u0447\u0451\u0442\u0443 (\u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439 \u0437\u0430 \u0434\u0435\u043d\u044c). \u0422\u0430\u043a\u0430\u044f \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u0447\u0430\u0441\u0442\u043e \u0431\u044b\u0432\u0430\u0435\u0442 \u043d\u0443\u0436\u043d\u0430 \u0432 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0430\u0445 \u0434\u0430\u043d\u043d\u044b\u0445. \u0415\u0441\u043b\u0438 \u0432 \u043a\u0430\u043a\u043e\u0439-\u0442\u043e \u0434\u0435\u043d\u044c \u043d\u0435 \u0431\u044b\u043b\u043e \u0434\u0432\u0438\u0436\u0435\u043d\u0438\u0439 \u043f\u043e \u0441\u0447\u0451\u0442\u0443, \u0442\u043e \u043d\u0443\u0436\u043d\u043e \u043f\u043e\u0432\u0442\u043e\u0440\u0438\u0442\u044c \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439 \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u044b\u0439 \u043e\u0441\u0442\u0430\u0442\u043e\u043a. \u0415\u0441\u043b\u0438 \u043e\u0431\u044a\u0451\u043c\u044b \u0434\u0430\u043d\u043d\u044b\u0445 \u0438 \u0432\u044b\u0447\u0438\u0441\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u043c\u043e\u0449\u043d\u043e\u0441\u0442\u0438 \u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0442, \u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0440\u0435\u0448\u0438\u0442\u044c \u0442\u0430\u043a\u0443\u044e \u0437\u0430\u0434\u0430\u0447\u0443 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e SQL-\u0437\u0430\u043f\u0440\u043e\u0441\u0430, \u0434\u0430\u0436\u0435 \u043d\u0435 \u043f\u0440\u0438\u0431\u0435\u0433\u0430\u044f \u043a PL\/SQL. \u041f\u043e\u043c\u043e\u0436\u0435\u0442 \u043d\u0430\u043c \u0432 \u044d\u0442\u043e\u043c \u0444\u0443\u043d\u043a\u0446\u0438\u044f last_value(* ignore nulls) over(partition by * order by *), \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043f\u0440\u043e\u0442\u044f\u043d\u0435\u0442 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439 \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u044b\u0439 \u043e\u0441\u0442\u0430\u0442\u043e\u043a \u043d\u0430 \u043f\u043e\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u0434\u0430\u0442\u044b, \u0432 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043d\u0435 \u0431\u044b\u043b\u043e \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439.<br \/>  \u0421\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u0442\u0430\u0431\u043b\u0438\u0446\u0443 \u0438 \u0437\u0430\u043f\u043e\u043b\u043d\u0438\u043c \u0435\u0451 \u0442\u0435\u0441\u0442\u043e\u0432\u044b\u043c\u0438 \u0434\u0430\u043d\u043d\u044b\u043c\u0438.<\/p>\n<pre><code class=\"sql\">create table ACCOUNT_BALANCE (   dt           DATE,   account_id   INTEGER,   balance_amt  NUMBER,   turnover_amt NUMBER ); comment on column ACCOUNT_BALANCE.dt   is '\u0414\u0430\u0442\u0430 \u0438 \u0432\u0440\u0435\u043c\u044f \u043e\u0441\u0442\u0430\u0442\u043a\u0430 \u043f\u043e \u0441\u0447\u0451\u0442\u0443'; comment on column ACCOUNT_BALANCE.account_id   is '\u041d\u043e\u043c\u0435\u0440 \u0441\u0447\u0451\u0442\u0430'; comment on column ACCOUNT_BALANCE.balance_amt   is '\u041e\u0441\u0442\u0430\u0442\u043e\u043a \u043f\u043e \u0441\u0447\u0451\u0442\u0443'; comment on column ACCOUNT_BALANCE.turnover_amt   is '\u041e\u0431\u043e\u0440\u043e\u0442 \u043f\u043e \u0441\u0447\u0451\u0442\u0443';  insert into account_balance(dt, account_id, balance_amt, turnover_amt) values(to_date('01.01.2020 00:00:00','dd.mm.yyyy hh24.mi.ss'), 1, 23, 23); insert into account_balance(dt, account_id, balance_amt, turnover_amt) values(to_date('05.01.2020 01:00:00','dd.mm.yyyy hh24.mi.ss'), 1, 45, 22); insert into account_balance(dt, account_id, balance_amt, turnover_amt) values(to_date('05.01.2020 20:00:00','dd.mm.yyyy hh24.mi.ss'), 1, 44, -1); insert into account_balance(dt, account_id, balance_amt, turnover_amt) values(to_date('05.01.2020 00:00:00','dd.mm.yyyy hh24.mi.ss'), 2, 67, 67); insert into account_balance(dt, account_id, balance_amt, turnover_amt) values(to_date('05.01.2020 20:00:00','dd.mm.yyyy hh24.mi.ss'), 2, 77, 10); insert into account_balance(dt, account_id, balance_amt, turnover_amt) values(to_date('07.01.2020 00:00:00','dd.mm.yyyy hh24.mi.ss'), 2, 72, -5); <\/code><\/pre>\n<p>  \u041d\u0438\u0436\u0435\u043f\u0440\u0438\u0432\u0435\u0434\u0451\u043d\u043d\u044b\u0439 \u0437\u0430\u043f\u0440\u043e\u0441 \u0440\u0435\u0448\u0430\u0435\u0442 \u043d\u0430\u0448\u0443 \u0437\u0430\u0434\u0430\u0447\u0443. \u041f\u043e\u0434\u0437\u0430\u043f\u0440\u043e\u0441 \u2018cld\u2019 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u043a\u0430\u043b\u0435\u043d\u0434\u0430\u0440\u044c \u0434\u0430\u0442, \u0432 \u043f\u043e\u0434\u0437\u0430\u043f\u0440\u043e\u0441\u0435 \u2018ab\u2019 \u0433\u0440\u0443\u043f\u043f\u0438\u0440\u0443\u0435\u043c \u043e\u0441\u0442\u0430\u0442\u043a\u0438 \u0437\u0430 \u043a\u0430\u0436\u0434\u044b\u0439 \u0434\u0435\u043d\u044c, \u0432 \u043f\u043e\u0434\u0437\u0430\u043f\u0440\u043e\u0441\u0435 \u2018a\u2019 \u0437\u0430\u043f\u043e\u043c\u0438\u043d\u0430\u0435\u043c \u043f\u0435\u0440\u0435\u0447\u0435\u043d\u044c \u0432\u0441\u0435\u0445 \u0441\u0447\u0435\u0442\u043e\u0432 \u0438 \u0434\u0430\u0442\u0443 \u043d\u0430\u0447\u0430\u043b\u0430 \u0438\u0441\u0442\u043e\u0440\u0438\u0438 \u043f\u043e \u043a\u0430\u0436\u0434\u043e\u043c\u0443 \u0441\u0447\u0451\u0442\u0443, \u0432 \u043f\u043e\u0434\u0437\u0430\u043f\u0440\u043e\u0441\u0435 \u2018pre\u2019 \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0441\u0447\u0451\u0442\u0430 \u0441\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u043c \u043a\u0430\u043b\u0435\u043d\u0434\u0430\u0440\u044c \u0434\u043d\u0435\u0439 \u0441 \u043d\u0430\u0447\u0430\u043b\u0430 \u0435\u0433\u043e \u0438\u0441\u0442\u043e\u0440\u0438\u0438. \u0424\u0438\u043d\u0430\u043b\u044c\u043d\u044b\u0439 \u0437\u0430\u043f\u0440\u043e\u0441 \u043f\u0440\u0438\u0441\u043e\u0435\u0434\u0438\u043d\u044f\u0435\u0442 \u043a \u043a\u0430\u043b\u0435\u043d\u0434\u0430\u0440\u044e \u0434\u043d\u0435\u0439 \u0430\u043a\u0442\u0438\u0432\u043d\u043e\u0441\u0442\u0438 \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0441\u0447\u0451\u0442\u0430 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0435 \u043e\u0441\u0442\u0430\u0442\u043a\u0438 \u043d\u0430 \u043a\u0430\u0436\u0434\u044b\u0439 \u0434\u0435\u043d\u044c \u0438 \u043f\u0440\u043e\u0442\u044f\u0433\u0438\u0432\u0430\u0435\u0442 \u0438\u0445 \u043d\u0430 \u0434\u043d\u0438, \u0432 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043d\u0435 \u0431\u044b\u043b\u043e \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439.<\/p>\n<pre><code class=\"sql\">with cld as  (select \/*+ materialize*\/    to_date('01.01.2020', 'dd.mm.yyyy') + level - 1 dt     from dual   connect by level &lt;= 10), ab as  (select trunc(dt) dt,          account_id,          max(balance_amt) keep(dense_rank last order by dt) balance_amt,          sum(turnover_amt) turnover_amt     from account_balance    group by trunc(dt), account_id), a as  (select min(dt) min_dt, account_id from ab group by account_id), pre as  (select cld.dt, a.account_id from cld left join a on cld.dt &gt;= a.min_dt) select pre.dt,        pre.account_id,        last_value(ab.balance_amt ignore nulls) over(partition by pre.account_id order by pre.dt) balance_amt,        nvl(ab.turnover_amt, 0) turnover_amt   from pre   left join ab     on pre.dt = ab.dt    and pre.account_id = ab.account_id  order by 2, 1; <\/code><\/pre>\n<p>  \u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0437\u0430\u043f\u0440\u043e\u0441\u0430 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u043e\u0436\u0438\u0434\u0430\u043d\u0438\u044f\u043c.  <\/p>\n<div class=\"scrollable-table\">\n<table>\n<tr>\n<td><b>DT<\/b><\/td>\n<td><b>ACCOUNT_ID<\/b><\/td>\n<td><b>BALANCE_AMT<\/b><\/td>\n<td><b>TURNOVER_AMT<\/b><\/td>\n<\/tr>\n<tr>\n<td>01.01.2020<\/td>\n<td>1<\/td>\n<td>23<\/td>\n<td>23<\/td>\n<\/tr>\n<tr>\n<td>02.01.2020<\/td>\n<td>1<\/td>\n<td>23<\/td>\n<td>0<\/td>\n<\/tr>\n<tr>\n<td>03.01.2020<\/td>\n<td>1<\/td>\n<td>23<\/td>\n<td>0<\/td>\n<\/tr>\n<tr>\n<td>04.01.2020<\/td>\n<td>1<\/td>\n<td>23<\/td>\n<td>0<\/td>\n<\/tr>\n<tr>\n<td>05.01.2020<\/td>\n<td>1<\/td>\n<td>44<\/td>\n<td>21<\/td>\n<\/tr>\n<tr>\n<td>06.01.2020<\/td>\n<td>1<\/td>\n<td>44<\/td>\n<td>0<\/td>\n<\/tr>\n<tr>\n<td>07.01.2020<\/td>\n<td>1<\/td>\n<td>44<\/td>\n<td>0<\/td>\n<\/tr>\n<tr>\n<td>08.01.2020<\/td>\n<td>1<\/td>\n<td>44<\/td>\n<td>0<\/td>\n<\/tr>\n<tr>\n<td>09.01.2020<\/td>\n<td>1<\/td>\n<td>44<\/td>\n<td>0<\/td>\n<\/tr>\n<tr>\n<td>10.01.2020<\/td>\n<td>1<\/td>\n<td>44<\/td>\n<td>0<\/td>\n<\/tr>\n<tr>\n<td>05.01.2020<\/td>\n<td>2<\/td>\n<td>77<\/td>\n<td>77<\/td>\n<\/tr>\n<tr>\n<td>06.01.2020<\/td>\n<td>2<\/td>\n<td>77<\/td>\n<td>0<\/td>\n<\/tr>\n<tr>\n<td>07.01.2020<\/td>\n<td>2<\/td>\n<td>72<\/td>\n<td>-5<\/td>\n<\/tr>\n<tr>\n<td>08.01.2020<\/td>\n<td>2<\/td>\n<td>72<\/td>\n<td>0<\/td>\n<\/tr>\n<tr>\n<td>09.01.2020<\/td>\n<td>2<\/td>\n<td>72<\/td>\n<td>0<\/td>\n<\/tr>\n<tr>\n<td>10.01.2020<\/td>\n<td>2<\/td>\n<td>72<\/td>\n<td>0<\/td>\n<\/tr>\n<\/table>\n<\/div>\n<p>  <\/p>\n<h3>\u041e\u0431\u044a\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0435 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u0438\u0441\u0442\u043e\u0440\u0438\u0439 \u0432 \u043e\u0434\u043d\u0443<\/h3>\n<p>  \u041f\u0440\u0438 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0435 \u0434\u0430\u043d\u043d\u044b\u0445 \u0432 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0430 \u0447\u0430\u0441\u0442\u043e \u0440\u0435\u0448\u0430\u0435\u0442\u0441\u044f \u0437\u0430\u0434\u0430\u0447\u0430, \u043a\u043e\u0433\u0434\u0430 \u043d\u0443\u0436\u043d\u043e \u0432\u044b\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u0435\u0434\u0438\u043d\u0443\u044e \u0438\u0441\u0442\u043e\u0440\u0438\u044e \u043f\u043e \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u0438, \u0438\u043c\u0435\u044f \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0435 \u0438\u0441\u0442\u043e\u0440\u0438\u0438 \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u043e\u0432 \u044d\u0442\u043e\u0439 \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u0438, \u043f\u0440\u0438\u0448\u0435\u0434\u0448\u0438\u0435 \u0438\u0437 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0445 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u043e\u0432. \u0414\u043e\u043f\u0443\u0441\u0442\u0438\u043c, \u0438\u043c\u0435\u0435\u0442\u0441\u044f \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u044c \u0441 \u043f\u0435\u0440\u0432\u0438\u0447\u043d\u044b\u043c \u043a\u043b\u044e\u0447\u043e\u043c primary_key_id, \u043e \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u0430 \u0438\u0441\u0442\u043e\u0440\u0438\u044f (start_dt \u2014 end_dt) \u0442\u0440\u0451\u0445 \u0435\u0451 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0445 \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u043e\u0432, \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u043d\u0430\u044f \u0432 \u0442\u0440\u0451\u0445 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0445 \u0442\u0430\u0431\u043b\u0438\u0446\u0430\u0445.<\/p>\n<pre><code class=\"sql\">create table HIST1 (   primary_key_id INTEGER,   start_dt       DATE,   attribute1     NUMBER );  insert into HIST1(primary_key_id, start_dt, attribute1) values(1, to_date('2014-01-01','yyyy-mm-dd'), 7); insert into HIST1(primary_key_id, start_dt, attribute1) values(1, to_date('2015-01-01','yyyy-mm-dd'), 8); insert into HIST1(primary_key_id, start_dt, attribute1) values(1, to_date('2016-01-01','yyyy-mm-dd'), 9); insert into HIST1(primary_key_id, start_dt, attribute1) values(2, to_date('2014-01-01','yyyy-mm-dd'), 17); insert into HIST1(primary_key_id, start_dt, attribute1) values(2, to_date('2015-01-01','yyyy-mm-dd'), 18); insert into HIST1(primary_key_id, start_dt, attribute1) values(2, to_date('2016-01-01','yyyy-mm-dd'), 19);  create table HIST2 (   primary_key_id INTEGER,   start_dt       DATE,   attribute2     NUMBER );   insert into HIST2(primary_key_id, start_dt, attribute2) values(1, to_date('2015-01-01','yyyy-mm-dd'), 4); insert into HIST2(primary_key_id, start_dt, attribute2) values(1, to_date('2016-01-01','yyyy-mm-dd'), 5); insert into HIST2(primary_key_id, start_dt, attribute2) values(1, to_date('2017-01-01','yyyy-mm-dd'), 6); insert into HIST2(primary_key_id, start_dt, attribute2) values(2, to_date('2015-01-01','yyyy-mm-dd'), 14); insert into HIST2(primary_key_id, start_dt, attribute2) values(2, to_date('2016-01-01','yyyy-mm-dd'), 15); insert into HIST2(primary_key_id, start_dt, attribute2) values(2, to_date('2017-01-01','yyyy-mm-dd'), 16);  create table HIST3 (   primary_key_id INTEGER,   start_dt       DATE,   attribute3     NUMBER );   insert into HIST3(primary_key_id, start_dt, attribute3) values(1, to_date('2016-01-01','yyyy-mm-dd'), 10); insert into HIST3(primary_key_id, start_dt, attribute3) values(1, to_date('2017-01-01','yyyy-mm-dd'), 20); insert into HIST3(primary_key_id, start_dt, attribute3) values(1, to_date('2018-01-01','yyyy-mm-dd'), 30); insert into HIST3(primary_key_id, start_dt, attribute3) values(2, to_date('2016-01-01','yyyy-mm-dd'), 110); insert into HIST3(primary_key_id, start_dt, attribute3) values(2, to_date('2017-01-01','yyyy-mm-dd'), 120); insert into HIST3(primary_key_id, start_dt, attribute3) values(2, to_date('2018-01-01','yyyy-mm-dd'), 130);<\/code><\/pre>\n<p>  \u0426\u0435\u043b\u044c\u044e \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0430 \u0435\u0434\u0438\u043d\u043e\u0439 \u0438\u0441\u0442\u043e\u0440\u0438\u0438 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0442\u0440\u0451\u0445 \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u043e\u0432 \u0432 \u043e\u0434\u043d\u0443 \u0442\u0430\u0431\u043b\u0438\u0446\u0443.<br \/>  \u041d\u0438\u0436\u0435 \u043f\u0440\u0438\u0432\u0435\u0434\u0451\u043d \u0437\u0430\u043f\u0440\u043e\u0441, \u0440\u0435\u0448\u0430\u044e\u0449\u0438\u0439 \u0442\u0430\u043a\u0443\u044e \u0437\u0430\u0434\u0430\u0447\u0443. \u0412 \u043d\u0451\u043c \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u0444\u043e\u0440\u043c\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0434\u0438\u0430\u0433\u043e\u043d\u0430\u043b\u044c\u043d\u0430\u044f \u0442\u0430\u0431\u043b\u0438\u0446\u0430 q1 \u0441 \u0434\u0430\u043d\u043d\u044b\u043c\u0438 \u0438\u0437 \u0440\u0430\u0437\u043d\u044b\u0445 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u043e\u0432 \u043f\u043e \u0440\u0430\u0437\u043d\u044b\u043c \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u0430\u043c (\u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0435 \u0432 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0435 \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u044b \u0437\u0430\u043f\u043e\u043b\u043d\u044f\u044e\u0442\u0441\u044f null-\u0430\u043c\u0438). \u0417\u0430\u0442\u0435\u043c \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0444\u0443\u043d\u043a\u0446\u0438\u0438 last_value(* ignore nulls) \u0434\u0438\u0430\u0433\u043e\u043d\u0430\u043b\u044c\u043d\u0430\u044f \u0442\u0430\u0431\u043b\u0438\u0446\u0430 \u0441\u0445\u043b\u043e\u043f\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0432 \u0435\u0434\u0438\u043d\u0443\u044e \u0438\u0441\u0442\u043e\u0440\u0438\u044e, \u0430 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0435 \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u044b\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u043e\u0432 \u043f\u0440\u043e\u0442\u044f\u0433\u0438\u0432\u0430\u044e\u0442\u0441\u044f \u0432\u043f\u0435\u0440\u0451\u0434 \u043d\u0430 \u0442\u0435 \u0434\u0430\u0442\u044b, \u0432 \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439 \u043f\u043e \u043d\u0438\u043c \u043d\u0435 \u0431\u044b\u043b\u043e:<\/p>\n<pre><code class=\"sql\">select primary_key_id,        start_dt,        nvl(lead(start_dt - 1)            over(partition by primary_key_id order by start_dt),            to_date('9999-12-31', 'yyyy-mm-dd')) as end_dt,        last_value(attribute1 ignore nulls) over(partition by primary_key_id order by start_dt) as attribute1,        last_value(attribute2 ignore nulls) over(partition by primary_key_id order by start_dt) as attribute2,        last_value(attribute3 ignore nulls) over(partition by primary_key_id order by start_dt) as attribute3   from (select primary_key_id,                start_dt,                max(attribute1) as attribute1,                max(attribute2) as attribute2,                max(attribute3) as attribute3           from (select primary_key_id,                        start_dt,                        attribute1,                        cast(null as number) attribute2,                        cast(null as number) attribute3                   from hist1                 union all                 select primary_key_id,                        start_dt,                        cast(null as number) attribute1,                        attribute2,                        cast(null as number) attribute3                   from hist2                 union all                 select primary_key_id,                        start_dt,                        cast(null as number) attribute1,                        cast(null as number) attribute2,                        attribute3                   from hist3) q1          group by primary_key_id, start_dt) q2  order by primary_key_id, start_dt;<\/code><\/pre>\n<p>  \u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f \u0442\u0430\u043a\u043e\u0439:  <\/p>\n<div class=\"scrollable-table\">\n<table>\n<tr>\n<td><b>PRIMARY_KEY_ID<\/b><\/td>\n<td><b>START_DT<\/b><\/td>\n<td><b>END_DT<\/b><\/td>\n<td><b>ATTRIBUTE1<\/b><\/td>\n<td><b>ATTRIBUTE2<\/b><\/td>\n<td><b>ATTRIBUTE3<\/b><\/td>\n<\/tr>\n<tr>\n<td>1<\/td>\n<td>01.01.2014<\/td>\n<td>31.12.2014<\/td>\n<td>7<\/td>\n<td>NULL<\/td>\n<td>NULL<\/td>\n<\/tr>\n<tr>\n<td>1<\/td>\n<td>01.01.2015<\/td>\n<td>31.12.2015<\/td>\n<td>8<\/td>\n<td>4<\/td>\n<td>NULL<\/td>\n<\/tr>\n<tr>\n<td>1<\/td>\n<td>01.01.2016<\/td>\n<td>31.12.2016<\/td>\n<td>9<\/td>\n<td>5<\/td>\n<td>10<\/td>\n<\/tr>\n<tr>\n<td>1<\/td>\n<td>01.01.2017<\/td>\n<td>31.12.2017<\/td>\n<td>9<\/td>\n<td>6<\/td>\n<td>20<\/td>\n<\/tr>\n<tr>\n<td>1<\/td>\n<td>01.01.2018<\/td>\n<td>31.12.9999<\/td>\n<td>9<\/td>\n<td>6<\/td>\n<td>30<\/td>\n<\/tr>\n<tr>\n<td>2<\/td>\n<td>01.01.2014<\/td>\n<td>31.12.2014<\/td>\n<td>17<\/td>\n<td>NULL<\/td>\n<td>NULL<\/td>\n<\/tr>\n<tr>\n<td>2<\/td>\n<td>01.01.2015<\/td>\n<td>31.12.2015<\/td>\n<td>18<\/td>\n<td>14<\/td>\n<td>NULL<\/td>\n<\/tr>\n<tr>\n<td>2<\/td>\n<td>01.01.2016<\/td>\n<td>31.12.2016<\/td>\n<td>19<\/td>\n<td>15<\/td>\n<td>110<\/td>\n<\/tr>\n<tr>\n<td>2<\/td>\n<td>01.01.2017<\/td>\n<td>31.12.2017<\/td>\n<td>19<\/td>\n<td>16<\/td>\n<td>120<\/td>\n<\/tr>\n<tr>\n<td>2<\/td>\n<td>01.01.2018<\/td>\n<td>31.12.9999<\/td>\n<td>19<\/td>\n<td>16<\/td>\n<td>130<\/td>\n<\/tr>\n<\/table>\n<\/div>\n<p>  <\/p>\n<h3>\u041d\u043e\u0440\u043c\u0430\u043b\u0430\u0439\u0437\u0435\u0440<\/h3>\n<p>  \u0418\u043d\u043e\u0433\u0434\u0430 \u0432\u0441\u0442\u0430\u0451\u0442 \u0437\u0430\u0434\u0430\u0447\u0430 \u043e \u043d\u043e\u0440\u043c\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0434\u0430\u043d\u043d\u044b\u0445, \u043f\u0440\u0438\u0448\u0435\u0434\u0448\u0438\u0445 \u0432 \u0444\u043e\u0440\u043c\u0430\u0442\u0435 \u043f\u043e\u043b\u044f \u0441 \u0440\u0430\u0437\u0434\u0435\u043b\u0438\u0442\u0435\u043b\u044f\u043c\u0438. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0432 \u0432\u0438\u0434\u0435 \u0442\u0430\u043a\u043e\u0439 \u0442\u0430\u0431\u043b\u0438\u0446\u044b:<\/p>\n<pre><code class=\"sql\">create table DENORMALIZED_TABLE (   id  INTEGER,   val VARCHAR2(4000) );  insert into DENORMALIZED_TABLE(id, val) values(1, 'aaa,cccc,bb'); insert into DENORMALIZED_TABLE(id, val) values(2, 'ddd'); insert into DENORMALIZED_TABLE(id, val) values(3, 'fffff,e');<\/code><\/pre>\n<p>  \u0422\u0430\u043a\u043e\u0439 \u0437\u0430\u043f\u0440\u043e\u0441 \u043d\u043e\u0440\u043c\u0430\u043b\u0438\u0437\u0443\u0435\u0442 \u0434\u0430\u043d\u043d\u044b\u0435, \u0440\u0430\u0441\u043a\u043b\u0435\u0438\u0432 \u0441\u043e\u0435\u0434\u0438\u043d\u0451\u043d\u043d\u044b\u0435 \u0437\u0430\u043f\u044f\u0442\u043e\u0439 \u043f\u043e\u043b\u044f \u0432 \u0432\u0438\u0434\u0435 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u0441\u0442\u0440\u043e\u043a:<\/p>\n<pre><code class=\"sql\">select id, regexp_substr(val, '[^,]+', 1, column_value) val, column_value   from denormalized_table,        table(cast(multiset                   (select level                      from dual                    connect by regexp_instr(val, '[^,]+', 1, level) &gt; 0) as                   sys.odcinumberlist))  order by id, column_value;<\/code><\/pre>\n<p>  \u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f \u0442\u0430\u043a\u043e\u0439:  <\/p>\n<div class=\"scrollable-table\">\n<table>\n<tr>\n<td><b>ID<\/b><\/td>\n<td><b>VAL<\/b><\/td>\n<td><b>COLUMN_VALUE<\/b><\/td>\n<\/tr>\n<tr>\n<td>1<\/td>\n<td>aaa<\/td>\n<td>1<\/td>\n<\/tr>\n<tr>\n<td>1<\/td>\n<td>cccc<\/td>\n<td>2<\/td>\n<\/tr>\n<tr>\n<td>1<\/td>\n<td>bb<\/td>\n<td>3<\/td>\n<\/tr>\n<tr>\n<td>2<\/td>\n<td>ddd<\/td>\n<td>1<\/td>\n<\/tr>\n<tr>\n<td>3<\/td>\n<td>fffff<\/td>\n<td>1<\/td>\n<\/tr>\n<tr>\n<td>3<\/td>\n<td>e<\/td>\n<td>2<\/td>\n<\/tr>\n<\/table>\n<\/div>\n<p>  <\/p>\n<h3>\u0412\u0438\u0437\u0443\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0432 \u0444\u043e\u0440\u043c\u0430\u0442\u0435 SVG<\/h3>\n<p>  \u0427\u0430\u0441\u0442\u043e \u0432\u043e\u0437\u043d\u0438\u043a\u0430\u0435\u0442 \u0436\u0435\u043b\u0430\u043d\u0438\u0435 \u043a\u0430\u043a-\u0442\u043e \u0432\u0438\u0437\u0443\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0447\u0438\u0441\u043b\u043e\u0432\u044b\u0435 \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u0438, \u0445\u0440\u0430\u043d\u044f\u0449\u0438\u0435\u0441\u044f \u0432 \u0431\u0430\u0437\u0435 \u0434\u0430\u043d\u043d\u044b\u0445. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043f\u043e\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u0433\u0440\u0430\u0444\u0438\u043a\u0438, \u0433\u0438\u0441\u0442\u043e\u0433\u0440\u0430\u043c\u043c\u044b, \u0434\u0438\u0430\u0433\u0440\u0430\u043c\u043c\u044b. \u0412 \u044d\u0442\u043e\u043c \u043c\u043e\u0433\u0443\u0442 \u043f\u043e\u043c\u043e\u0447\u044c \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0430, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, Oracle BI. \u041d\u043e \u043b\u0438\u0446\u0435\u043d\u0437\u0438\u0438 \u043d\u0430 \u044d\u0442\u0438 \u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0430 \u043c\u043e\u0433\u0443\u0442 \u0441\u0442\u043e\u0438\u0442\u044c \u0434\u0435\u043d\u0435\u0433, \u0430 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u0438\u0445 \u043c\u043e\u0436\u0435\u0442 \u0437\u0430\u043d\u044f\u0442\u044c \u0431\u043e\u043b\u044c\u0448\u0435 \u0432\u0440\u0435\u043c\u0435\u043d\u0438, \u0447\u0435\u043c \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u201c\u043d\u0430 \u043a\u043e\u043b\u0435\u043d\u043a\u0435\u201d SQL-\u0437\u0430\u043f\u0440\u043e\u0441\u0430 \u043a Oracle, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432\u044b\u0434\u0430\u0441\u0442 \u0433\u043e\u0442\u043e\u0432\u0443\u044e \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0443. \u041f\u0440\u043e\u0434\u0435\u043c\u043e\u043d\u0441\u0442\u0440\u0438\u0440\u0443\u0435\u043c \u043d\u0430 \u043f\u0440\u0438\u043c\u0435\u0440\u0435, \u043a\u0430\u043a \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0437\u0430\u043f\u0440\u043e\u0441\u0430 \u0431\u044b\u0441\u0442\u0440\u043e \u043d\u0430\u0440\u0438\u0441\u043e\u0432\u0430\u0442\u044c \u0442\u0430\u043a\u0443\u044e \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0443 \u0432 \u0444\u043e\u0440\u043c\u0430\u0442\u0435 SVG.<br \/>  \u041f\u0440\u0435\u0434\u043f\u043e\u043b\u043e\u0436\u0438\u043c, \u0443 \u043d\u0430\u0441 \u0435\u0441\u0442\u044c \u0442\u0430\u0431\u043b\u0438\u0446\u0430 \u0441 \u0434\u0430\u043d\u043d\u044b\u043c\u0438<\/p>\n<pre><code class=\"sql\">create table graph_data(dt date, val number, radius number);  insert into graph_data(dt, val, radius) values (to_date('01.01.2020','dd.mm.yyyy'), 12, 3); insert into graph_data(dt, val, radius) values (to_date('02.01.2020','dd.mm.yyyy'), 15, 4); insert into graph_data(dt, val, radius) values (to_date('05.01.2020','dd.mm.yyyy'), 17, 5); insert into graph_data(dt, val, radius) values (to_date('06.01.2020','dd.mm.yyyy'), 13, 6); insert into graph_data(dt, val, radius) values (to_date('08.01.2020','dd.mm.yyyy'),  3, 7); insert into graph_data(dt, val, radius) values (to_date('10.01.2020','dd.mm.yyyy'), 20, 8); insert into graph_data(dt, val, radius) values (to_date('11.01.2020','dd.mm.yyyy'), 18, 9);<\/code><\/pre>\n<p>  dt \u2013 \u044d\u0442\u043e \u0434\u0430\u0442\u0430 \u0430\u043a\u0442\u0443\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u0438,<br \/>  val \u2013 \u044d\u0442\u043e \u0447\u0438\u0441\u043b\u043e\u0432\u043e\u0439 \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c, \u0434\u0438\u043d\u0430\u043c\u0438\u043a\u0443 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u043f\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u043c\u044b \u0432\u0438\u0437\u0443\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u0435\u043c,<br \/>  radius \u2013 \u044d\u0442\u043e \u0435\u0449\u0451 \u043e\u0434\u0438\u043d \u0447\u0438\u0441\u043b\u043e\u0432\u043e\u0439 \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u0443\u0434\u0435\u043c \u0440\u0438\u0441\u043e\u0432\u0430\u0442\u044c \u0432 \u0432\u0438\u0434\u0435 \u043a\u0440\u0443\u0436\u043a\u0430 \u0441 \u0442\u0430\u043a\u0438\u043c \u0440\u0430\u0434\u0438\u0443\u0441\u043e\u043c.<br \/>  \u0421\u043a\u0430\u0436\u0435\u043c \u043f\u0430\u0440\u0443 \u0441\u043b\u043e\u0432 \u043e \u0444\u043e\u0440\u043c\u0430\u0442\u0435 SVG. \u042d\u0442\u043e \u0444\u043e\u0440\u043c\u0430\u0442 \u0432\u0435\u043a\u0442\u043e\u0440\u043d\u043e\u0439 \u0433\u0440\u0430\u0444\u0438\u043a\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u043e\u0436\u043d\u043e \u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0432 \u0441\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0430\u0445 \u0438 \u043a\u043e\u043d\u0432\u0435\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0432 \u0434\u0440\u0443\u0433\u0438\u0435 \u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0444\u043e\u0440\u043c\u0430\u0442\u044b. \u0412 \u043d\u0451\u043c, \u0441\u0440\u0435\u0434\u0438 \u043f\u0440\u043e\u0447\u0435\u0433\u043e, \u043c\u043e\u0436\u043d\u043e \u0440\u0438\u0441\u043e\u0432\u0430\u0442\u044c \u043b\u0438\u043d\u0438\u0438, \u043a\u0440\u0443\u0436\u043a\u0438 \u0438 \u043f\u0438\u0441\u0430\u0442\u044c \u0442\u0435\u043a\u0441\u0442:<\/p>\n<pre><code class=\"sql\">&lt;line x1=&quot;94&quot; x2=&quot;94&quot; y1=&quot;15&quot; y2=&quot;675&quot; style=&quot;stroke:rgb(150,255,255); stroke-width:1px&quot;\/&gt; &lt;circle cx=&quot;30&quot; cy=&quot;279&quot; r=&quot;3&quot; style=&quot;fill:rgb(255,0,0)&quot;\/&gt; &lt;text x=&quot;7&quot; y=&quot;688&quot; font-size=&quot;10&quot; fill=&quot;rgb(0,150,255)&quot;&gt;2020-01-01&lt;\/text&gt;<\/code><\/pre>\n<p>  \u041d\u0438\u0436\u0435 SQL-\u0437\u0430\u043f\u0440\u043e\u0441 \u043a Oracle, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0441\u0442\u0440\u043e\u0438\u0442 \u0433\u0440\u0430\u0444\u0438\u043a \u0438\u0437 \u0434\u0430\u043d\u043d\u044b\u0445 \u0432 \u044d\u0442\u043e\u0439 \u0442\u0430\u0431\u043b\u0438\u0446\u0435. \u0417\u0434\u0435\u0441\u044c \u043f\u043e\u0434\u0437\u0430\u043f\u0440\u043e\u0441 const \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0435 \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u043d\u044b\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u2013 \u0440\u0430\u0437\u043c\u0435\u0440\u044b \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0438, \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043c\u0435\u0442\u043e\u043a \u043d\u0430 \u043e\u0441\u044f\u0445 \u0433\u0440\u0430\u0444\u0438\u043a\u0430, \u0446\u0432\u0435\u0442\u0430 \u043b\u0438\u043d\u0438\u0439 \u0438 \u043a\u0440\u0443\u0436\u043e\u0447\u043a\u043e\u0432, \u0440\u0430\u0437\u043c\u0435\u0440\u044b \u0448\u0440\u0438\u0444\u0442\u0430 \u0438 \u0442.\u0434. \u0412 \u043f\u043e\u0434\u0437\u0430\u043f\u0440\u043e\u0441\u0435 gd1 \u043c\u044b \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u043c \u0434\u0430\u043d\u043d\u044b\u0435 \u0438\u0437 \u0442\u0430\u0431\u043b\u0438\u0446\u044b graph_data \u043a \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u0430\u043c x \u0438 y \u043d\u0430 \u0440\u0438\u0441\u0443\u043d\u043a\u0435. \u041f\u043e\u0434\u0437\u0430\u043f\u0440\u043e\u0441 gd2 \u0437\u0430\u043f\u043e\u043c\u0438\u043d\u0430\u0435\u0442 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0438\u0435 \u043f\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0442\u043e\u0447\u043a\u0438, \u0438\u0437 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043d\u0443\u0436\u043d\u043e \u0432\u0435\u0441\u0442\u0438 \u043b\u0438\u043d\u0438\u0438 \u043a \u043d\u043e\u0432\u044b\u043c \u0442\u043e\u0447\u043a\u0430\u043c. \u0411\u043b\u043e\u043a \u2018header\u2019 \u2013 \u044d\u0442\u043e \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0438 \u0441 \u0431\u0435\u043b\u044b\u043c \u0444\u043e\u043d\u043e\u043c. \u0411\u043b\u043e\u043a \u2018vertical lines\u2019 \u0440\u0438\u0441\u0443\u0435\u0442 \u0432\u0435\u0440\u0442\u0438\u043a\u0430\u043b\u044c\u043d\u044b\u0435 \u043b\u0438\u043d\u0438\u0438. \u0411\u043b\u043e\u043a \u2018dates under vertical lines\u2019 \u043f\u043e\u0434\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442 \u0434\u0430\u0442\u044b \u043d\u0430 \u043e\u0441\u0438 x. \u0411\u043b\u043e\u043a \u2018horizontal lines\u2019 \u0440\u0438\u0441\u0443\u0435\u0442 \u0433\u043e\u0440\u0438\u0437\u043e\u043d\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u043b\u0438\u043d\u0438\u0438. \u0411\u043b\u043e\u043a \u2018values near horizontal lines\u2019 \u043f\u043e\u0434\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043d\u0430 \u043e\u0441\u0438 y. \u0411\u043b\u043e\u043a \u2018circles\u2019 \u0440\u0438\u0441\u0443\u0435\u0442 \u043a\u0440\u0443\u0436\u043e\u0447\u043a\u0438 \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u043e\u0433\u043e \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0435 graph_data \u0440\u0430\u0434\u0438\u0443\u0441\u0430. \u0411\u043b\u043e\u043a \u2018graph data\u2019 \u0441\u0442\u0440\u043e\u0438\u0442 \u0438\u0437 \u043b\u0438\u043d\u0438\u0439 \u0433\u0440\u0430\u0444\u0438\u043a \u0434\u0438\u043d\u0430\u043c\u0438\u043a\u0438 \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044f val \u0438\u0437 \u0442\u0430\u0431\u043b\u0438\u0446\u044b graph_data. \u0411\u043b\u043e\u043a \u2018footer\u2019 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442 \u0437\u0430\u043c\u044b\u043a\u0430\u044e\u0449\u0438\u0439 \u0442\u044d\u0433.<\/p>\n<pre><code class=\"sql\">with const as  (select 700 viewbox_width,          700 viewbox_height,          30 left_margin,          30 right_margin,          15 top_margin,          25 bottom_margin,          max(dt) - min(dt) + 1 num_vertical_lines,          11 num_horizontal_lines,          'rgb(150,255,255)' stroke_vertical_lines,          '1px' stroke_width_vertical_lines,          10 font_size_dates,          'rgb(0,150,255)' fill_dates,          23 x_dates_pad,          13 y_dates_pad,          'rgb(150,255,255)' stroke_horizontal_lines,          '1px' stroke_width_horizontal_lines,          10 font_size_values,          'rgb(0,150,255)' fill_values,          4 x_values_pad,          2 y_values_pad,          'rgb(255,0,0)' fill_circles,          'rgb(51,102,0)' stroke_graph,          '1px' stroke_width_graph,          min(dt) min_dt,          max(dt) max_dt,          max(val) max_val     from graph_data), gd1 as  (select graph_data.dt,          const.left_margin +          (const.viewbox_width - const.left_margin - const.right_margin) *          (graph_data.dt - const.min_dt) \/ (const.max_dt - const.min_dt) x,          const.viewbox_height - const.bottom_margin -          (const.viewbox_height - const.top_margin - const.bottom_margin) *          graph_data.val \/ const.max_val y,          graph_data.radius     from graph_data, const), gd2 as  (select dt,          round(nvl(lag(x) over(order by dt), x)) prev_x,          round(x) x,          round(nvl(lag(y) over(order by dt), y)) prev_y,          round(y) y,          radius     from gd1) \/* header *\/ select '&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;' txt   from dual union all select '&lt;svg version=&quot;1.1&quot; width=&quot;' || viewbox_width || '&quot; height=&quot;' ||        viewbox_height || '&quot; viewBox=&quot;0 0 ' || viewbox_width || ' ' ||        viewbox_height ||        '&quot; style=&quot;background:yellow&quot; baseProfile=&quot;full&quot; xmlns=&quot;http:\/\/www.w3.org\/2000\/svg&quot; xmlns:xlink=&quot;http:\/\/www.w3.org\/1999\/xlink&quot; xmlns:ev=&quot;http:\/\/www.w3.org\/2001\/xml-events&quot;&gt;'   from const union all select '&lt;title&gt;Test graph&lt;\/title&gt;'   from dual union all select '&lt;desc&gt;Test graph&lt;\/desc&gt;'   from dual union all select '&lt;rect width=&quot;' || viewbox_width || '&quot; height=&quot;' || viewbox_height ||        '&quot; style=&quot;fill:white&quot; \/&gt;'   from const union all \/* vertical lines *\/ select '&lt;line x1=&quot;' ||        to_char(round(left_margin +                      (viewbox_width - left_margin - right_margin) *                      (level - 1) \/ (num_vertical_lines - 1))) || '&quot; x2=&quot;' ||        to_char(round(left_margin +                      (viewbox_width - left_margin - right_margin) *                      (level - 1) \/ (num_vertical_lines - 1))) || '&quot; y1=&quot;' ||        to_char(round(top_margin)) || '&quot; y2=&quot;' ||        to_char(round(viewbox_height - bottom_margin)) || '&quot; style=&quot;stroke:' ||        const.stroke_vertical_lines || '; stroke-width:' ||        const.stroke_width_vertical_lines || '&quot;\/&gt;'   from const connect by level &lt;= num_vertical_lines union all \/* dates under vertical lines *\/ select '&lt;text x=&quot;' ||        to_char(round(left_margin +                      (viewbox_width - left_margin - right_margin) *                      (level - 1) \/ (num_vertical_lines - 1) - x_dates_pad)) ||        '&quot; y=&quot;' ||        to_char(round(viewbox_height - bottom_margin + y_dates_pad)) ||        '&quot; font-size=&quot;' || font_size_dates || '&quot; fill=&quot;' || fill_dates || '&quot;&gt;' ||        to_char(min_dt + level - 1, 'yyyy-mm-dd') || '&lt;\/text&gt;'   from const connect by level &lt;= num_vertical_lines union all \/* horizontal lines *\/ select '&lt;line x1=&quot;' || to_char(round(left_margin)) || '&quot; x2=&quot;' ||        to_char(round(viewbox_width - right_margin)) || '&quot; y1=&quot;' ||        to_char(round(top_margin +                      (viewbox_height - top_margin - bottom_margin) *                      (level - 1) \/ (num_horizontal_lines - 1))) || '&quot; y2=&quot;' ||        to_char(round(top_margin +                      (viewbox_height - top_margin - bottom_margin) *                      (level - 1) \/ (num_horizontal_lines - 1))) ||        '&quot; style=&quot;stroke:' || const.stroke_horizontal_lines ||        '; stroke-width:' || const.stroke_width_horizontal_lines || '&quot;\/&gt;'   from const connect by level &lt;= num_horizontal_lines union all \/* values near horizontal lines *\/ select '&lt;text text-anchor=&quot;end&quot; x=&quot;' ||        to_char(round(left_margin - x_values_pad)) || '&quot; y=&quot;' ||        to_char(round(viewbox_height - bottom_margin -                      (viewbox_height - top_margin - bottom_margin) *                      (level - 1) \/ (num_horizontal_lines - 1) +                      y_values_pad)) || '&quot; font-size=&quot;' || font_size_values ||        '&quot; fill=&quot;' || fill_values || '&quot;&gt;' ||        to_char(round(max_val \/ (num_horizontal_lines - 1) * (level - 1), 2)) ||        '&lt;\/text&gt;'   from const connect by level &lt;= num_horizontal_lines union all \/* circles *\/ select '&lt;circle cx=&quot;' || to_char(gd2.x) || '&quot; cy=&quot;' || to_char(gd2.y) ||        '&quot; r=&quot;' || gd2.radius || '&quot; style=&quot;fill:' || const.fill_circles ||        '&quot;\/&gt;'   from gd2, const union all \/* graph data *\/ select '&lt;line x1=&quot;' || to_char(gd2.prev_x) || '&quot; x2=&quot;' || to_char(gd2.x) ||        '&quot; y1=&quot;' || to_char(gd2.prev_y) || '&quot; y2=&quot;' || to_char(gd2.y) ||        '&quot; style=&quot;stroke:' || const.stroke_graph || '; stroke-width:' ||        const.stroke_width_graph || '&quot;\/&gt;'   from gd2, const union all \/* footer *\/ select '&lt;\/svg&gt;' from dual;<\/code><\/pre>\n<p>  \u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0437\u0430\u043f\u0440\u043e\u0441\u0430 \u043c\u043e\u0436\u043d\u043e \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0432 \u0444\u0430\u0439\u043b \u0441 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0435\u043c *.svg \u0438 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0432 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0435. \u041f\u0440\u0438 \u0436\u0435\u043b\u0430\u043d\u0438\u0438 \u043c\u043e\u0436\u043d\u043e \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043a\u0430\u043a\u043e\u0439-\u043b\u0438\u0431\u043e \u0438\u0437 \u0443\u0442\u0438\u043b\u0438\u0442 \u043a\u043e\u043d\u0432\u0435\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0435\u0433\u043e \u0432 \u0434\u0440\u0443\u0433\u0438\u0435 \u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0444\u043e\u0440\u043c\u0430\u0442\u044b, \u0440\u0430\u0437\u043c\u0435\u0449\u0430\u0442\u044c \u043d\u0430 \u0432\u0435\u0431-\u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0430\u0445 \u0441\u0432\u043e\u0435\u0433\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0438 \u0442.\u0434.<br \/>  \u041f\u043e\u043b\u0443\u0447\u0438\u043b\u0430\u0441\u044c \u0442\u0430\u043a\u0430\u044f \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0430:<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/ud\/2v\/ry\/ud2vryd5xiexfiqdhse9eu5tlw4.png\"><\/p>\n<h3>\u041f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043f\u043e\u0438\u0441\u043a\u0430 \u043f\u043e \u043c\u0435\u0442\u0430\u0434\u0430\u043d\u043d\u044b\u043c Oracle<\/h3>\n<p>  \u041f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u044c\u0442\u0435 \u0441\u0435\u0431\u0435, \u0447\u0442\u043e \u0441\u0442\u043e\u0438\u0442 \u0437\u0430\u0434\u0430\u0447\u0430 \u043d\u0430\u0439\u0442\u0438 \u0447\u0442\u043e-\u043b\u0438\u0431\u043e \u0432 \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u043c \u043a\u043e\u0434\u0435 \u043d\u0430 Oracle, \u043f\u043e\u0438\u0441\u043a\u0430\u0432 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u0441\u0440\u0430\u0437\u0443 \u043d\u0430 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u0441\u0435\u0440\u0432\u0435\u0440\u0430\u0445. \u0420\u0435\u0447\u044c \u0438\u0434\u0451\u0442 \u043e \u043f\u043e\u0438\u0441\u043a\u0435 \u043f\u043e \u043e\u0431\u044a\u0435\u043a\u0442\u0430\u043c \u0441\u043b\u043e\u0432\u0430\u0440\u044f \u0434\u0430\u043d\u043d\u044b\u0445 Oracle. \u0420\u0430\u0431\u043e\u0447\u0438\u043c \u043c\u0435\u0441\u0442\u043e\u043c \u0434\u043b\u044f \u043f\u043e\u0438\u0441\u043a\u0430 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0432\u0435\u0431-\u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441, \u043a\u0443\u0434\u0430 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c-\u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442 \u0432\u0432\u043e\u0434\u0438\u0442 \u0438\u0441\u043a\u043e\u043c\u0443\u044e \u0441\u0442\u0440\u043e\u043a\u0443 \u0438 \u0432\u044b\u0431\u0438\u0440\u0430\u0435\u0442 \u0433\u0430\u043b\u043e\u0447\u043a\u0430\u043c\u0438, \u043d\u0430 \u043a\u0430\u043a\u0438\u0445 \u0441\u0435\u0440\u0432\u0435\u0440\u0430\u0445 Oracle \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0438\u0442\u044c \u044d\u0442\u043e\u0442 \u043f\u043e\u0438\u0441\u043a.<br \/>  \u0412\u0435\u0431-\u043f\u043e\u0438\u0441\u043a\u043e\u0432\u0438\u043a \u0443\u043c\u0435\u0435\u0442 \u0438\u0441\u043a\u0430\u0442\u044c \u0441\u0442\u0440\u043e\u043a\u0443 \u043f\u043e \u0441\u0435\u0440\u0432\u0435\u0440\u043d\u044b\u043c \u043e\u0431\u044a\u0435\u043a\u0442\u0430\u043c Oracle \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e \u0432 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0445 \u0431\u0430\u0437\u0430\u0445 \u0434\u0430\u043d\u043d\u044b\u0445 \u0431\u0430\u043d\u043a\u0430. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0438\u0441\u043a\u0430\u0442\u044c:  <\/p>\n<ul>\n<li>\u0413\u0434\u0435 \u0432 \u043a\u043e\u0434\u0435 Oracle \u0437\u0430\u0448\u0438\u0442\u0430 \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u0430 61209, \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0449\u0430\u044f \u0441\u043e\u0431\u043e\u0439 \u043d\u043e\u043c\u0435\u0440 \u0441\u0447\u0451\u0442\u0430 \u0432\u0442\u043e\u0440\u043e\u0433\u043e \u043f\u043e\u0440\u044f\u0434\u043a\u0430?<\/li>\n<li>\u0413\u0434\u0435 \u0432 \u043a\u043e\u0434\u0435 \u0438 \u043d\u0430 \u043a\u0430\u043a\u0438\u0445 \u0441\u0435\u0440\u0432\u0435\u0440\u0430\u0445 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0442\u0430\u0431\u043b\u0438\u0446\u0430 accounts (\u0432 \u0442.\u0447. \u0447\u0435\u0440\u0435\u0437 database link)?<\/li>\n<li>\u0421 \u043a\u0430\u043a\u043e\u0433\u043e \u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u0438\u0437 \u043a\u0430\u043a\u043e\u0439 \u0445\u0440\u0430\u043d\u0438\u043c\u043e\u0439 \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u044b \u0438\u043b\u0438 \u0442\u0440\u0438\u0433\u0433\u0435\u0440\u0430 \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442 \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u0430\u044f \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442\u043e\u043c \u043e\u0448\u0438\u0431\u043a\u0430, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, ORA-20001 \u201c\u041a\u0443\u0440\u0441 \u0432\u0430\u043b\u044e\u0442\u044b \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d\u201d?<\/li>\n<li>\u041f\u0440\u043e\u043f\u0438\u0441\u0430\u043d \u043b\u0438 \u043f\u043b\u0430\u043d\u0438\u0440\u0443\u0435\u043c\u044b\u0439 \u043a \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u044e \u0438\u043d\u0434\u0435\u043a\u0441 IX_CLIENTID \u0433\u0434\u0435-\u043b\u0438\u0431\u043e \u044f\u0432\u043d\u044b\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u0432 \u0445\u0438\u043d\u0442\u0430\u0445 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0442\u043e\u0440\u0430 \u0432 SQL-\u0437\u0430\u043f\u0440\u043e\u0441\u0430\u0445?<\/li>\n<li>\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u043b\u0438 \u0433\u0434\u0435-\u043b\u0438\u0431\u043e (\u0432 \u0442.\u0447. \u0447\u0435\u0440\u0435\u0437 database link) \u043f\u043b\u0430\u043d\u0438\u0440\u0443\u0435\u043c\u044b\u0435 \u043a \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u044e \u0442\u0430\u0431\u043b\u0438\u0446\u0430, \u043f\u043e\u043b\u0435, \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u0430, \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0438 \u0442.\u0434.?<\/li>\n<li>\u0413\u0434\u0435 \u0432 \u043a\u043e\u0434\u0435 \u044f\u0432\u043d\u043e \u0437\u0430\u0448\u0438\u0442 \u0447\u0435\u0439-\u0442\u043e \u0435-\u043c\u044d\u0439\u043b \u0438\u043b\u0438 \u043d\u043e\u043c\u0435\u0440 \u0442\u0435\u043b\u0435\u0444\u043e\u043d\u0430? \u0422\u0430\u043a\u0438\u0435 \u0432\u0435\u0449\u0438 \u043b\u0443\u0447\u0448\u0435 \u0432\u044b\u043d\u043e\u0441\u0438\u0442\u044c \u0438\u0437 \u0441\u0435\u0440\u0432\u0435\u0440\u043d\u044b\u0445 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 \u0432 \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u0447\u043d\u044b\u0435 \u0442\u0430\u0431\u043b\u0438\u0446\u044b.<\/li>\n<li>\u0413\u0434\u0435 \u0432 \u043a\u043e\u0434\u0435 \u043d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440\u0430\u0445 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0437\u0430\u0432\u0438\u0441\u044f\u0449\u0438\u0439 \u043e\u0442 \u0432\u0435\u0440\u0441\u0438\u0438 Oracle \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b? \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0444\u0443\u043d\u043a\u0446\u0438\u044f wm_concat \u0432\u044b\u0434\u0430\u0451\u0442 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0439 \u0442\u0438\u043f \u0434\u0430\u043d\u043d\u044b\u0445 \u043d\u0430 \u0432\u044b\u0445\u043e\u0434\u0435 \u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u0432\u0435\u0440\u0441\u0438\u0438 Oracle. \u042d\u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043a\u0440\u0438\u0442\u0438\u0447\u043d\u043e \u0438 \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u044f \u043f\u0440\u0438 \u043c\u0438\u0433\u0440\u0430\u0446\u0438\u0438 \u043d\u0430 \u0431\u043e\u043b\u0435\u0435 \u043d\u043e\u0432\u0443\u044e \u0432\u0435\u0440\u0441\u0438\u044e.<\/li>\n<li>\u0413\u0434\u0435 \u0432 \u043a\u043e\u0434\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u043a\u0430\u043a\u043e\u0439-\u043b\u0438\u0431\u043e \u0440\u0435\u0434\u043a\u0438\u0439 \u043f\u0440\u0438\u0451\u043c, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442\u0443 \u0445\u043e\u0447\u0435\u0442\u0441\u044f \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c, \u043a\u0430\u043a \u043d\u0430 \u043e\u0431\u0440\u0430\u0437\u0435\u0446? \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043f\u043e\u0438\u0441\u043a\u0430\u0442\u044c \u0432 \u043a\u043e\u0434\u0435 Oracle \u043f\u0440\u0438\u043c\u0435\u0440\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u0439 sys_connect_by_path, regexp_instr \u0438\u043b\u0438 \u0445\u0438\u043d\u0442\u0430 push_subq.<\/li>\n<\/ul>\n<p>  \u041f\u043e \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430\u043c \u043f\u043e\u0438\u0441\u043a\u0430 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044e \u0432\u044b\u0434\u0430\u0451\u0442\u0441\u044f \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f, \u043d\u0430 \u043a\u0430\u043a\u043e\u043c \u0441\u0435\u0440\u0432\u0435\u0440\u0435 \u0432 \u043a\u043e\u0434\u0435 \u043a\u0430\u043a\u0438\u0445 \u0444\u0443\u043d\u043a\u0446\u0438\u0439, \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440, \u043f\u0430\u043a\u0435\u0442\u043e\u0432, \u0442\u0440\u0438\u0433\u0433\u0435\u0440\u043e\u0432, \u0432\u044c\u044e\u0448\u0435\u043a \u0438 \u0442.\u043f. \u043d\u0430\u0439\u0434\u0435\u043d\u044b \u0442\u0440\u0435\u0431\u0443\u0435\u043c\u044b\u0435 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b.<br \/>  \u041e\u043f\u0438\u0448\u0435\u043c, \u043a\u0430\u043a \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d \u0442\u0430\u043a\u043e\u0439 \u043f\u043e\u0438\u0441\u043a\u043e\u0432\u0438\u043a.<br \/>  \u041a\u043b\u0438\u0435\u043d\u0442\u0441\u043a\u0430\u044f \u0447\u0430\u0441\u0442\u044c \u043d\u0435 \u0441\u043b\u043e\u0436\u043d\u0430\u044f. \u0412\u0435\u0431-\u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442 \u0432\u0432\u0435\u0434\u0451\u043d\u043d\u0443\u044e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u043c \u043f\u043e\u0438\u0441\u043a\u043e\u0432\u0443\u044e \u0441\u0442\u0440\u043e\u043a\u0443, \u0441\u043f\u0438\u0441\u043e\u043a \u0441\u0435\u0440\u0432\u0435\u0440\u043e\u0432 \u0434\u043b\u044f \u043f\u043e\u0438\u0441\u043a\u0430 \u0438 \u043b\u043e\u0433\u0438\u043d \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f. \u0412\u0435\u0431-\u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0430 \u043f\u0435\u0440\u0435\u0434\u0430\u0451\u0442 \u0438\u0445 \u0432 \u0445\u0440\u0430\u043d\u0438\u043c\u0443\u044e \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u0443 Oracle \u043d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440\u0435-\u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0435. \u0418\u0441\u0442\u043e\u0440\u0438\u044f \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u0439 \u043a \u043f\u043e\u0438\u0441\u043a\u043e\u0432\u0438\u043a\u0443, \u0442.\u0435. \u043a\u0442\u043e \u043a\u0430\u043a\u043e\u0439 \u0437\u0430\u043f\u0440\u043e\u0441 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u043b, \u043d\u0430 \u0432\u0441\u044f\u043a\u0438\u0439 \u0441\u043b\u0443\u0447\u0430\u0439 \u0436\u0443\u0440\u043d\u0430\u043b\u0438\u0440\u0443\u0435\u0442\u0441\u044f.<br \/>  \u041f\u043e\u043b\u0443\u0447\u0438\u0432 \u043f\u043e\u0438\u0441\u043a\u043e\u0432\u044b\u0439 \u0437\u0430\u043f\u0440\u043e\u0441, \u0441\u0435\u0440\u0432\u0435\u0440\u043d\u0430\u044f \u0447\u0430\u0441\u0442\u044c \u043d\u0430 \u043f\u043e\u0438\u0441\u043a\u043e\u0432\u043e\u043c \u0441\u0435\u0440\u0432\u0435\u0440\u0435 Oracle \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442 \u0432 \u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u044b\u0445 \u0434\u0436\u043e\u0431\u0430\u0445 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u043e database links \u043d\u0430 \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u044b\u0445 \u0441\u0435\u0440\u0432\u0435\u0440\u0430\u0445 Oracle \u0441\u043a\u0430\u043d\u0438\u0440\u0443\u044e\u0442 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0441\u043b\u043e\u0432\u0430\u0440\u044f \u0434\u0430\u043d\u043d\u044b\u0445 \u0432 \u043f\u043e\u0438\u0441\u043a\u0430\u0445 \u0438\u0441\u043a\u043e\u043c\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0438: dba_col_comments, dba_jobs, dba_mviews, dba_objects, dba_scheduler_jobs, dba_source, dba_tab_cols, dba_tab_comments, dba_views. \u041a\u0430\u0436\u0434\u0430\u044f \u0438\u0437 \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440, \u0435\u0441\u043b\u0438 \u0447\u0442\u043e-\u0442\u043e \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u043b\u0430, \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442 \u043d\u0430\u0439\u0434\u0435\u043d\u043d\u043e\u0435 \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0443 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u0432 \u043f\u043e\u0438\u0441\u043a\u0430 (\u0441 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u043c ID \u043f\u043e\u0438\u0441\u043a\u043e\u0432\u043e\u0433\u043e \u0437\u0430\u043f\u0440\u043e\u0441\u0430). \u041a\u043e\u0433\u0434\u0430 \u0432\u0441\u0435 \u043f\u043e\u0438\u0441\u043a\u043e\u0432\u044b\u0435 \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u044b \u0437\u0430\u0432\u0435\u0440\u0448\u0438\u043b\u0438 \u0440\u0430\u0431\u043e\u0442\u0443, \u043a\u043b\u0438\u0435\u043d\u0442\u0441\u043a\u0430\u044f \u0447\u0430\u0441\u0442\u044c \u0432\u044b\u0434\u0430\u0451\u0442 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044e \u0432\u0441\u0451, \u0447\u0442\u043e \u0437\u0430\u043f\u0438\u0441\u0430\u043b\u043e\u0441\u044c \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0443 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u0432 \u043f\u043e\u0438\u0441\u043a\u0430 \u0441 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u043c ID \u043f\u043e\u0438\u0441\u043a\u043e\u0432\u043e\u0433\u043e \u0437\u0430\u043f\u0440\u043e\u0441\u0430.<br \/>  \u041d\u043e \u044d\u0442\u043e \u0435\u0449\u0451 \u043d\u0435 \u0432\u0441\u0451. \u041f\u043e\u043c\u0438\u043c\u043e \u043f\u043e\u0438\u0441\u043a\u0430 \u043f\u043e \u0441\u043b\u043e\u0432\u0430\u0440\u044e \u0434\u0430\u043d\u043d\u044b\u0445 Oracle \u0432 \u043e\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0439 \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c \u043f\u0440\u0438\u043a\u0440\u0443\u0442\u0438\u043b\u0438 \u0435\u0449\u0451 \u0438 \u043f\u043e\u0438\u0441\u043a \u043f\u043e \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u044e Informatica PowerCenter. Informatica PowerCenter \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u043e\u043f\u0443\u043b\u044f\u0440\u043d\u044b\u043c ETL-\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u043e\u043c, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0449\u0438\u043c\u0441\u044f \u0432 \u0421\u0431\u0435\u0440\u0431\u0430\u043d\u043a\u0435 \u043f\u0440\u0438 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0435 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u043e\u0439 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u0432 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0430 \u0434\u0430\u043d\u043d\u044b\u0445. Informatica PowerCenter \u0438\u043c\u0435\u0435\u0442 \u043e\u0442\u043a\u0440\u044b\u0442\u0443\u044e \u0445\u043e\u0440\u043e\u0448\u043e \u0437\u0430\u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u0443\u044e \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u044f. \u041f\u043e \u044d\u0442\u043e\u043c\u0443 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u044e \u0435\u0441\u0442\u044c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0438\u0441\u043a\u0430\u0442\u044c \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u0442\u0430\u043a \u0436\u0435, \u043a\u0430\u043a \u0438 \u043f\u043e \u0441\u043b\u043e\u0432\u0430\u0440\u044e \u0434\u0430\u043d\u043d\u044b\u0445 Oracle. \u041a\u0430\u043a\u0438\u0435 \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u0438 \u043f\u043e\u043b\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u0432 \u043a\u043e\u0434\u0435 \u0437\u0430\u0433\u0440\u0443\u0437\u043e\u043a, \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0430\u043d\u043d\u043e\u043c \u043d\u0430 Informatica PowerCenter? \u0427\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0439\u0442\u0438 \u0432 \u0442\u0440\u0430\u043d\u0441\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f\u0445 \u043f\u043e\u0440\u0442\u043e\u0432 \u0438 \u044f\u0432\u043d\u044b\u0445 SQL-\u0437\u0430\u043f\u0440\u043e\u0441\u0430\u0445? \u0412\u0441\u044f \u044d\u0442\u0430 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u0438\u043c\u0435\u0435\u0442\u0441\u044f \u0432 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430\u0445 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u044f \u0438 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043d\u0430\u0439\u0434\u0435\u043d\u0430. \u0414\u043b\u044f \u0437\u043d\u0430\u0442\u043e\u043a\u043e\u0432 PowerCenter \u043d\u0430\u043f\u0438\u0448\u0443, \u0447\u0442\u043e \u043d\u0430\u0448 \u043f\u043e\u0438\u0441\u043a\u043e\u0432\u0438\u043a \u0441\u043a\u0430\u043d\u0438\u0440\u0443\u0435\u0442 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u043c\u0435\u0441\u0442\u0430 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u044f \u0432 \u043f\u043e\u0438\u0441\u043a\u0430\u0445 \u043c\u0430\u043f\u043f\u0438\u043d\u0433\u043e\u0432, \u0441\u0435\u0441\u0441\u0438\u0439 \u0438\u043b\u0438 \u0432\u043e\u0440\u043a\u0444\u043b\u043e\u0432\u043e\u0432, \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0438\u0445 \u0432 \u0441\u0435\u0431\u0435 \u0433\u0434\u0435-\u0442\u043e \u0438\u0441\u043a\u043e\u043c\u0443\u044e \u0441\u0442\u0440\u043e\u043a\u0443: sql override, mapplet attributes, ports, source definitions in mappings, source definitions, target definitions in mappings, target_definitions, mappings, mapplets, workflows, worklets, sessions, commands, expression ports, session instances, source definition fields, target definition fields, email tasks.<\/p>\n<blockquote><p>\u0410\u0432\u0442\u043e\u0440: \u041c\u0438\u0445\u0430\u0438\u043b \u0413\u0440\u0438\u0447\u0438\u043a, \u044d\u043a\u0441\u043f\u0435\u0440\u0442 \u043f\u0440\u043e\u0444\u0435\u0441\u0441\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0441\u043e\u043e\u0431\u0449\u0435\u0441\u0442\u0432\u0430 \u0421\u0431\u0435\u0440\u0431\u0430\u043d\u043a\u0430 SberProfi DWH\/BigData.<\/p>\n<p>  \u041f\u0440\u043e\u0444\u0435\u0441\u0441\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u0441\u0442\u0432\u043e SberProfi DWH\/BigData \u043e\u0442\u0432\u0435\u0447\u0430\u0435\u0442 \u0437\u0430 \u0440\u0430\u0437\u0432\u0438\u0442\u0438\u0435 \u043a\u043e\u043c\u043f\u0435\u0442\u0435\u043d\u0446\u0438\u0439 \u0432 \u0442\u0430\u043a\u0438\u0445 \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f\u0445, \u043a\u0430\u043a \u044d\u043a\u043e\u0441\u0438\u0441\u0442\u0435\u043c\u0430 Hadoop, Teradata, Oracle DB, GreenPlum, \u0430 \u0442\u0430\u043a\u0436\u0435 BI \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0430\u0445 Qlik, SAP BO, Tableau \u0438 \u0434\u0440.<\/p><\/blockquote>\n<\/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\/company\/sberbank\/blog\/519358\/\"> https:\/\/habr.com\/ru\/company\/sberbank\/blog\/519358\/<\/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\/company\/sberbank\/blog\/519358\/\">\u0412 \u0421\u0431\u0435\u0440\u0435 \u0435\u0441\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u0430\u043a\u0442\u0438\u043a Oracle, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u043e\u0433\u0443\u0442 \u043e\u043a\u0430\u0437\u0430\u0442\u044c\u0441\u044f \u0432\u0430\u043c \u043f\u043e\u043b\u0435\u0437\u043d\u044b. \u0414\u0443\u043c\u0430\u044e, \u0447\u0430\u0441\u0442\u044c \u0432\u0430\u043c \u0437\u043d\u0430\u043a\u043e\u043c\u0430, \u043d\u043e \u043c\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u0434\u043b\u044f \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e ETL-\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0430, \u043d\u043e \u0438 \u0445\u0440\u0430\u043d\u0438\u043c\u044b\u0435 \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u044b Oracle. \u041d\u0430 Oracle PL\/SQL \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u044b \u043d\u0430\u0438\u0431\u043e\u043b\u0435\u0435 \u0441\u043b\u043e\u0436\u043d\u044b\u0435 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u044b \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 \u0432 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0430, \u0433\u0434\u0435 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u00ab\u043f\u0440\u043e\u0447\u0443\u0432\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u043a\u0430\u0436\u0434\u044b\u0439 \u0431\u0430\u0439\u0442\u00bb.<\/p>\n<ul>\n<li>\u0410\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u0436\u0443\u0440\u043d\u0430\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0439<\/li>\n<li>\u041a\u0430\u043a \u0431\u044b\u0442\u044c, \u0435\u0441\u043b\u0438 \u0445\u043e\u0447\u0435\u0442\u0441\u044f \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0432\u044c\u044e\u0448\u043a\u0443 \u0441 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430\u043c\u0438<\/li>\n<li>\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u0438 \u0432 \u0437\u0430\u043f\u0440\u043e\u0441\u0430\u0445<\/li>\n<li>\u041a\u0430\u043a \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c \u043f\u043b\u0430\u043d \u0437\u0430\u043f\u0440\u043e\u0441\u0430 \u043f\u0440\u0438 \u0432\u0441\u0442\u0430\u0432\u043a\u0435 \u0434\u0430\u043d\u043d\u044b\u0445 \u0447\u0435\u0440\u0435\u0437 database link<\/li>\n<li>\u0417\u0430\u043f\u0443\u0441\u043a \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440 \u0432 \u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u044b\u0445 \u0441\u0435\u0441\u0441\u0438\u044f\u0445<\/li>\n<li>\u041f\u0440\u043e\u0442\u044f\u0433\u0438\u0432\u0430\u043d\u0438\u0435 \u043e\u0441\u0442\u0430\u0442\u043a\u043e\u0432<\/li>\n<li>\u041e\u0431\u044a\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0435 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u0438\u0441\u0442\u043e\u0440\u0438\u0439 \u0432 \u043e\u0434\u043d\u0443<\/li>\n<li>\u041d\u043e\u0440\u043c\u0430\u043b\u0430\u0439\u0437\u0435\u0440<\/li>\n<li>\u0412\u0438\u0437\u0443\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0432 \u0444\u043e\u0440\u043c\u0430\u0442\u0435 SVG<\/li>\n<li>\u041f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043f\u043e\u0438\u0441\u043a\u0430 \u043f\u043e \u043c\u0435\u0442\u0430\u0434\u0430\u043d\u043d\u044b\u043c Oracle<\/li>\n<\/ul>\n<p>  <\/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-310791","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/310791","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=310791"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/310791\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=310791"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=310791"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=310791"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}