{"id":277420,"date":"2016-04-01T01:47:02","date_gmt":"2016-03-31T21:47:02","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=277420"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=277420","title":{"rendered":"\u0418\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u043e\u0432 ( DDL ) \u043d\u0430 \u043b\u0435\u0442\u0443"},"content":{"rendered":"<p>       \u041f\u0440\u0438 \u0441\u043e\u043f\u0440\u043e\u0432\u043e\u0436\u0434\u0435\u043d\u0438\u0438 ERP \u0441\u0438\u0441\u0442\u0435\u043c \u0438\u043d\u043e\u0433\u0434\u0430 \u0432\u043e\u0437\u043d\u0438\u043a\u0430\u0435\u0442 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u044c \u043c\u0430\u0441\u0441\u043e\u0432\u043e\u0433\u043e \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u043a\u043e\u0434\u0430 \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440, \u0444\u0443\u043d\u043a\u0446\u0438\u0439, \u0442\u0440\u0438\u0433\u0433\u0435\u0440\u043e\u0432 \u0438\u043b\u0438 \u043f\u0430\u043a\u0435\u0442\u043e\u0432. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u0434\u043b\u044f \u0437\u0430\u043c\u0435\u043d\u044b \u0432\u044b\u0437\u043e\u0432\u0430 \u043e\u0434\u043d\u043e\u0439 \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u044b \u043d\u0430 \u0432\u044b\u0437\u043e\u0432 \u0434\u0440\u0443\u0433\u043e\u0439.<br \/>  \u0415\u0441\u043b\u0438 \u043d\u0430\u0434\u043e \u043f\u043e\u043c\u0435\u043d\u044f\u0442\u044c \u043f\u0430\u0440\u0443 \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440, \u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u044d\u0442\u043e \u0432 \u0440\u0443\u0447\u043d\u0443\u044e, \u043d\u043e \u043a\u043e\u0433\u0434\u0430 \u043d\u0430\u0434\u043e \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0441\u043e\u0442\u0435\u043d \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432, \u0442\u043e \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442\u044c\u0441\u044f \u0437\u0430\u0434\u0443\u043c\u0430\u0442\u044c\u0441\u044f \u043e\u0431 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0430\u0446\u0438\u0438 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430. \u0412 \u0441\u0442\u0430\u0442\u044c\u0435 \u043e\u043f\u0438\u0441\u0430\u043d \u043f\u0440\u0438\u043c\u0435\u0440 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0430\u0446\u0438\u0438 \u0434\u043b\u044f \u0421\u0423\u0411\u0414 <b>ORACLE 11g<\/b>.<br \/>  <a name=\"habracut\"><\/a>  <\/p>\n<h4>\u0422\u0435\u043e\u0440\u0438\u044f<\/h4>\n<p>  DDL \u0441\u043a\u0440\u0438\u043f\u0442\u044b \u0432\u0441\u0435\u0445 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 ( ORACLE ) \u0445\u0440\u0430\u043d\u0438\u0442\u044c\u0441\u044f \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0435 <b>SYS.SOURCE$<\/b>, \u043a\u0430\u0437\u0430\u043b\u043e\u0441\u044c \u0431\u044b \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c:  <\/p>\n<pre><code class=\"sql\">update source$ set source = replace(source,'old_name','new_name') where source like '%old_name%' <\/code><\/pre>\n<p>  , \u043d\u043e \u043d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435 \u043f\u043e\u043c\u0435\u043d\u044f\u0442\u044c \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u0438 \u043d\u0435 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e. \u0418\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u0438 \u043d\u0430\u0434\u043e \u0441\u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c.<br \/>  \u041a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e <b>EXECUTE IMMEDIATE<\/b>.<br \/>  \u0414\u043e \u0432\u0435\u0440\u0441\u0438\u0438 11, \u0434\u043b\u044f \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 \u0442\u0435\u043a\u0441\u0442 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043d\u0435\u043b\u044c\u0437\u044f \u0431\u044b\u043b\u043e \u0437\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0432 <b>VARCHAR2<\/b>(32767), \u043d\u0430\u0434\u043e \u0431\u044b\u043b\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b \u043f\u0430\u043a\u0435\u0442\u0430 <b>DBMS_SQL<\/b>:  <\/p>\n<pre><code class=\"sql\">-- To process a SQL statement, you must have an open cursor nCursorId := DBMS_SQL.OPEN_CURSOR ;  -- Every SQL statement must be parsed DBMS_SQL.PARSE (nCursorId , SqlStatement_CLOB, DBMS_SQL.NATIVE); -- DDL statements are run on the parse, which performs the implied commit. <\/code><\/pre>\n<p>  \u041f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u0432 \u0442\u043e\u043c \u043a\u0430\u043a \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a \u043e\u0431\u044a\u0435\u043a\u0442\u0430.<br \/>  \u041c\u043e\u0436\u043d\u043e \u043a\u0443\u0440\u0441\u043e\u0440\u043e\u043c \u043f\u0440\u043e\u0439\u0442\u0438\u0441\u044c \u043f\u043e \u0437\u0430\u043f\u0438\u0441\u044f\u043c \u0442\u0430\u0431\u043b\u0438\u0446\u044b <b>SYS.SOURCE$<\/b> \u2014 \u0441\u043a\u043b\u0435\u0438\u0442\u044c \u043f\u043e\u043b\u044f <b>SOURCE<\/b> \u043a\u0430\u0436\u0434\u043e\u0439 \u0437\u0430\u043f\u0438\u0441\u0438 \u0447\u0435\u0440\u0435\u0437 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 &quot;<b>||<\/b>&quot; \u0438 \u0441\u0438\u043c\u0432\u043e\u043b \u043a\u043e\u043d\u0446\u0430 \u0441\u0442\u0440\u043e\u043a\u0438. \u041d\u043e \u0435\u0441\u0442\u044c \u0441\u043f\u043e\u0441\u043e\u0431 \u043f\u0440\u043e\u0449\u0435, \u0447\u0435\u0440\u0435\u0437 \u043f\u0430\u043a\u0435\u0442 <b>DBMS_METADATA<\/b>, \u0443 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u0435\u0441\u0442\u044c \u0444\u0443\u043d\u043a\u0446\u0438\u044f <b>GET_DDL<\/b>.<br \/>  \u0423\u0434\u043e\u0431\u0441\u0442\u0432\u043e \u0444\u0443\u043d\u043a\u0446\u0438\u0438 DBMS_METADATA.GET_DDL \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0432 \u0442\u043e\u043c \u0447\u0442\u043e \u043e\u043d\u0430 \u0432\u044b\u0434\u0430\u0451\u0442 \u0432\u0435\u0441\u044c \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u0442\u0435\u043a\u0441\u0442 \u043e\u0431\u044a\u0435\u043a\u0442\u0430, \u043d\u043e \u0435\u0449\u0451 \u0438 \u0432 \u0442\u043e\u043c \u0447\u0442\u043e \u043f\u043e\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0438\u043c\u044f \u0441\u0445\u0435\u043c\u044b \u0438 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442 &quot;<b>CREATE OR REPLACE<\/b>&quot;.<br \/>  \u041c\u0438\u043d\u0443\u0441 \u0432 \u0442\u043e\u043c \u0447\u0442\u043e \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 \u0441\u0442\u0440\u043e\u043a\u043e\u0432\u044b\u0435 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u044b \u0432 \u0442\u043e\u043c \u0432\u0440\u0435\u043c\u044f \u043a\u0430\u043a \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0435 <b>SYS.OBJ$<\/b> \u0445\u0440\u0430\u043d\u044f\u0442\u0441\u044f \u0447\u0438\u0441\u043b\u0430.<\/p>\n<h4>\u0410\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u043e\u0432 \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440.<\/h4>\n<p>  <\/p>\n<ol>\n<li>\u041f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u0438 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e DBMS_METADATA.GET_DDL;<\/li>\n<li>\u0418\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u0442\u0435\u043a\u0441\u0442 \u043d\u0443\u0436\u043d\u044b\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c ( \u0432 \u043f\u0440\u043e\u0441\u0442\u0435\u0439\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0447\u0435\u0440\u0435\u0437 REPLACE );<\/li>\n<li>\u0421\u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u0443 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e EXECUTE IMMEDIATE;<\/li>\n<li>\u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0438 \u043f\u043e\u043b\u0443\u0447\u0430\u0442\u044c \u0443\u0434\u043e\u0432\u043e\u043b\u044c\u0441\u0442\u0432\u0438\u0435;<\/li>\n<\/ol>\n<h4>\u041f\u0440\u0430\u043a\u0442\u0438\u043a\u0430<\/h4>\n<p>  \u041d\u0430 \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0435 \u0432\u0441\u0451 \u043d\u0435 \u0442\u0430\u043a \u043f\u0440\u043e\u0441\u0442\u043e.<br \/>  \u041a\u043e\u0433\u0434\u0430 \u044f \u0437\u0430\u043b\u043e\u0433\u0438\u043d\u0438\u043b\u0441\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u043c <b>SYS<\/b>, \u0443 \u043c\u0435\u043d\u044f \u043d\u0435 \u043f\u043e\u043b\u0443\u0447\u0430\u043b\u043e\u0441\u044c \u0441\u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u044b \u0434\u0440\u0443\u0433\u043e\u0439 \u0441\u0445\u0435\u043c\u044b (<b>PROD<\/b>), \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0443 \u0442\u0430\u0431\u043b\u0438\u0446 \u043d\u0435 \u0431\u044b\u043b\u0438 \u043f\u043e\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u044b \u0438\u043c\u0435\u043d\u0430 \u0441\u0445\u0435\u043c, \u0442\u043e \u0435\u0441\u0442\u044c \u0431\u044b\u043b\u043e:  <\/p>\n<pre><code class=\"sql\">SELECT * FROM TABLE_NAME <\/code><\/pre>\n<p>, \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 \u043f\u043e\u0447\u0435\u043c\u0443 \u0442\u043e \u043e\u0436\u0438\u0434\u0430\u043b <\/p>\n<pre><code class=\"sql\">SELECT * FROM PROD.TABLE_NAME <\/code><\/pre>\n<p>, \u0445\u043e\u0442\u044f \u0432 \u043d\u0430\u0447\u0430\u043b\u0435 DDL \u0441\u043a\u0440\u0438\u043f\u0442\u0430 \u0431\u044b\u043b\u043e \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043e <\/p>\n<pre><code class=\"sql\">CREATE OR REPLACE PROCEDURE PROD.PROCEDURE_NAME <\/code><\/pre>\n<p> \u0438 \u043a\u043e\u0433\u0434\u0430 \u0432 &quot;<b>PL\/SQL Developer<\/b>&quot; \u0438\u043b\u0438 &quot;<b>TOAD<\/b>&quot; \u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u0443\u0435\u0448\u044c \u043e\u0431\u044a\u0435\u043a\u0442\u044b \u0434\u0440\u0443\u0433\u043e\u0439 \u0441\u0445\u0435\u043c\u044b ( \u043d\u0435 \u0442\u043e\u0439 \u043f\u043e\u0434 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0437\u0430\u043b\u043e\u0433\u0438\u043d\u0438\u043b\u0441\u044f ) \u0432\u0441\u0451 \u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0431\u0435\u0437 \u043e\u0448\u0438\u0431\u043e\u043a.<br \/>  \u0412\u0438\u0434\u0438\u043c\u043e \u0435\u0441\u0442\u044c \u043d\u044e\u0430\u043d\u0441 \u043e \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u044f \u043d\u0435 \u0434\u043e\u0433\u0430\u0434\u044b\u0432\u0430\u044e\u0441\u044c, \u0438\u043b\u0438 \u0440\u0443\u043a\u0438 \u0443 \u043c\u0435\u043d\u044f \u043d\u0435\u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043f\u0440\u044f\u043c\u044b\u0435.<br \/>  \u041a\u043e\u0433\u0434\u0430 \u044f \u0437\u0430\u043b\u043e\u0433\u0438\u043d\u0438\u043b\u0441\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u043c <b>PROD<\/b>, \u0443 \u043c\u0435\u043d\u044f \u0431\u044b\u043b\u0430 \u043e\u0448\u0438\u0431\u043a\u0430 \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043a \u0442\u0430\u0431\u043b\u0438\u0446\u0435 <b>SYS.SOURCE$<\/b>, \u044d\u0442\u043e \u0432\u044b\u043b\u0435\u0447\u0438\u043b\u043e\u0441\u044c \u043f\u0440\u0438\u0432\u0438\u043b\u0435\u0433\u0438\u0435\u0439 <\/p>\n<pre><code class=\"sql\">GRANT SELECT ANY DICTIONARY TO PROD; <\/code><\/pre>\n<p> \u0414\u043b\u044f \u043e\u0442\u043b\u0430\u0434\u043a\u0438 \u043d\u0443\u0436\u043d\u0430 \u043f\u0440\u0438\u0432\u0438\u043b\u0435\u0433\u0438\u044f <\/p>\n<pre><code class=\"sql\">GRANT DEBUG ANY PROCEDURE TO PROD; <\/code><\/pre>\n<h4>\u0410\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0430\u0446\u0438\u044f, \u0441\u043a\u0440\u0438\u043f\u0442\u044b, \u0438 \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u044b<\/h4>\n<h5>\u0410\u043d\u0430\u043b\u0438\u0437 \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445<\/h5>\n<p>  \u0423 \u043c\u0435\u043d\u044f \u0441\u0442\u043e\u044f\u043b\u0430 \u0437\u0430\u0434\u0430\u0447\u0430 \u0437\u0430\u043c\u0435\u043d\u0438\u0442\u044c \u0432\u044b\u0437\u043e\u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 &quot;<b>GET_ACTUAL_DATE<\/b>&quot; \u043d\u0430 \u0432\u044b\u0437\u043e\u0432 &quot;<b>SYSDATE<\/b>&quot;. \u041c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u043a\u043e\u043d\u0435\u0447\u043d\u043e \u043a\u043e\u0434 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 GET_ACTUAL_DATE \u0437\u0430\u043c\u0435\u043d\u0438\u0442\u044c \u043d\u0430 \u00abRETURN SYSDATE\u00bb, \u043d\u043e \u0442\u043e\u0433\u0434\u0430 \u043c\u043d\u0435 \u043d\u0435 \u043e \u0447\u0451\u043c \u0431\u044b\u043b\u043e \u0431\u044b \u043f\u0438\u0441\u0430\u0442\u044c \u0432 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 :), \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u0440\u0438\u0441\u0442\u0443\u043f\u0438\u043c.<br \/>  \u041f\u0435\u0440\u0432\u044b\u043c \u0434\u0435\u043b\u043e\u043c \u043d\u0430\u0434\u043e \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0433\u0434\u0435 \u0432\u0441\u0442\u0440\u0435\u0447\u0430\u0435\u0442\u0441\u044f \u043f\u043e\u0434\u0441\u0442\u0440\u043e\u043a\u0430 \u00abGET_ACTUAL_DATE\u00bb:  <\/p>\n<pre><code class=\"sql\">  SELECT       SC.SOURCE   FROM     SYS.USER$ UR     JOIN SYS.OBJ$ OB ON     UR.USER# = OB.OWNER#     JOIN SYS.SOURCE$ SC ON          SC.OBJ# = OB.OBJ#   WHERE     UR.USER# = 50 \/* schema id from table USER$ for 'PROD'*\/     AND UPPER(SC.SOURCE) LIKE '%' || 'GET_ACTUAL_DATE' || '%'   ORDER BY       SC.OBJ#     , SC.LINE   ; <\/code><\/pre>\n<p>  \u041f\u043e\u043b\u0443\u0447\u0438\u043b\u043e\u0441\u044c 1185 \u0441\u0442\u0440\u043e\u043a \u0432 590 \u043e\u0431\u044a\u0435\u043a\u0442\u0430\u0445.<br \/>  \u042f \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u043b \u0432\u044b\u0431\u043e\u0440\u043a\u0443 \u0438 \u0441\u0434\u0435\u043b\u0430\u043b \u0432\u044b\u0432\u043e\u0434, \u0447\u0442\u043e \u0434\u043b\u044f \u0442\u043e\u0433\u043e \u0447\u0442\u043e\u0431\u044b \u0437\u0430\u043c\u0435\u043d\u0438\u0442\u044c \u0438\u043c\u0435\u043d\u043d\u043e \u0432\u044b\u0437\u043e\u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u0438, \u0430 \u043d\u0435 \u0447\u0430\u0441\u0442\u044c \u0438\u043c\u0435\u043d\u0438 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 \u0438\u043b\u0438 \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u044b, \u043d\u0430\u0434\u043e \u0438\u0441\u043a\u0430\u0442\u044c <\/p>\n<pre><code class=\"sql\">'(' || 'GET_ACTUAL_DATE' <\/code><\/pre>\n<p>, \u0442\u0430\u043a\u0436\u0435 \u043f\u0435\u0440\u0435\u0434 \u0432\u044b\u0437\u043e\u0432\u043e\u043c \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0431\u044b\u043b\u0438 \u0434\u0440\u0443\u0433\u0438\u0435 \u0441\u0438\u043c\u0432\u043e\u043b\u044b:   <\/p>\n<ul>\n<li>&#8216;=&#8217; ;<\/li>\n<li>&#8216; &#8216;(\u043f\u0440\u043e\u0431\u0435\u043b);<\/li>\n<li>&#8216;,'(\u0437\u0430\u043f\u044f\u0442\u0430\u044f); <\/li>\n<li>&#187;&#187; (\u043a\u0430\u0432\u044b\u0447\u043a\u0438);<\/li>\n<\/ul>\n<p>  \u0418\u0441\u0445\u043e\u0434\u044f \u0438\u0437 \u044d\u0442\u043e\u0433\u043e \u044f \u043d\u0430\u043f\u0438\u0441\u0430\u043b \u0437\u0430\u043f\u0440\u043e\u0441 \u0434\u043b\u044f \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 \u0448\u0430\u0431\u043b\u043e\u043d\u0430 \u043f\u043e\u0438\u0441\u043a\u0430:  <\/p>\n<pre><code class=\"sql\">WITH    PATTERNS AS   (     SELECT         'GET_ACTUAL_DATE' AS ERST \/* \u0438\u0437\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e \u0431\u044b\u043b\u043e *\/       , '(' AS OPENING \/* \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u044e\u0449\u0438\u0439 *\/       , '' AS CLOSING \/* \u0437\u0430\u043a\u0440\u044b\u0432\u0430\u044e\u0449\u0438\u0439 *\/       , 'SYSDATE' AS BECOME \/* \u0432 \u0438\u0442\u043e\u0433\u0435 \u0441\u0442\u0430\u043d\u0435\u0442 *\/     FROM       DUAL     UNION ALL     SELECT         'GET_ACTUAL_DATE'       , ' '       , ''       , 'SYSDATE'     FROM       DUAL     UNION ALL     SELECT         'GET_ACTUAL_DATE'       , '='       , ''       , 'SYSDATE'     FROM       DUAL     UNION ALL     SELECT         'GET_ACTUAL_DATE'       , ','       , ''       , 'SYSDATE'     FROM       DUAL     UNION ALL     SELECT         'GET_ACTUAL_DATE'       , ''''       , ''       , 'SYSDATE'     FROM       DUAL   ) SELECT     PT.OPENING || PT.ERST || PT.CLOSING \/* \u0431\u044b\u043b\u043e *\/   , PT.OPENING || PT.BECOME || PT.CLOSING \/* \u0441\u0442\u0430\u043b\u043e *\/ FROM   PATTERNS PT ; <\/code><\/pre>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0447\u0442\u043e \u0436\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c\u0441\u044f \u0435\u0441\u043b\u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u043f\u043e\u0434\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 ( REPLACE ):  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0437\u0430\u043f\u0440\u043e\u0441<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"sql\">WITH   PATTERNS AS   (     SELECT         'GET_ACTUAL_DATE' AS ERST       , '(' AS OPENING       , '' AS CLOSING       , 'SYSDATE' AS BECOME          FROM       DUAL     UNION ALL     SELECT         'GET_ACTUAL_DATE'       , ' '       , ''       , 'SYSDATE'     FROM       DUAL     UNION ALL     SELECT         'GET_ACTUAL_DATE'       , '='       , ''       , 'SYSDATE'     FROM       DUAL     UNION ALL     SELECT         'GET_ACTUAL_DATE'       , ','       , ''       , 'SYSDATE'     FROM       DUAL     UNION ALL     SELECT         'GET_ACTUAL_DATE'       , ''''       , ''       , 'SYSDATE'     FROM       DUAL   )   SELECT       SC.OBJ# AS OBJ#     , SC.LINE AS LINE     , SC.SOURCE AS SOURCE            , REPLACE           (               UPPER(SC.SOURCE)             , PT.OPENING || PT.ERST || PT.CLOSING             , PT.OPENING || PT.BECOME || PT.CLOSING           ) AS COMPLETE   FROM     SYS.USER$ UR     JOIN SYS.OBJ$ OB ON     UR.USER# = OB.OWNER#     JOIN SYS.SOURCE$ SC ON          SC.OBJ# = OB.OBJ#     , PATTERNS PT   WHERE     UR.USER# = 50 \/* USER PROD *\/     AND     UPPER(SC.SOURCE) LIKE '%' || PT.ERST || '%'     AND REPLACE           (               UPPER(SC.SOURCE)             , PT.OPENING || PT.ERST || PT.CLOSING             , PT.OPENING || PT.BECOME || PT.CLOSING           )         &lt;&gt; UPPER(SC.SOURCE)   ORDER BY     OBJ#   , LINE ; <\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<p>  \u041f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u043b \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442, \u043e\u0434\u043d\u0430 \u0441\u0442\u0440\u043e\u043a\u0430 \u0431\u044b\u043b\u0430 \u043e\u0431\u044a\u044f\u0432\u043b\u0435\u043d\u0438\u0435\u043c \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u00abGET_ACTUAL_DATE \u00bb, \u0435\u0451 \u043f\u0435\u0440\u0435\u0434\u0435\u043b\u044b\u0432\u0430\u0442\u044c \u0432 \u043e\u0431\u044a\u044f\u0432\u043b\u0435\u043d\u0438\u0435 \u00abSYSDATE\u00bb \u043d\u0435 \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043b\u043e\u0441\u044c.<br \/>  \u0414\u0432\u0435 \u0434\u0440\u0443\u0433\u0438\u0435 \u0441\u0442\u0440\u043e\u043a\u0438 \u0431\u044b\u043b\u0438 \u043a\u043e\u043c\u0435\u043d\u0442\u0430\u043c\u0438, \u0438\u0445 \u0442\u043e\u0436\u0435 \u043d\u0430\u0434\u043e \u0431\u044b\u043b\u043e \u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0432 \u043f\u043e\u043a\u043e\u0435. \u0414\u043e\u043f\u0438\u0441\u0430\u043b \u0441\u043a\u0440\u0438\u043f\u0442 \u0447\u0442\u043e \u0431\u044b \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0438\u0441\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0437\u0430\u0434\u0430\u043d\u043d\u044b\u0435 \u0441\u0442\u0440\u043e\u043a\u0438 \u0438 \u043e\u0431\u044a\u0435\u043a\u0442\u044b:  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0437\u0430\u043f\u0440\u043e\u0441<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"sql\">WITH   EXCLUDE_LINE AS \/* \u0438\u0441\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0441\u0442\u0440\u043e\u043a\u0438 *\/   (     SELECT 105857 AS OBJ# , 321 AS LINE FROM DUAL UNION     SELECT 82036 , 50 FROM DUAL   )   , EXCLUDE_OBJ AS \/* \u0438\u0441\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u043e\u0431\u044a\u0435\u043a\u0442\u044b *\/   (     SELECT 121939 AS OBJ# FROM DUAL   )   , PATTERNS AS   (     SELECT         'GET_ACTUAL_DATE' AS ERST       , '(' AS OPENING       , '' AS CLOSING       , 'SYSDATE' AS BECOME          FROM       DUAL     UNION ALL     SELECT         'GET_ACTUAL_DATE'       , ' '       , ''       , 'SYSDATE'     FROM       DUAL     UNION ALL     SELECT         'GET_ACTUAL_DATE'       , '='       , ''       , 'SYSDATE'     FROM       DUAL     UNION ALL     SELECT         'GET_ACTUAL_DATE'       , ','       , ''       , 'SYSDATE'     FROM       DUAL     UNION ALL     SELECT         'GET_ACTUAL_DATE'       , ''''       , ''       , 'SYSDATE'     FROM       DUAL   )   SELECT       SC.OBJ# AS OBJ#     , SC.LINE AS LINE     , SC.SOURCE AS SOURCE            , REPLACE           (               UPPER(SC.SOURCE)             , PT.OPENING || PT.ERST || PT.CLOSING             , PT.OPENING || PT.BECOME || PT.CLOSING           ) AS COMPLETE   FROM     SYS.USER$ UR     JOIN SYS.OBJ$ OB ON     UR.USER# = OB.OWNER#     JOIN SYS.SOURCE$ SC ON          SC.OBJ# = OB.OBJ#     , PATTERNS PT   WHERE     UR.USER# = 50     AND     UPPER(SC.SOURCE) LIKE '%' || PT.ERST || '%'     AND (SC.OBJ# , SC.LINE ) NOT IN (SELECT EL.OBJ# , EL.LINE FROM EXCLUDE_LINE EL )     AND SC.OBJ# NOT IN (SELECT EO.OBJ# FROM EXCLUDE_OBJ EO )        AND REPLACE           (               UPPER(SC.SOURCE)             , PT.OPENING || PT.ERST || PT.CLOSING             , PT.OPENING || PT.BECOME || PT.CLOSING           )         &lt;&gt; UPPER(SC.SOURCE)   ORDER BY     OBJ#   , LINE ; <\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<p>  \u0412\u044b\u043f\u043e\u043b\u043d\u0438\u043b \u0437\u0430\u043f\u0440\u043e\u0441, \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u043b \u0432\u044b\u0431\u043e\u0440\u043a\u0443 \u2014 \u043e\u043a.<\/p>\n<h5>\u0421\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435 \u043f\u043e\u0434\u0441\u0442\u0430\u043d\u043e\u0432\u043e\u043a<\/h5>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u00ab\u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f\u00bb \u043f\u043e\u0434\u0441\u0442\u0430\u043d\u043e\u0432\u043e\u043a \u043d\u0430\u0434\u043e \u0431\u044b\u043b\u043e \u043a\u0443\u0434\u0430 \u0442\u043e \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c. \u0414\u043e\u0431\u0430\u0432\u0438\u043c \u0442\u0430\u0431\u043b\u0438\u0446\u0443:  <\/p>\n<pre><code class=\"sql\">CREATE TABLE SWAP_SOURCE_CODE (   BATCH  NUMBER, \/* \u043d\u043e\u043c\u0435\u0440 \u043f\u0440\u043e\u0433\u043e\u043d\u0430 \/ \u043d\u043e\u043c\u0435\u0440 \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 \u0434\u043b\u044f \u043f\u043e\u0434\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 *\/   OBJ#   NUMBER, \/* \u043e\u0431\u044a\u0435\u043a\u0442 *\/   LINE   NUMBER, \/* \u0441\u0442\u0440\u043e\u043a\u0430 *\/   SOURCE VARCHAR2(4000 BYTE), \/* \u0442\u0435\u043a\u0441\u0442 \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u0430 SYS.SOURCE$.SOURCE%TYPE *\/   OUTPUT VARCHAR2(4000 BYTE), \/* \u0442\u0435\u043a\u0441\u0442 \u043f\u043e\u0434\u043c\u0435\u043d\u044b *\/   CONSTRAINT PK_SWAP_SOURCE_CODE PRIMARY KEY (BATCH, OBJ#, LINE) USING INDEX TABLESPACE PROD_INDEX STORAGE (INITIAL 80 K NEXT 1 M  MAXEXTENTS UNLIMITED)  ) <\/code><\/pre>\n<p>  \u0417\u0430\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u0442\u0430\u0431\u043b\u0438\u0446\u044b SWAP_SOURCE_CODE, \u0434\u0430\u043d\u043d\u044b\u043c\u0438:  <\/p>\n<pre><code class=\"sql\">INSERT INTO SWAP_SOURCE_CODE WITH   EXCLUDE_LINE AS \/* \u0438\u0441\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0441\u0442\u0440\u043e\u043a\u0438 *\/   (     SELECT 105857 AS OBJ# , 321 AS LINE FROM DUAL UNION     SELECT 82036 , 50 FROM DUAL   )   , EXCLUDE_OBJ AS \/* \u0438\u0441\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u043e\u0431\u044a\u0435\u043a\u0442\u044b *\/   (     SELECT 121939 AS OBJ# FROM DUAL   )   , BATCH_NUMBER AS \/* \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u044f \u043d\u043e\u043c\u0435\u0440\u0430 \u043f\u0440\u043e\u0433\u043e\u043d\u0430 *\/   (     SELECT (COALESCE (MAX(BATCH),0) +1) AS BATCH# FROM PROD.SWAP_SOURCE_CODE   )   , PATTERNS AS \/* \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u044f \u043f\u043e\u0434\u0441\u0442\u0430\u043d\u043e\u0432\u043e\u043a *\/   (     SELECT         'GET_ACTUAL_DATE' AS ERST       , '(' AS OPENING       , '' AS CLOSING       , 'SYSDATE' AS BECOME          FROM       DUAL     UNION ALL     SELECT         'GET_ACTUAL_DATE'       , ' '       , ''       , 'SYSDATE'     FROM       DUAL     UNION ALL     SELECT         'GET_ACTUAL_DATE'       , '='       , ''       , 'SYSDATE'     FROM       DUAL     UNION ALL     SELECT         'GET_ACTUAL_DATE'       , ','       , ''       , 'SYSDATE'     FROM       DUAL     UNION ALL     SELECT         'GET_ACTUAL_DATE'       , ''''       , ''       , 'SYSDATE'     FROM       DUAL   )   SELECT       BATCH_NUMBER.BATCH#     , SC.OBJ# AS OBJ#     , SC.LINE AS LINE     , SC.SOURCE AS SOURCE            , REPLACE           (               UPPER(SC.SOURCE)             , PT.OPENING || PT.ERST || PT.CLOSING             , PT.OPENING || PT.BECOME || PT.CLOSING           ) AS COMPLETE   FROM     SYS.USER$ UR     JOIN SYS.OBJ$ OB ON     UR.USER# = OB.OWNER#     JOIN SYS.SOURCE$ SC ON          SC.OBJ# = OB.OBJ#     , PATTERNS PT     , BATCH_NUMBER   WHERE     UR.USER# = 50 \/* \u0440\u0430\u0431\u043e\u0442\u0430 \u0441 \u043e\u0431\u044a\u0435\u043a\u0442\u0430\u043c\u0438 \u0442\u043e\u043b\u044c\u043a\u043e \u0441\u0445\u0435\u043c\u044b PROD *\/     AND     UPPER(SC.SOURCE) LIKE '%' || PT.ERST || '%'     AND (SC.OBJ# , SC.LINE ) NOT IN (SELECT EL.OBJ# , EL.LINE FROM EXCLUDE_LINE EL )     AND SC.OBJ# NOT IN (SELECT EO.OBJ# FROM EXCLUDE_OBJ EO )        AND REPLACE           (               UPPER(SC.SOURCE)             , PT.OPENING || PT.ERST || PT.CLOSING             , PT.OPENING || PT.BECOME || PT.CLOSING           )         &lt;&gt; UPPER(SC.SOURCE)   ORDER BY     OBJ#   , LINE ; <\/code><\/pre>\n<p>  \u041f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u043f\u043e\u0434\u0441\u0442\u0430\u043d\u043e\u0432\u043e\u043a:  <\/p>\n<pre><code class=\"sql\">SELECT * FROM SWAP_SOURCE_CODE; <\/code><\/pre>\n<p>  \u042f \u043d\u0435 \u0441\u0442\u0430\u043b \u0434\u0435\u043b\u0430\u0442\u044c \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u044e \u043f\u043e\u0434\u0441\u0442\u0430\u043d\u043e\u0432\u043e\u043a \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u043e\u0439 \u043f\u043e\u0442\u043e\u043c\u0443, \u0447\u0442\u043e \u0443\u0441\u043b\u043e\u0432\u0438\u044f \u043f\u043e\u0434\u0441\u0442\u0430\u043d\u043e\u0432\u043e\u043a \u043a\u0430\u0436\u0434\u044b\u0439 \u0440\u0430\u0437 \u0440\u0430\u0437\u043d\u044b\u0435 \u0438 \u043d\u0435 \u0444\u0430\u043a\u0442, \u0447\u0442\u043e \u0432 \u043e\u0447\u0435\u0440\u0435\u0434\u043d\u043e\u0439 \u0440\u0430\u0437 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e PL\/SQL \u0431\u0443\u0434\u0435\u0442 \u0443\u0434\u043e\u0431\u043d\u043e \u043e\u043f\u0438\u0441\u0430\u0442\u044c \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u0433\u043e DDL \u0441\u043a\u0440\u0438\u043f\u0442\u0430 \u0432 \u0446\u0435\u043b\u0435\u0432\u043e\u0439, \u043e\u0431\u044b\u0447\u043d\u043e \u044d\u0442\u043e \u0434\u0435\u043b\u0430\u0435\u0442\u0441\u044f \u0432\u043d\u0435\u0448\u043d\u0435\u0439 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043e\u0439 ( \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043d\u043e\u0439 \u043d\u0430 C#,Ruby,Perl).  <\/p>\n<h5>\u0412\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u043f\u043e\u0434\u0441\u0442\u0430\u043d\u043e\u0432\u043e\u043a<\/h5>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u043c\u044b \u0438\u043c\u0435\u0435\u043c \u043f\u043e\u0434\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0435 SWAP_SOURCE_CODE, \u0438 \u043c\u043e\u0436\u043d\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u043f\u043e\u0434\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438, \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u043d\u0430\u0434\u043e \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a \u0434\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u043f\u043e\u0434\u0441\u0442\u0430\u043d\u043e\u0432\u043e\u043a \u0438, \u043a\u043e\u043d\u0435\u0447\u043d\u043e, \u043d\u0430\u0434\u043e \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a \u043f\u043e\u0441\u043b\u0435 \u043f\u043e\u0434\u0441\u0442\u0430\u043d\u043e\u0432\u043e\u043a. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u0442\u0430\u0431\u043b\u0438\u0446\u0443 SOURCE_CODE_BACKUP:  <\/p>\n<pre><code class=\"sql\">CREATE TABLE SOURCE_CODE_BACKUP (   BATCH       NUMBER, \/* \u043d\u043e\u043c\u0435\u0440 \u043f\u0440\u043e\u0433\u043e\u043d\u0430 *\/   OBJ         NUMBER, \/* \u043e\u0431\u044a\u0435\u043a\u0442 *\/   CODE_BACKUP CLOB, \/* \u0442\u0435\u043a\u0441\u0442 \u043e\u0431\u044a\u0435\u043a\u0442\u0430 \u0434\u043e \u0432\u043d\u0435\u0441\u0435\u043d\u0438\u044f \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439*\/   CODE_UPDATE CLOB, \/* \u0442\u0435\u043a\u0441\u0442 \u043f\u043e\u0441\u043b\u0435 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439 *\/   CONSTRAINT PK_SOURCE_CODE_BACKUP PRIMARY KEY (BATCH, OBJ) USING INDEX TABLESPACE PROD_INDEX STORAGE (INITIAL 80 K NEXT 1 M MAXEXTENTS NLIMITED) ) <\/code><\/pre>\n<p>  \u041f\u043e\u0434\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u043c \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u043e\u0439 P_REPLACE_SOURCE_WITH_OUTPUT:  <\/p>\n<pre><code class=\"sql\">CREATE OR REPLACE PROCEDURE P_REPLACE_SOURCE_WITH_OUTPUT (   N_BATCH_IN IN NUMBER \/* \u043d\u043e\u043c\u0435\u0440 \u043f\u0440\u043e\u0433\u043e\u043d\u0430 \u0441 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u043e\u043c \u043f\u043e\u0434\u0441\u0442\u0430\u043d\u043e\u0432\u043e\u043a *\/ ) AS  \/* \u043a\u0443\u0440\u0441\u043e\u0440 \u0434\u043b\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0441\u043f\u0438\u0441\u043a\u0430 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432*\/   CURSOR GetObjFromSwap_Source_Code     (     nBatchIn IN NUMBER   )   IS   SELECT     SW.OBJ# AS OBJ   FROM     SWAP_SOURCE_CODE SW   WHERE     SW.BATCH = nBatchIn   GROUP BY     SW.OBJ#   ORDER BY     SW.OBJ#   ;    TYPE  T_OBJ_TABLE IS TABLE OF GetObjFromSwap_Source_Code%ROWTYPE;   OBJ_TABLE T_OBJ_TABLE := T_OBJ_TABLE();    nObjCount NUMBER ;   nObjFirstIndex NUMBER ;   nObjLastIndex NUMBER ;    nObj NUMBER;    ObjBackup_CLOB CLOB ; \/* \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b\u044c\u043d\u044b\u0439 \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a *\/   ObjUpdate_CLOB CLOB ; \/* \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a \u043f\u043e\u0441\u043b\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u043f\u043e\u0434\u0441\u0442\u0430\u043d\u043e\u0432\u043e\u043a*\/    nBATCH NUMBER; \/* \u043d\u043e\u043c\u0435\u0440 \u043f\u0440\u043e\u0433\u043e\u043d\u0430 \u043f\u043e \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u043e\u0432 *\/    CURSOR GetNextBatchNumber   IS     SELECT       COALESCE( MAX(SB.BATCH),0 ) + 1     FROM        SOURCE_CODE_BACKUP SB   ;    nIsEqual NUMBER ; \/* \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u044f \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u0430 \u043f\u043e\u0441\u043b\u0435 \u043f\u043e\u0434\u0441\u0442\u0430\u043d\u043e\u0432\u043e\u043a \u0441 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b\u044c\u043d\u044b\u043c \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u043e\u043c *\/  \/* \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u0430 \u0434\u043b\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u043f\u043e\u0434\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 *\/ PROCEDURE PARSE_SOURCE_CODE_WITH_OUTPUT (       nObjIn IN NUMBER \/* \u043e\u0431\u044a\u0435\u043a\u0442 \u0434\u043b\u044f \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 *\/     , nBatchIn IN NUMBER \/* \u043d\u043e\u043c\u0435\u0440 \u043f\u0440\u043e\u0433\u043e\u043d\u0430 \u0441 \u043f\u043e\u0434\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u043e\u0439 *\/     , ObjBackupOut_CLOB OUT CLOB \/* \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b\u044c\u043d\u044b\u0439 \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a *\/     , ObjUpdateOut_CLOB OUT CLOB \/* \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0430\u043d\u043d\u044b\u0439 \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a *\/ ) AS \/* \u041a\u0443\u0440\u0441\u043e\u0440 \u0434\u043b\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0418\u043c\u0435\u043d\u0438 \u0422\u0438\u043f\u0430 \u0438 \u0421\u0445\u0435\u043c\u044b \u043e\u0431\u044a\u0435\u043a\u0442\u0430 *\/   CURSOR GetObjNameTypeSchema   (     nObjIn IN NUMBER    )   IS \/* \u043f\u043e\u043b\u043d\u044b\u0439 \u0441\u043f\u0438\u0441\u043e\u043a \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u044f \u043d\u043e\u043c\u0435\u0440\u0430 \u0442\u0438\u043f\u0430 \u043a \u0435\u0433\u043e \u043d\u0430\u0438\u043c\u0435\u043d\u043e\u0432\u0430\u043d\u0438\u044e \u0432 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0438 SYS.DBA_OBJECTS , \u0443 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 DBMS_METADATA.GET_DDL \u0441\u0432\u043e\u0438 \u043e\u0431\u043e\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0442\u0438\u043f\u043e\u0432, \u043e\u043d\u0438 \u043e\u0442\u043b\u0438\u0447\u0430\u044e\u0442\u0441\u044f \u043e\u0442 \u0442\u0435\u0445 \u0447\u0442\u043e \u0432 DBA_OBJECTS  \u0442\u0435\u043c \u0447\u0442\u043e \u043f\u0440\u043e\u0431\u0435\u043b\u044b \u0437\u0430\u043c\u0435\u043d\u0435\u043d\u044b \u043d\u0430 \u0441\u0438\u043c\u0432\u043e\u043b &quot;_&quot; , \u043f\u043e\u043b\u043d\u044b\u0439 \u0441\u043f\u0438\u0441\u043e\u043a \u0442\u0438\u043f\u043e\u0432 \u043f\u043e \u0441\u0441\u044b\u043b\u043a\u0435 http:\/\/docs.oracle.com\/cd\/B19306_01\/appdev.102\/b14258\/d_metada.htm#BGBBIEGA *\/   WITH OBJ_TYPE AS   (     SELECT 0 AS TYPE#, 'NEXT_OBJECT' AS NAME FROM DUAL UNION ALL      SELECT  1, 'INDEX' FROM DUAL UNION ALL     SELECT 2, 'TABLE' FROM DUAL UNION ALL     SELECT  3, 'CLUSTER' FROM DUAL UNION ALL     SELECT  4, 'VIEW' FROM DUAL UNION ALL     SELECT  5, 'SYNONYM' FROM DUAL UNION ALL     SELECT  6, 'SEQUENCE' FROM DUAL UNION ALL     SELECT  7, 'PROCEDURE' FROM DUAL UNION ALL     SELECT  8, 'FUNCTION' FROM DUAL UNION ALL \/* \u0435\u0441\u043b\u0438 \u0437\u0430\u043f\u0440\u043e\u0441\u0438\u0442\u044c \u043e\u0431\u044a\u0435\u043a\u0442 \u0441 \u0442\u0438\u043f\u043e\u043c 'PACKAGE' \u0442\u043e \u0431\u0443\u0434\u0435\u0442 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0451\u043d \u0438 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a \u043f\u0430\u043a\u0435\u0442\u0430 \u0438 \u0442\u0435\u043b\u043e \u043f\u0430\u043a\u0435\u0442\u0430, \u0447\u0442\u043e \u0431\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a \u043d\u0430\u0434\u043e \u0437\u0430\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u0442\u044c 'PACKAGE_SPEC' *\/     SELECT  9, 'PACKAGE_SPEC' FROM DUAL UNION ALL -- 'PACKAGE'     SELECT  11, 'PACKAGE_BODY' FROM DUAL UNION ALL     SELECT  12, 'TRIGGER' FROM DUAL UNION ALL \/* \u0435\u0441\u043b\u0438 \u0437\u0430\u043f\u0440\u043e\u0441\u0438\u0442\u044c \u043e\u0431\u044a\u0435\u043a\u0442 \u0441 \u0442\u0438\u043f\u043e\u043c 'TYPE' \u0442\u043e \u0431\u0443\u0434\u0435\u0442 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0451\u043d \u0438 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a \u0438 \u0442\u0435\u043b\u043e , \u0447\u0442\u043e \u0431\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a \u043d\u0430\u0434\u043e \u0437\u0430\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u0442\u044c 'TYPE_SPEC' *\/     SELECT  13, 'TYPE_SPEC' FROM DUAL UNION ALL --TYPE     SELECT  14, 'TYPE_BODY' FROM DUAL UNION ALL     SELECT  19, 'TABLE_PARTITION' FROM DUAL UNION ALL     SELECT  20, 'INDEX_PARTITION' FROM DUAL UNION ALL     SELECT  21,  'LOB' FROM DUAL UNION ALL     SELECT  22, 'LIBRARY' FROM DUAL UNION ALL     SELECT  23, 'DIRECTORY' FROM DUAL UNION ALL     SELECT  24, 'QUEUE' FROM DUAL UNION ALL     SELECT  28, 'JAVA_SOURCE' FROM DUAL UNION ALL     SELECT  29, 'JAVA_CLASS' FROM DUAL UNION ALL     SELECT  30, 'JAVA_RESOURCE' FROM DUAL UNION ALL     SELECT  32, 'INDEXTYPE' FROM DUAL UNION ALL     SELECT  33, 'OPERATOR' FROM DUAL UNION ALL     SELECT  34, 'TABLE_SUBPARTITION' FROM DUAL UNION ALL     SELECT  35, 'INDEX_SUBPARTITION' FROM DUAL UNION ALL     SELECT  39, 'LOB_PARTITION' FROM DUAL UNION ALL     SELECT  40, 'LOB_SUBPARTITION' FROM DUAL UNION ALL     SELECT  43, 'DIMENSION' FROM DUAL UNION ALL     SELECT  44, 'CONTEXT' FROM DUAL UNION ALL     SELECT  47, 'RESOURCE_PLAN' FROM DUAL UNION ALL     SELECT  48, 'CONSUMER_GROUP' FROM DUAL UNION ALL     SELECT  51, 'SUBSCRIPTION' FROM DUAL UNION ALL     SELECT  52, 'LOCATION' FROM DUAL UNION ALL     SELECT  56, 'JAVA_DATA' FROM DUAL   )   SELECT                OB.NAME       , TP.NAME       , UR.NAME   FROM       SWAP_SOURCE_CODE SW       JOIN SYS.OBJ$ OB ON       SW.OBJ# = OB.OBJ#       JOIN SYS.USER$ UR  ON       UR.USER# = OB.OWNER#              LEFT JOIN OBJ_TYPE TP ON       OB.TYPE# = TP.TYPE#   WHERE     SW.OBJ# = nObjIn   ;    ObjRaw_CLOB CLOB; \/* \u043d\u0435 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0430\u043d\u043d\u044b\u0439 \u043e\u0431\u044a\u0435\u043a\u0442 *\/   ObjParsed_CLOB CLOB; \/* DDL \u0441\u043a\u0440\u0438\u043f\u0442 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u043e\u0431\u044a\u0435\u043a\u0442\u0430 \u043f\u043e\u0441\u043b\u0435 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 *\/    sObjName VARCHAR2(30); \/* \u0438\u043c\u044f \u043e\u0431\u044a\u0435\u043a\u0442\u0430 *\/   sTypeName VARCHAR2(30); \/* \u0442\u0438\u043f \u043e\u0431\u044a\u0435\u043a\u0442\u0430 *\/   sSchemaName VARCHAR2(30); \/* \u0441\u0445\u0435\u043c\u0430 \u043e\u0431\u044a\u0435\u043a\u0442\u0430 *\/  \/* \u041a\u0443\u0440\u0441\u043e\u0440 \u0434\u043b\u044f \u0432\u044b\u0431\u043e\u0440\u043a\u0438 \u0441\u0442\u0440\u043e\u043a\u0438 \u0438 \u043f\u043e\u0434\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 *\/   CURSOR GetSourceOutputFromSwap_Source   (       nObjectNumberIn IN NUMBER     , nBatchNumberIn IN NUMBER   )   IS   SELECT       SW.SOURCE AS SOURCE     , SW.OUTPUT AS OUTPUT   FROM     SWAP_SOURCE_CODE SW   WHERE         SW.BATCH = nBatchNumberIn     AND SW.OBJ# = nObjectNumberIn   ORDER BY     SW.LINE   ;    TYPE  T_SOURCE_AND_OUTPUT_TABLE IS TABLE OF GetSourceOutputFromSwap_Source%ROWTYPE;   SourceAndOutput_TABLE T_SOURCE_AND_OUTPUT_TABLE := T_SOURCE_AND_OUTPUT_TABLE();    nSourceCount NUMBER ;   nSourceFirstIndex NUMBER ;   nSourceLastIndex NUMBER ;    sPlaceholder SYS.SOURCE$.SOURCE%TYPE; \/* \u043f\u043e\u0434\u0441\u0442\u0440\u043e\u043a\u0430 \u0434\u043b\u044f \u0437\u0430\u043c\u0435\u043d\u044b  *\/   sSubstitute SYS.SOURCE$.SOURCE%TYPE; \/* \u0441\u0442\u0440\u043e\u043a\u0430 \u0434\u043b\u044f \u043f\u043e\u0434\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438  *\/  BEGIN  \/* \u0434\u043b\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f GET_DDL \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0438\u043c\u044f \u043e\u0431\u044a\u0435\u043a\u0442\u0430, \u0435\u0433\u043e \u0442\u0438\u043f \u0438 \u0435\u0433\u043e \u0441\u0445\u0435\u043c\u0443 *\/     OPEN GetObjNameTypeSchema(nObjIn);     FETCH GetObjNameTypeSchema INTO sObjName, sTypeName, sSchemaName;     CLOSE GetObjNameTypeSchema;  \/* \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a \u043e\u0431\u044a\u0435\u043a\u0442\u0430 *\/     ObjRaw_CLOB := DBMS_METADATA.GET_DDL       (           OBJECT_TYPE =&gt; sTypeName         , NAME =&gt; sObjName         , SCHEMA =&gt; sSchemaName       );  \/* \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u043c \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b\u044c\u043d\u044b\u0439 \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a *\/     ObjBackupOut_CLOB := ObjRaw_CLOB ; \/* \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u0435\u043c \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e \u0434\u043b\u044f \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u0430 *\/     ObjParsed_CLOB := ObjRaw_CLOB;      OPEN GetSourceOutputFromSwap_Source       (           nObjectNumberIn =&gt; nObjIn         , nBatchNumberIn =&gt; nBatchIn       );     FETCH GetSourceOutputFromSwap_Source BULK COLLECT INTO SourceAndOutput_TABLE;     CLOSE GetSourceOutputFromSwap_Source ;      nSourceCount := SourceAndOutput_TABLE.COUNT;      IF ( nSourceCount &gt; 0 )     THEN       nSourceFirstIndex := SourceAndOutput_TABLE.FIRST;       nSourceLastIndex := SourceAndOutput_TABLE.LAST;        FOR indx IN nSourceFirstIndex .. nSourceLastIndex       LOOP          sPlaceholder := SourceAndOutput_TABLE(indx).SOURCE ;         sSubstitute := SourceAndOutput_TABLE(indx).OUTPUT ;  \/* \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u043c \u043f\u043e\u0434\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0443 *\/         ObjParsed_CLOB :=           REPLACE           (               ObjParsed_CLOB             , sPlaceholder             , sSubstitute           );        END LOOP;  \/* \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u043c \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a \u043f\u043e\u0441\u043b\u0435 \u043f\u043e\u0434\u0441\u0442\u0430\u043d\u043e\u0432\u043e\u043a *\/       ObjUpdateOut_CLOB := ObjParsed_CLOB ;      END IF ;   END PARSE_SOURCE_CODE_WITH_OUTPUT ;  BEGIN  \/* \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u043d\u043e\u043c\u0435\u0440 \u043f\u0440\u043e\u0433\u043e\u043d\u0430 *\/ OPEN GetNextBatchNumber; FETCH GetNextBatchNumber INTO nBATCH; CLOSE GetNextBatchNumber;  \/* \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0441\u043f\u0438\u0441\u043e\u043a \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 \u0434\u043b\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u043f\u043e\u0434\u0441\u0442\u0430\u043d\u043e\u0432\u043e\u043a *\/ OPEN GetObjFromSwap_Source_Code(N_BATCH_IN); FETCH GetObjFromSwap_Source_Code BULK COLLECT INTO OBJ_TABLE; CLOSE GetObjFromSwap_Source_Code;  nObjCount := OBJ_TABLE.COUNT;  IF ( nObjCount &gt; 0 ) THEN   nObjFirstIndex := OBJ_TABLE.FIRST;   nObjLastIndex := OBJ_TABLE.LAST;    FOR indx IN nObjFirstIndex .. nObjLastIndex   LOOP  \/* \u043e\u0447\u0435\u0440\u0435\u0434\u043d\u043e\u0439 \u043e\u0431\u044a\u0435\u043a\u0442 \u0434\u043b\u044f \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 *\/     nObj := OBJ_TABLE(indx).OBJ;  \/* \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u043c \u043f\u043e\u0434\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0443 *\/     PARSE_SOURCE_CODE_WITH_OUTPUT     (         nObjIn =&gt; nObj       , nBatchIn =&gt; N_BATCH_IN       , ObjBackupOut_CLOB =&gt;  ObjBackup_CLOB       , ObjUpdateOut_CLOB =&gt; ObjUpdate_CLOB     );  \/* \u0441\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u0435\u043c \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a \u0434\u043e \u0438 \u043f\u043e\u0441\u043b\u0435 \u043f\u043e\u0434\u0441\u0442\u0430\u043d\u043e\u0432\u043e\u043a *\/     nIsEqual := DBMS_LOB.COMPARE(ObjBackup_CLOB,ObjUpdate_CLOB);      IF(         nIsEqual IS NOT NULL \/* NULL \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442\u0441\u044f \u043f\u0440\u0438 \u043a\u0440\u0438\u0432\u044b\u0445 CLOB_\u0430\u0445 \u0434\u043b\u044f \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u044f *\/         AND nIsEqual &lt;&gt; 0 \/* \u0435\u0441\u043b\u0438 CLOB _\u044b \u0440\u0430\u0432\u043d\u044b \u0442\u043e 0, \u0435\u0441\u043b\u0438 \u043d\u0435 \u0440\u0430\u0432\u043d\u044b \u0442\u043e \u043d\u0435 0 *\/       )     THEN \/* \u0435\u0441\u043b\u0438 CLOB _\u044b \u043d\u0435 \u0440\u0430\u0432\u043d\u044b \u0442\u043e \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u043c \u0438\u0445 \u0432 SOURCE_CODE_BACKUP  *\/       INSERT INTO SOURCE_CODE_BACKUP       (BATCH,OBJ,CODE_BACKUP,CODE_UPDATE)       VALUES(nBATCH,nObj,ObjBackup_CLOB,ObjUpdate_CLOB)       ;           END IF ;    END LOOP; END IF ;  END P_REPLACE_SOURCE_WITH_OUTPUT ; <\/code><\/pre>\n<p>  \u0412\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u043c \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u0443:  <\/p>\n<pre><code class=\"sql\">BEGIN   P_REPLACE_SOURCE_WITH_OUTPUT( N_BATCH_IN =&gt; 1 ); END; <\/code><\/pre>\n<p>  \u041f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e, \u0432 \u0442\u0435\u043e\u0440\u0438\u0438, \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c, \u0447\u0442\u043e \u0442\u0430\u043c \u043d\u0430\u0433\u0435\u043d\u0435\u0440\u0438\u043b\u043e\u0441\u044c.  <\/p>\n<pre><code class=\"sql\">SELECT * FROM SOURCE_CODE_BACKUP; <\/code><\/pre>\n<p>  <\/p>\n<h5>\u041a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u044f \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432<\/h5>\n<p>  \u0418 \u0432\u043e\u0442 \u043c\u044b \u043d\u0430 \u0444\u0438\u043d\u0438\u0448\u043d\u043e\u0439 \u043f\u0440\u044f\u043c\u043e\u0439 \u2014 \u043e\u0441\u0442\u0430\u043b\u043e\u0441\u044c \u043e\u0442\u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0432\u0441\u0435 \u043e\u0431\u044a\u0435\u043a\u0442\u044b \u2014 \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c DDL \u0441\u043a\u0440\u0438\u043f\u0442\u044b.<br \/>  \u0412\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u043c \u0442\u043e\u0436\u0435 \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u043e\u0439 \u2014 P_EXECUTE_CODE_UPDATE:  <\/p>\n<pre><code class=\"sql\">CREATE OR REPLACE PROCEDURE P_EXECUTE_CODE_UPDATE (   N_BATCH_IN NUMBER \/* \u043d\u043e\u043c\u0435\u0440 \u043f\u0440\u043e\u0433\u043e\u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043d\u0430\u0434\u043e \u043e\u0442\u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c *\/ ) AS \/* \u041a\u0443\u0440\u0441\u043e\u0440 \u0434\u043b\u044f \u0447\u0442\u0435\u043d\u0438\u044f \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u0441 \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u0430\u043c\u0438 , \u043e\u0431\u044a\u0435\u043a\u0442 \u043f\u043e\u0434\u0442\u044f\u0433\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0434\u043b\u044f \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0432 \u043b\u043e\u0433\u0435 *\/ CURSOR GetUpdateFromSourceCodeBackup (   nBatchNumberIn IN NUMBER ) IS SELECT     SB.CODE_UPDATE AS CodeUpdate   , SB.OBJ AS Obj FROM   SOURCE_CODE_BACKUP SB   JOIN SYS.OBJ$ OB ON   SB.OBJ = OB.OBJ# WHERE   SB.BATCH = nBatchNumberIn     AND OB.TYPE# &lt;&gt; 12 -- 12, 'TRIGGER' \/* \u0441 \u0442\u0440\u0438\u0433\u0433\u0435\u0440\u0430\u043c\u0438 \u0431\u0435\u0434\u0430 DBMS_METADATA.GET_DDL \u0434\u043b\u044f \u0442\u0440\u0438\u0433\u0433\u0435\u0440\u043e\u0432 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0441\u0442\u0440\u043e\u0447\u043a\u0443 \u0441 \u0430\u043b\u044c\u0442\u0435\u0440\u043e\u043c \u0434\u043b\u044f \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u0442\u0440\u0438\u0433\u0433\u0435\u0440\u0430, \u0438 \u043d\u0430 \u044d\u0442\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0435 DDL \u0441\u043a\u0440\u0438\u043f\u0442 \u043f\u0430\u0434\u0430\u0435\u0442 \u0441 \u043e\u0448\u0438\u0431\u043a\u043e\u0439 , \u043f\u0440\u0438\u0448\u043b\u043e\u0441\u044c \u0442\u0440\u0438\u0433\u0433\u0435\u0440\u044b \u043a\u043e\u043c\u043f\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0432 \u0440\u0443\u0447\u043d\u0443\u044e, \u043d\u0430\u0432\u0435\u0440\u043d\u043e\u0435 \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c DBMS_METADATA \u0442\u0430\u043a \u0447\u0442\u043e \u0431\u044b \u043e\u043d \u044d\u0442\u0443 \u0441\u0442\u0440\u043e\u0447\u043a\u0443 \u0441 \u0430\u043b\u044c\u0442\u0435\u0440\u043e\u043c \u043d\u0435 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u043b *\/ ORDER BY     SB.BATCH   , SB.OBJ ;  TYPE T_CodeUpdate IS TABLE OF GetUpdateFromSourceCodeBackup%ROWTYPE; CodeUpdate_TABLE T_CodeUpdate := T_CodeUpdate();  nCodeUpdateCount NUMBER; nCodeUpdateFirst NUMBER; nCodeUpdateLast NUMBER;  \/* \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f \u0441 \u0442\u0435\u043a\u0441\u0442\u043e\u043c \u0434\u043b\u044f \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438 *\/ SqlText_CLOB CLOB; nObj NUMBER;  \/* \u041a\u0443\u0440\u0441\u043e\u0440 \u0434\u043b\u044f \u0447\u0442\u0435\u043d\u0438\u044f \u0438\u043c\u0435\u043d\u0438 \u043e\u0431\u044a\u0435\u043a\u0442\u0430 *\/ CURSOR GetObjName( ObjIn IN NUMBER ) IS SELECT   OB.NAME AS ObjectName FROM   SYS.OBJ$ OB WHERE   OB.OBJ# = ObjIn ;  \/* \u0438\u043c\u044f \u043e\u0431\u044a\u0435\u043a\u0442\u0430 \u0432 ORACLE \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0434\u043b\u0438\u043d\u043d\u0435\u0439 30-\u0442\u0438 \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432, \u043d\u043e \u043c\u043d\u0435 \u043f\u0430\u043c\u044f\u0442\u0438 \u043d\u0435 \u0436\u0430\u043b\u043a\u043e - \u043f\u0443\u0441\u0442\u044c \u0431\u0443\u0434\u0435\u0442 32767  *\/ sObjectName VARCHAR2(32767);  BEGIN \/* \u0434\u043b\u044f \u043b\u043e\u0433\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f &quot;\u043d\u0430 \u044d\u043a\u0440\u0430\u043d\u0435&quot; \u0432\u043a\u043b\u044e\u0447\u0430\u0435\u043c \u0432\u044b\u0432\u043e\u0434, \u0431\u0443\u0444\u0435\u0440 \u0434\u0435\u043b\u0430\u0435\u043c \u0431\u0435\u0437\u043b\u0438\u043c\u0438\u0442\u043d\u044b\u043c *\/ DBMS_OUTPUT.ENABLE(NULL);  \/* \u0447\u0438\u0442\u0430\u0435\u043c \u0432\u0441\u0435 DDL \u0441\u043a\u0440\u0438\u043f\u0442\u044b \u0434\u043b\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f *\/ OPEN GetUpdateFromSourceCodeBackup(N_BATCH_IN); FETCH GetUpdateFromSourceCodeBackup BULK COLLECT INTO CodeUpdate_TABLE; CLOSE GetUpdateFromSourceCodeBackup;  nCodeUpdateCount := CodeUpdate_TABLE.COUNT;  IF ( nCodeUpdateCount &gt; 0 ) THEN    nCodeUpdateFirst := CodeUpdate_TABLE.FIRST;   nCodeUpdateLast := CodeUpdate_TABLE.LAST;     FOR indx IN nCodeUpdateFirst .. nCodeUpdateLast   LOOP \/* \u0437\u0430\u043f\u0438\u0441\u0430\u043b\u0438 \u0442\u0435\u043a\u0441\u0442 DDL \u0441\u043a\u0440\u0438\u043f\u0442\u0430 *\/     SqlText_CLOB := CodeUpdate_TABLE(indx).CodeUpdate; \/* \u0437\u0430\u043f\u0438\u0441\u0430\u043b\u0438 \u043d\u043e\u043c\u0435\u0440 \u043e\u0431\u044a\u0435\u043a\u0442\u0430 *\/     nObj := CodeUpdate_TABLE(indx).Obj;  \/* \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u043b\u0438 \u043d\u0430\u0438\u043c\u0435\u043d\u043e\u0432\u0430\u043d\u0438\u0435 \u043e\u0431\u044a\u0435\u043a\u0442\u0430 *\/     OPEN GetObjName(nObj);     FETCH GetObjName INTO sObjectName ;     CLOSE GetObjName; \/* \u0434\u0435\u043b\u0430\u0435\u043c \u0437\u0430\u043f\u0438\u0441\u044c \u0432 \u0436\u0443\u0440\u043d\u0430\u043b\u0435 \u043e \u0442\u043e\u043c \u0447\u0442\u043e \u043f\u0440\u0438\u0441\u0442\u0443\u043f\u0430\u0435\u043c \u043a \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0435 \u043e\u0431\u044a\u0435\u043a\u0442\u0430 *\/     DBMS_OUTPUT.PUT_LINE( '#' || LPAD (indx, 3,'0' )|| ' Process .. ' || sObjectName || ' ' || nObj ); \/* \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u043c DDL \u0441\u043a\u0440\u0438\u043f\u0442 *\/     EXECUTE IMMEDIATE SqlText_CLOB; \/* \u0434\u0435\u043b\u0430\u0435\u043c \u0437\u0430\u043f\u0438\u0441\u044c \u043e\u0431 \u0443\u0441\u043f\u0435\u0448\u043d\u043e\u043c \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0438 \u0441\u043a\u0440\u0438\u043f\u0442\u0430 , \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u043d\u0435\u0442 \u043e\u0442\u043b\u043e\u0432\u0430 \u044d\u043a\u0441\u0435\u043f\u0448\u0435\u043d\u043e\u0432 \u0442\u043e \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u0430 \u0443\u043f\u0430\u0434\u0451\u0442 \u043d\u0430 \u043f\u0435\u0440\u0432\u043e\u0439 \u043e\u0448\u0438\u0431\u043a\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0441\u043a\u0440\u0438\u043f\u0442\u0430 *\/     DBMS_OUTPUT.PUT_LINE( '#' || LPAD (indx, 3,'0' )|| ' Complete ' || sObjectName || ' ' || nObj );    END LOOP;  END IF;  END; <\/code><\/pre>\n<p>  \u0412\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u043c:  <\/p>\n<pre><code class=\"sql\">BEGIN   PARUS.P_EXECUTE_CODE_UPDATE( N_BATCH_IN =&gt; 1 ); END; <\/code><\/pre>\n<p>  \u041e\u0442\u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u043e\u0432\u0430\u043b\u0438 \u0432\u0441\u0435 \u043e\u0431\u044a\u0435\u043a\u0442\u044b, \u043a\u0440\u043e\u043c\u0435 \u0442\u0440\u0438\u0433\u0433\u0435\u0440\u043e\u0432, \u0432\u044b\u0431\u0438\u0440\u0430\u0435\u043c \u0442\u0440\u0438\u0433\u0433\u0435\u0440\u044b \u0438\u0437 \u043d\u0430\u0448\u0435\u0433\u043e \u043f\u0440\u043e\u0433\u043e\u043d\u0430:  <\/p>\n<pre><code class=\"sql\">SELECT   * FROM   SWAP_SOURCE_CODE SW   JOIN SYS.OBJ$ OB ON   OB.OBJ# = SW.OBJ# WHERE   OB.TYPE# = 12   AND SW.BATCH = 1 ; <\/code><\/pre>\n<p>  \u0412\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u043c \u0441\u043a\u0440\u0438\u043f\u0442\u044b \u0442\u0440\u0438\u0433\u0433\u0435\u0440\u043e\u0432 \u043f\u043e \u0447\u0430\u0441\u0442\u044f\u043c, \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u0442\u0443 \u0447\u0430\u0441\u0442\u044c \u0433\u0434\u0435 \u0442\u0440\u0438\u0433\u0433\u0435\u0440 \u0441\u043e\u0437\u0434\u0430\u0451\u0442\u0441\u044f, \u0437\u0430\u0442\u0435\u043c \u0442\u0443 \u0447\u0430\u0441\u0442\u044c \u0433\u0434\u0435 \u0442\u0440\u0438\u0433\u0433\u0435\u0440 \u0432\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f.<\/p>\n<h4>\u0417\u0430\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435<\/h4>\n<p>  \u0418\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u0438 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u044b \u043d\u0443\u0436\u043d\u044b\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u0438 \u0441\u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u044b. \u041e\u0440\u0438\u0433\u0438\u043d\u0430\u043b\u044c\u043d\u044b\u0435 \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u0438 \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u044b, \u0438\u0437 \u043d\u0438\u0445 \u043c\u043e\u0436\u043d\u043e \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b\u044c\u043d\u044b\u0435 \u043e\u0431\u044a\u0435\u043a\u0442\u044b, \u0431\u0435\u0437 \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u044f \u043a \u0430\u0434\u043c\u0438\u043d\u0443 \u0421\u0423\u0411\u0414 \u0441 \u0437\u0430\u044f\u0432\u043a\u043e\u0439 \u043d\u0430 \u0440\u0430\u0437\u0432\u0451\u0440\u0442\u044b\u0432\u0430\u043d\u0438\u0435 \u0440\u0435\u0437\u0435\u0440\u0432\u043d\u043e\u0439 \u043a\u043e\u043f\u0438\u0438.<br \/>  \u041f\u043e\u0447\u0435\u043c\u0443 \u043c\u043d\u0435 \u0442\u0430\u043a \u043f\u0440\u043e\u0441\u0442\u043e \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u043f\u043e\u0434\u043c\u0435\u043d\u0443 \u043e\u0434\u043d\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u043d\u0430 \u0434\u0440\u0443\u0433\u0443\u044e? \u041f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u044d\u0442\u0430 ERP \u0438\u0437 \u043a\u043e\u0440\u043e\u0431\u043a\u0438 \u0441 20-\u0442\u0438 \u043b\u0435\u0442\u043d\u0435\u0439 \u0438\u0441\u0442\u043e\u0440\u0438\u0435\u0439, \u0437\u0430 \u043a\u043e\u0434\u043e\u043c \u0441\u043b\u0435\u0434\u044f\u0442, \u043a\u043e\u0434 \u043e\u0444\u043e\u0440\u043c\u043b\u0435\u043d \u0432 \u0435\u0434\u0438\u043d\u043e\u043c \u0441\u0442\u0438\u043b\u0435, \u0435\u0441\u043b\u0438 \u0431\u044b \u044d\u0442\u043e \u0431\u044b\u043b\u0430 ERP \u043d\u0430 \u043a\u043e\u043b\u0435\u043d\u043a\u0435, \u0442\u043e \u043d\u0435 \u0444\u0430\u043a\u0442 \u0447\u0442\u043e \u0443 \u043c\u0435\u043d\u044f \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u043e\u0441\u044c \u0431\u044b \u0442\u0430\u043a \u043b\u0435\u0433\u043a\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u043f\u043e\u0434\u043c\u0435\u043d\u0443 \u0438\u043c\u0435\u043d\u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u0438.<br \/>  \u0422\u043e\u0432\u0430\u0440\u0438\u0449\u0438, \u043d\u0435 \u0431\u0443\u0434\u044c\u0442\u0435 \u0441\u0435\u0431\u0435 \u0432\u0440\u0430\u0433\u0430\u043c\u0438, \u043b\u044e\u0431\u0438\u0442\u0435 \u0441\u0435\u0431\u044f \u2014 \u0441\u043b\u0435\u0434\u0438\u0442\u0435 \u0437\u0430 \u0441\u0432\u043e\u0438\u043c \u043a\u043e\u0434\u043e\u043c, \u043f\u0443\u0441\u0442\u044c \u043e\u043d \u0431\u0443\u0434\u0435\u0442 \u043d\u0430\u043f\u0438\u0441\u0430\u043d \u0432 \u043e\u0434\u043d\u043e\u043c \u0441\u0442\u0438\u043b\u0435 \u043f\u043e \u043e\u0434\u043d\u0438\u043c \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u0430\u043c!<br \/>  \u0410\u043c\u0438\u043d\u044c.<\/p>\n<h4>\u0421\u0441\u044b\u043b\u043a\u0438<\/h4>\n<p>  <\/p>\n<ol>\n<li><a href=\"http:\/\/stackoverflow.com\/questions\/2478670\/what-privileges-do-you-need-to-access-sys-tables\">\u043f\u0440\u0438\u0432\u0438\u043b\u0435\u0433\u0438\u0438 \u0434\u043b\u044f \u0447\u0442\u0435\u043d\u0438\u044f \u0442\u0430\u0431\u043b\u0438\u0446\u044b SYS.SOURCE$<\/a><\/li>\n<li><a href=\"http:\/\/docs.oracle.com\/cd\/B19306_01\/appdev.102\/b14258\/d_metada.htm#BGBIEDIA\">\u0442\u0438\u043f\u044b \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 \u0434\u043b\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u0438 DBMS_METADATA.GET_DDL<\/a><\/li>\n<li><a href=\"http:\/\/docs.oracle.com\/cd\/B28359_01\/appdev.111\/b28370\/dynamic.htm\">\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 DBMS_SQL \u0434\u043b\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e SQL<\/a><\/li>\n<\/ol>\n<div class=\"clear\"><\/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:\/\/habrahabr.ru\/post\/280648\/\"> https:\/\/habrahabr.ru\/post\/280648\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>       \u041f\u0440\u0438 \u0441\u043e\u043f\u0440\u043e\u0432\u043e\u0436\u0434\u0435\u043d\u0438\u0438 ERP \u0441\u0438\u0441\u0442\u0435\u043c \u0438\u043d\u043e\u0433\u0434\u0430 \u0432\u043e\u0437\u043d\u0438\u043a\u0430\u0435\u0442 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u044c \u043c\u0430\u0441\u0441\u043e\u0432\u043e\u0433\u043e \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u043a\u043e\u0434\u0430 \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440, \u0444\u0443\u043d\u043a\u0446\u0438\u0439, \u0442\u0440\u0438\u0433\u0433\u0435\u0440\u043e\u0432 \u0438\u043b\u0438 \u043f\u0430\u043a\u0435\u0442\u043e\u0432. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u0434\u043b\u044f \u0437\u0430\u043c\u0435\u043d\u044b \u0432\u044b\u0437\u043e\u0432\u0430 \u043e\u0434\u043d\u043e\u0439 \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u044b \u043d\u0430 \u0432\u044b\u0437\u043e\u0432 \u0434\u0440\u0443\u0433\u043e\u0439.<br \/>  \u0415\u0441\u043b\u0438 \u043d\u0430\u0434\u043e \u043f\u043e\u043c\u0435\u043d\u044f\u0442\u044c \u043f\u0430\u0440\u0443 \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440, \u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u044d\u0442\u043e \u0432 \u0440\u0443\u0447\u043d\u0443\u044e, \u043d\u043e \u043a\u043e\u0433\u0434\u0430 \u043d\u0430\u0434\u043e \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0441\u043e\u0442\u0435\u043d \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432, \u0442\u043e \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442\u044c\u0441\u044f \u0437\u0430\u0434\u0443\u043c\u0430\u0442\u044c\u0441\u044f \u043e\u0431 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0430\u0446\u0438\u0438 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430. \u0412 \u0441\u0442\u0430\u0442\u044c\u0435 \u043e\u043f\u0438\u0441\u0430\u043d \u043f\u0440\u0438\u043c\u0435\u0440 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0430\u0446\u0438\u0438 \u0434\u043b\u044f \u0421\u0423\u0411\u0414 <b>ORACLE 11g<\/b>.  <\/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-277420","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/277420","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=277420"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/277420\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=277420"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=277420"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=277420"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}