powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Универсальные скриты для выгрузки
2 сообщений из 2, страница 1 из 1
Универсальные скриты для выгрузки
    #39381889
UzRuslan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Генерация генерации таблицы для патча:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
145.
146.
147.
148.
149.
150.
151.
152.
153.
154.
155.
156.
157.
158.
159.
160.
161.
162.
declare
  COWNER        varchar2(5000) := upper('sh');          -- Схема
  CTABLE_NAME   varchar2(5000) := upper('tbl');       -- Имя таблицы
  CTN_SOKR1     varchar2(5000) := 'a';                    -- Сокращенное имя таблицы 1 (для полей)
  CTN_SOKR2     varchar2(5000) := 'lxs';                  -- Сокращенное имя таблицы 2 (для значений)
  CID           varchar2(5000) := '1,2';                      -- COLUMN_ID полей, которые будут в Where
  CPL           varchar2(32767) := 'dbms_output.put_line';
  C             varchar2(5000);
  CTAB          varchar2(5000) := '  ';
  C1            varchar2(5000);
  C2            varchar2(5000);
  C2_V          varchar2(5000);
  CINS1         varchar2(5000) := '';
  CINS2         varchar2(5000) := '';
  CUPD          varchar2(5000) := '';
  CWHR          varchar2(5000) := '';
  CWHR2         varchar2(5000) := '';
  CDCL          varchar2(5000) := '';
  CRLF          varchar2(2) := chr(13);
  N             number;
  D             date;
