31.10.2013 13:06
leonid
 
Вопрос праздный, потому в курилке.
Была скомпилирована процедура. Потом что-то в связанном объекте поправили. Процедура стала инвалидной. Но ведь продолжает работать?!
Везде пишут, как перекомпилировать. А зачем - не пишут)
31.10.2013 13:22
OlegON
 
ты бумажки дома на пол бросаешь? а зачем в мусор? ходить же не мешает... |-)
если процедуру явно не скомпилировать, то, как минимум, она будет неявно компилироваться каждый раз во время выполнения, что сказывается хотя бы и на производительности, не говоря уж о том, что появление незапланированных инвалидов в куче других просто брошенных пройдет незамеченным...
31.10.2013 15:56
leonid
 
При вызове процедура скомпилировалась сама!

Код:
SQL> 
SQL> drop table t1;

Таблица удалена.

SQL> 
SQL> create table t1
  2  (
  3   num number(10),
  4   text varchar2(100)
  5  );

Таблица создана.

SQL> 
SQL> create or replace procedure myproc is begin insert into t1 values('1','xxx');  commit;  end myproc;
  2  /

Процедура создана.

SQL> 
SQL> select a.object_name,  status from all_objects a where object_name = 'MYPROC';

OBJECT_NAME                    STATUS                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   
------------------------------ -------                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  
MYPROC                         VALID                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    

1 строка выбрана.

SQL> 
SQL> drop table t1;

Таблица удалена.

SQL> 
SQL> create table t1
  2  (
  3   num number(10),
  4   text varchar2(100)
  5  );

Таблица создана.

SQL> 
SQL> select a.object_name,  status from all_objects a where object_name = 'MYPROC';

OBJECT_NAME                    STATUS                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   
------------------------------ -------                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  
MYPROC                         INVALID                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  

1 строка выбрана.

SQL> 
SQL> exec myproc;

Процедура PL/SQL успешно завершена.

SQL> 
SQL> select a.object_name,  status from all_objects a where object_name = 'MYPROC';

OBJECT_NAME                    STATUS                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   
------------------------------ -------                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  
MYPROC                         VALID                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    

1 строка выбрана.

SQL> 
SQL> spool off;
31.10.2013 16:06
OlegON
 
Если честно, как было в голове про явную и неявную компиляцию, так и не заморачивался. Т.е. инвалиды должны быть скомпилированы и точка :)
Если очень интересно продолжить исследования, то предлагаю озвучить версию и создать цепочку из зависимых объектов, а потом обратиться к верхнему, т.е. от которого будет зависеть инвалид, от которого в свою очередь будет зависеть еще один.
31.10.2013 16:11
leonid
 
(версия оракла 9.2.0.8 под виндой)
цепочку создавать лень)
но догадываюсь, что объекты сами не всегда компилируются
31.10.2013 16:13
OlegON
 
вот чем держать в голове кучу условий, лучше принять за аксиому, что инвалиды в БД - зло :)
Часовой пояс GMT +3, время: 11:26.

Форум на базе vBulletin®
Copyright © Jelsoft Enterprises Ltd.
В случае заимствования информации гипертекстовая индексируемая ссылка на Форум обязательна.