Oracle 8.1.5, Windows
Предисловие
После восстановления схемы (imp) или изменения ее структуры иногда возникают
объекты (процедуры, триггеры, представления) с ошибками компиляции. Для
того, чтобы все стало ОК, достаточно их перекомпилировать. В PL/SQL
Developer есть пункт меню Tools/Compile Invalid Objects..., который
вытаскивает на свет Божий все такие объекты и отображает их в одном списке,
а затем легким нажатием одной кнопки все они перекомпилируются, и приходит
счастье..
Кульминиция
Требуется подсказка, как выполнить то же самое (поиск и перекомпиляцию
объектов с ошибками компиляции) с помощью скрипта.
Заключение
Буду благодарен за дельный совет (а лучше, конечно, скрипт :-)
C Уважением,
Ю.Чевтайкин
geo...@mail.ru, geobo...@mtu-net.ru
Отправлено через сервер Форумы@mail.ru - http://talk.mail.ru
WBR,
Олег
--
-- Recompile all objects in a schema
-- Sqlplus script
column u new_val uname
select user u from dual;
drop table compile_schema_tmp
/
create global temporary table compile_schema_tmp
( object_name varchar2(30),
object_type varchar2(30),
constraint compile_schema_tmp_pk
primary key(object_name,object_type)
)
on commit preserve rows
/
grant all on compile_schema_tmp to public
/
create or replace
procedure get_next_object_to_compile( p_username in varchar2,
p_cmd out varchar2,
p_obj out varchar2,
p_typ out varchar2 )
as
begin
select 'alter ' || object_type || ' '
|| p_username || '.' || object_name ||
decode( object_type, 'PACKAGE BODY', ' compile body',
' compile' ), object_name, object_type
into p_cmd, p_obj, p_typ
from dba_objects a
where owner = upper(p_username)
and status = 'INVALID'
and object_type <> 'UNDEFINED'
and not exists ( select null
from compile_schema_tmp b
where a.object_name = b.object_name
and a.object_type = b.object_type
)
and rownum = 1;
insert into compile_schema_tmp
( object_name, object_type )
values
( p_obj, p_typ );
end;
/
create or replace procedure compile_schema( p_username in varchar2 )
authid current_user
as
l_cmd varchar2(512);
l_obj dba_objects.object_name%type;
l_typ dba_objects.object_type%type;
begin
delete from &uname..compile_schema_tmp;
loop
get_next_object_to_compile( p_username, l_cmd, l_obj, l_typ );
dbms_output.put_line( l_cmd );
begin
execute immediate l_cmd;
dbms_output.put_line( 'Successful' );
exception
when others then
dbms_output.put_line( sqlerrm );
end;
dbms_output.put_line( chr(9) );
end loop;
exception
when no_data_found then NULL;
end;
/
grant execute on compile_schema to public
/
/*
And that is it ?V now you can go into any schema that is able to compile
some
objects and execute:
scott@TKYTE816> exec tkyte.compile_schema('scott')
alter PROCEDURE scott.ANALYZE_MY_TABLES compile
Successful
*/
могу предложить собственного приготовления:)
declare
p_Schema_Name constant varchar2(10) := '<schema_name>';
begin
for rec in (select DECODE(object_type,'PACKAGE
BODY','PACKAGE',object_type) o_t
,object_name o_n
,DECODE
(object_type,'PACKAGE BODY',' body','') a_b
,DECODE
(object_type,'PACKAGE',1,DECODE(object_type,'TRIGGER',2
,DECODE(object_type,'VIEW',3
,DECODE(object_type,'PACKAGE
BODY',4,0)))) sort
from all_objects where status
= 'INVALID' and owner = p_Schema_Name
order by sort, o_n) loop
execute
immediate 'alter '||rec.o_t||' '||p_Schema_Name||'.'||rec.o_n||'
compile'||rec.a_b;
end loop;
end;
YC> Приветствую всех.
YC> Oracle 8.1.5, Windows
YC> Предисловие
YC> После восстановления схемы (imp) или изменения ее
YC> структуры иногда возникают
YC> объекты (процедуры, триггеры, представления) с
YC> ошибками компиляции. Для
YC> того, чтобы все стало ОК, достаточно их
YC> перекомпилировать. В PL/SQL
YC> Developer есть пункт меню Tools/Compile Invalid
YC> Objects..., который
YC> вытаскивает на свет Божий все такие объекты и
YC> отображает их в одном списке,
YC> а затем легким нажатием одной кнопки все они
YC> перекомпилируются, и приходит
YC> счастье..
YC> Кульминиция
YC> Требуется подсказка, как выполнить то же самое
YC> (поиск и перекомпиляцию
YC> объектов с ошибками компиляции) с помощью
YC> скрипта.
YC> Заключение
YC> Буду благодарен за дельный совет (а лучше,
YC> конечно, скрипт :-)
YC> C Уважением,
YC> Ю.Чевтайкин
YC> geo...@mail.ru, geobo...@mtu-net.ru
--
_____
_ZVV_