begin
  execute immediate 'alter session set nls_numeric_characters=''.,''';                     --установка разделителя числа
  execute immediate 'alter session set nls_date_format=''yyyy.mm.dd''';                                 --установка даты
  --    'BK_name_cyr'||'='||RC_BK.name_cyr||CRLF
  -- cStr:=cStr||'otv_fio_im'||'='||rc_otv.fio_im||CRLF;
  for COL in (  select C.COLUMN_ID
                      ,C.COLUMN_NAME
                      ,C.DATA_TYPE
                      ,C.DATA_LENGTH
                      ,O.COMMENTS
                  from COLS C, DBA_COL_COMMENTS O
                 where C.TABLE_NAME = O.TABLE_NAME
                   and C.COLUMN_NAME = O.COLUMN_NAME
                   and C.TABLE_NAME = upper(CTABLE_NAME)
              order by C.COLUMN_ID) loop
    if CINS1 is not null then
      CINS1 := CINS1 || ',' || CRLF;
      CINS2 := CINS2 || ',' || CRLF;
    end if;
    C := COL.COLUMN_NAME;
    C1 := CTN_SOKR1 || '.' || COL.COLUMN_NAME;
    case
      when COL.DATA_TYPE = 'VARCHAR2' then
        C2_V := 'replace(' || CTN_SOKR2 || '.' || C || ','''''''','''''''''''')';
        C2 := '''''''||replace(' || CTN_SOKR2 || '.' || C || ','''''''','''''''''''')||''''''';
      when COL.DATA_TYPE = 'NUMBER' then
        C2_V := 'nvl(to_char(' || CTN_SOKR2 || '.' || C || '),''null'')';
        C2 := '''||nvl(to_char(' || CTN_SOKR2 || '.' || C || '),''null'')||''';
      when COL.DATA_TYPE = 'DATE' then
        C2_V := 'to_char(' || CTN_SOKR2 || '.' || C || ',''DD.MM.YYYY'')';
        C2 := '''||to_char(' || CTN_SOKR2 || '.' || C || ',''DD.MM.YYYY'')||''';
      else
        C2_V := 'replace(' || CTN_SOKR2 || '.' || C || ','''''''','''''''''''')';
        C2 := '''''''||replace(' || CTN_SOKR2 || '.' || C || ','''''''','''''''''''')||''''''';
    end case;
    --dbms_output.put_line(c||'='||c1);
    CINS1 := CINS1 || CTAB || CTAB || CTAB || C1;
    CINS2 := CINS2 || CTAB || CTAB || CTAB || C2;
    --
    select count( * )
      into N
      from (    select regexp_substr(VAL
                                    ,'[^,]+'
                                    ,1
                                    ,level)
                         COND
                  from (select CID VAL
                          from dual) T
            connect by instr(VAL
                            ,','
                            ,1
                            ,level - 1) > 0)
     where COL.COLUMN_ID in COND;
    --
    if N = 0 then
      if CUPD is not null then
        CUPD := CUPD || ',' || CRLF;
      end if;
      CUPD := CUPD || CTAB || CTAB || C1 || '=' || C2;
    else
      if CWHR is not null then
        CWHR := CWHR || CRLF || CTAB || CTAB || 'and ';
        CWHR2 := CWHR2 || CRLF || CTAB || CTAB || 'and ';
        CDCL := CDCL || CRLF;
      end if;
      CWHR := CWHR || C1 || '=' || C2;
      CWHR2 := CWHR2 || C2_V || '=' || C || '_';
      if COL.DATA_TYPE = 'VARCHAR2' then
        CDCL := CDCL || C || '_ ' || COL.DATA_TYPE || '(' || COL.DATA_LENGTH || ') := '''';';
      else
        CDCL := CDCL || C || '_ ' || COL.DATA_TYPE || '  := ;';
      end if;
    --exit;
    end if;
  end loop;
  -------------------- Generation1 --------------------
  dbms_output.PUT_LINE('declare');
  dbms_output.PUT_LINE(CDCL);
  dbms_output.PUT_LINE('CRLF varchar2(2) := chr(13);');
  dbms_output.PUT_LINE('begin');
  dbms_output.PUT_LINE(CTAB || CPL || '(''begin'');');
  dbms_output.PUT_LINE(CTAB || 'for ' || CTN_SOKR2 || ' in (');
  dbms_output.PUT_LINE(CTAB || CTAB || 'select ' || CTN_SOKR2 || '.*');
  dbms_output.PUT_LINE(CTAB || CTAB || 'from ' || COWNER || '.' || CTABLE_NAME || ' ' || CTN_SOKR2);
  dbms_output.PUT_LINE(CTAB || CTAB || 'where ' || CWHR2);
  dbms_output.PUT_LINE(CTAB || CTAB || CTAB || ') loop');
  dbms_output.PUT_LINE(CTAB || CTAB || '-------------------- begin Generation2 --------------------');
  dbms_output.PUT_LINE(   CTAB
                       || CTAB
                       || CPL
                       || '('''
                       || CTAB
                       || 'update '
                       || COWNER
                       || '.'
                       || CTABLE_NAME
                       || ' '
                       || CTN_SOKR1
                       || ' set'
                       || ''');');
  dbms_output.PUT_LINE(CTAB || CTAB || CPL || '(''' || CUPD || ''');');
  dbms_output.PUT_LINE(CTAB || CTAB || CPL || '(''' || CTAB || 'where ' || CWHR || ';' || ''');');
  dbms_output.PUT_LINE(CTAB || CTAB || CPL || '(''' || CTAB || 'if sql%notfound then' || ''');');
  dbms_output.PUT_LINE('');
  dbms_output.PUT_LINE(   CTAB
                       || CTAB
                       || CPL
                       || '('''
                       || CTAB
                       || CTAB
                       || 'insert into '
                       || COWNER
                       || '.'
                       || CTABLE_NAME
                       || ' '
                       || CTN_SOKR1
                       || ' ('
                       || ''');');
  dbms_output.PUT_LINE(   CTAB
                       || CTAB
                       || CPL
                       || '('''
                       || CINS1
                       || ')'
                       || CRLF
                       || CTAB
                       || CTAB
                       || CTAB
                       || 'VALUES ('
                       || CRLF
                       || CINS2
                       || ');'
                       || ''');');
  dbms_output.PUT_LINE(CTAB || CTAB || CPL || '(''' || CTAB || 'end if;' || ''');');
  dbms_output.PUT_LINE(CTAB || CTAB || CPL || '(''' || CTAB || 'commit;' || ''');');
  dbms_output.PUT_LINE(CTAB || CTAB || '-------------------- end Generation2 --------------------');
  dbms_output.PUT_LINE(CTAB || 'end loop;');
  dbms_output.PUT_LINE(CTAB || CPL || '(''end;'');');
  dbms_output.PUT_LINE(CTAB || CPL || '(CRLF||''/''||CRLF);');
  dbms_output.PUT_LINE('end;' || CRLF || CRLF || '/' || CRLF);
end; 



Выгрузка метаданных таблицы, для sqlplus:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
145.
146.
147.
148.
149.
150.
151.
152.
153.
154.
155.
156.
157.
158.
159.
column tempfile new_value tempfile noprint;
select 'D:\ALL_OBJ\sql\&&P'||'_'||to_char(sysdate, 'yyyymmdd_hh24mi')||'.sql' tempfile from dual;

set feedback off
set heading off
set termout off
set linesize 4000
set trimspool on
set verify off
set longchunksize 32767
set LONG 1073741824
COLUNM WRAP OFF
SET RECSEP OFF
--COLUNM text WORD_WRAPPED
set underline OFF
set PAGESIZE 0

set serveroutput on size 320000

---------------------------------------------------------------
spool &&tempfile;
---------------------------
exec dbms_metadata.set_transform_param(dbms_metadata.session_transform,'PRETTY',TRUE);
exec dbms_metadata.set_transform_param(dbms_metadata.session_transform,'SQLTERMINATOR',TRUE);
exec dbms_metadata.set_transform_param(dbms_metadata.session_transform,'SEGMENT_ATTRIBUTES',TRUE);
exec dbms_metadata.set_transform_param(dbms_metadata.session_transform,'STORAGE',FALSE);
exec dbms_metadata.set_transform_param(dbms_metadata.session_transform,'TABLESPACE',TRUE);
exec dbms_metadata.set_transform_param(dbms_metadata.session_transform,'REF_CONSTRAINTS',TRUE);
exec dbms_metadata.set_transform_param(dbms_metadata.session_transform,'SPECIFICATION',TRUE);
exec dbms_metadata.set_transform_param(dbms_metadata.session_transform,'BODY',TRUE);
exec dbms_metadata.set_transform_param(dbms_metadata.session_transform,'CONSTRAINTS',TRUE);
exec dbms_metadata.set_transform_param(dbms_metadata.session_transform,'INDEX',TRUE);
exec dbms_metadata.set_transform_param(dbms_metadata.session_transform,'INDEX STATISTICS',TRUE);

/

declare
n number;
cTb varchar2(32000) := UPPER('&&P');
cOw varchar2(32000) := UPPER('схема');
bl clob;

  PROCEDURE new_put_line(mes IN clob) AS
  c varchar2(32000);
  BEGIN
    insert into b_reb_rtv a
    (a.brr_name, a.brr_type, a.brr_clob) 
    VALUES (cTb, 'ALL_OBJ', mes);
    commit;
  END;   

begin

  delete b_reb_rtv a
  where a.BRR_TYPE = 'ALL_OBJ'
    and a.BRR_NAME = cTb;

  for o in (SELECT o.*
      FROM dba_objects o
      WHERE 1=1
        --and o.owner = cOw
        and o.OBJECT_NAME = cTb
        --AND o.object_type IN ('PACKAGE')
        ) loop
    --new_put_line('-- '||o.object_type||', '||UPPER(o.object_name)||', '||UPPER(o.owner));

    begin    
      -- таблица
      bl := DBMS_METADATA.GET_DDL(o.object_type, UPPER(o.object_name), UPPER(o.owner));
      new_put_line(bl);
      new_put_line('');
    exception when OTHERS then null;
    end;

    begin    
      -- коменты
      bl := dbms_metadata.get_dependent_ddl('COMMENT', UPPER(o.object_name), UPPER(o.owner));
      new_put_line(bl);
      new_put_line('');    
    exception when OTHERS then null;
    end;    
    
    begin    
     -- права
     bl := dbms_metadata.get_dependent_ddl('OBJECT_GRANT', UPPER(o.object_name), user);
     new_put_line(bl);
     new_put_line('');    
    exception when OTHERS then null;
    end;    
    
    begin         
     -- синонимы
     for s in (SELECT TABLE_OWNER, TABLE_NAME, SYNONYM_NAME
        FROM DBA_SYNONYMS s
        WHERE s.TABLE_OWNER = UPPER(o.owner)
          and s.TABLE_NAME = UPPER(o.object_name)) loop
       SELECT dbms_metadata.get_ddl(o.OBJECT_TYPE, o.OBJECT_NAME, o.OWNER) into bl
       FROM dba_objects o
       where o.OBJECT_NAME = s.SYNONYM_NAME
         and o.OBJECT_TYPE = 'SYNONYM';      
       -- из за кривой РТВ будем извращатся
       new_put_line(replace(bl,'CREATE OR REPLACE PUBLIC','CREATE PUBLIC'));
       new_put_line('');     
     end loop;    
    exception when OTHERS then null;
    end;    
    
    begin         
     -- триггеры
     for tr in (SELECT tr.*
        FROM DBA_TRIGGERS tr
        WHERE tr.OWNER = UPPER(o.owner)
          and tr.TABLE_NAME = UPPER(o.object_name)) loop
       SELECT dbms_metadata.get_ddl(o.OBJECT_TYPE, o.OBJECT_NAME, o.OWNER) into bl
       FROM dba_objects o
       where o.OBJECT_NAME = tr.TRIGGER_NAME;      
       new_put_line(bl);
       new_put_line('');     
     end loop;             
    exception when OTHERS then null;
    end;

    begin         
    -- индексы
     for tr in (select *
      from DBA_INDEXES
      where OWNER = UPPER(o.owner)
        and TABLE_NAME = UPPER(o.object_name)) loop
       SELECT dbms_metadata.get_ddl(o.OBJECT_TYPE, o.OBJECT_NAME, o.OWNER) into bl
       FROM dba_objects o
       where o.OBJECT_NAME = tr.INDEX_NAME;
       new_put_line(bl);
       new_put_line('');     
     end loop;             
    exception when OTHERS then null;
    end;    
  end loop;
end;

/
-----------------------------------------------------------
spool &&tempfile;
/

SELECT a.brr_clob
  FROM b_reb_rtv a
where a.BRR_TYPE = 'ALL_OBJ'
  and a.BRR_NAME = upper('&&P')
order by a.BRR_CODE;

---------------------------------------------------------------
spool off
set feedback on
set heading on
set termout on
set linesize 10000
set longchunksize 8000
set underline OFF
exit



Компиляция недействительных объектов для sqlplus:

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
145.
146.
147.
148.
149.
--REMOTE_DEPENDENCIES_MODE=SIGNATURE;
column tempfile new_value tempfile noprint;
select 'C:\work\sql\COMPILE\MAKE_REC_'||to_char(sysdate, 'yyyymmdd_hh24mi')||'.sql' tempfile from dual;
set term on
prompt ===================================================================
prompt                  Компиляция недействительных объектов
prompt ===================================================================
set termout off
whenever SQLError continue

spool &&tempfile;
set heading off feedback off trimout on serveroutput on
set termout on trimspool on
prompt Список недействительных("INVALID") объектов до начала компиляции:
select rpad(Object_Name,30,' ')|| Object_Type
  from USER_OBJECTS
 where Status      = 'INVALID'
   and Object_Name not like 'BIN%'
   and Object_Type in ('VIEW', 'PROCEDURE', 'PACKAGE',
                       'PACKAGE BODY', 'FUNCTION', 'TRIGGER')
 order by Object_Type
;

prompt ===================================================================
prompt _Выполняется ...
prompt
declare
  cursor cur_recompile is
  select Object_Type, Object_Name, decode( Object_Type, 'PACKAGE BODY', 3,
                                                        'VIEW',         1,
                                                                        2
                                         ) Obj_Type
    from USER_OBJECTS
   where Status      = 'INVALID'
     and Object_Name not like 'BIN%'
     and Object_Type in ('VIEW', 'PROCEDURE', 'PACKAGE',
                         'PACKAGE BODY', 'FUNCTION', 'TRIGGER')
   order by Obj_Type
  ;
  --
  cur_rec cur_recompile%ROWTYPE;
  --
  cursor cur_error (N_E char, T_E char) is
    select name, type from user_errors
      where name = N_E
        and type = T_E;
  --
  cur_er cur_error%ROWTYPE;
  --
  error_rec       varchar2(130);
  axt             varchar2(2);
  v_Error         boolean := FALSE;
  cur_NOT_FOUND   exception;  -- Если нет объектов подлежащих компиляции.
begin
  --
  dbms_output.enable(1000000);
  dbms_output.put_line('================== Протокол работы компиляции =====================');
  dbms_output.put_line('-');
  --
  open cur_recompile;
  fetch cur_recompile into cur_rec;
  if cur_recompile%Found
   then
     close cur_recompile;
     --
     for i in 1..5
     loop
        --
        for k in cur_recompile
        loop
           --
           If k.Object_Type = 'PACKAGE' then
              begin
                dbms_utility.exec_ddl_statement('alter package ' || k.Object_Name   || ' compile');
              exception
                when others then null;
              end;
           elsif k.Object_Type = 'PACKAGE BODY' then
              begin
                dbms_utility.exec_ddl_statement('alter package ' || k.Object_Name   || ' compile body');
              exception
                when others then null;
              end;
           elsif k.Object_Type = 'PROCEDURE' then
              begin
                dbms_utility.exec_ddl_statement('alter procedure ' || k.Object_Name || ' compile');
              exception
                when others then null;
              end;
           elsif k.Object_Type = 'FUNCTION' then
              begin
                dbms_utility.exec_ddl_statement('alter function ' || k.Object_Name  || ' compile');
              exception
                when others then null;
              end;
           elsif k.Object_Type = 'VIEW' then
              begin
                dbms_utility.exec_ddl_statement('alter view ' || k.Object_Name || ' compile');
              exception
                when others then null;
              end;
           elsif k.Object_Type = 'TRIGGER' then
              begin
                dbms_utility.exec_ddl_statement('alter  trigger ' || k.Object_Name || ' compile');
              exception
                when others then null;
              end;
           end if;
           --
           -- Проверяем: Был ли "Warning" при компиляции объекта.
           --
           open cur_error(k.Object_Name, k.Object_Type);
           fetch cur_error into cur_er;
           If cur_error%FOUND then
              --
              If i = 5 then
                 dbms_output.put_line('Объект ' || rpad(k.Object_Name,30,' ') || ' ' ||
                                      rpad(k.Object_Type,12,' ') || ' не скомпилировался !!!');
                 v_Error := TRUE;
              end if;
              --
           end if;
           --
           close cur_error;
           --
        end loop; -- Конец цикла по инвалидным объектам.
        --
    end loop; -- Конец цикла от 1-го до 5-ти.
  else
     close cur_recompile;
     raise cur_NOT_FOUND;
  end if;
  --
  If not v_Error then
     dbms_output.put_line('Компиляция выполнена успешно.');
  end if;
  --
exception
  when cur_NOT_FOUND then
       dbms_output.put_line('Объектов, подлежащих компиляции не обнаружено !!!');
  when OTHERS then
       dbms_output.put_line( sqlerrm );
end;
/
prompt
prompt
commit;
set termout off
spool off
...
Рейтинг: 0 / 0
Универсальные скриты для выгрузки
    #39381985
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Каждый, кто сравнивает свой мега-поток сознания со вселенной, на самом деле варился в своей маленькой песочнице.
...
Рейтинг: 0 / 0
2 сообщений из 2, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Универсальные скриты для выгрузки
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]