Colega, com absoluta certeza um simples erro de datatype *** não *** invalida uma stored procedure, o que deixa uma procedure de banco inválida é QUALQUER alteração nos objetos de que ela depende, seja DDL nesses objetos, seja alteração por outros meios. O que vc ** TEM ** que estar ciente, e que é algo amplamente comentado nos manuais de PL/SQL, é a dependência em cascata, ie, se uma alteração qquer deixa um objeto X inválido, em X ficando inválido AUTOMATICAMENTE ** todos ** que dependem de X ficam inválidos também. Exemplo (em banco 9ir2 EE mas é o mesmo pro XE, iirc) :
[EMAIL PROTECTED]:SQL>create function F_CONTA_TAB_P return number is 2 x number; 3 BEGIN 4 select count(*) into x from TAB_P; 5 return x; 6 END; 7 / Função criada. [EMAIL PROTECTED]:SQL>create or replace procedure P2 is 2 y number; 3 BEGIN 4 y := F_CONTA_TAB_P; 5 . [EMAIL PROTECTED]:SQL>create or replace procedure P2 (P_DATA in date) is 2 y number; 3 BEGIN 4 y := F_CONTA_TAB_P; 5 END; 6 / Procedimento criado. [EMAIL PROTECTED]:SQL>create or replace procedure P1 (P1_DATA in DATE) is 2 BEGIN 3 P2(P1_DATA); 4 END; 5 / Procedimento criado. ==> ok, verificando o status : [EMAIL PROTECTED]:SQL>select object_type, object_name, status from all_objects where object_name in ('P1', 'P2', 'F_CONTA_TAB_P'); OBJECT_TYPE OBJECT_NAME STATUS ------------------ ------------------------------ ------- FUNCTION F_CONTA_TAB_P VALID PROCEDURE P1 VALID PROCEDURE P2 VALID ==> executo sem erros : [EMAIL PROTECTED]:SQL>exec P1(sysdate); Procedimento PL/SQL concluído com sucesso. [EMAIL PROTECTED]:SQL>select object_type, object_name, status from all_objects where object_name in ('P1', 'P2', 'F_CONTA_TAB_P'); OBJECT_TYPE OBJECT_NAME STATUS ------------------ ------------------------------ ------- FUNCTION F_CONTA_TAB_P VALID PROCEDURE P1 VALID PROCEDURE P2 VALID ==> agora vou executar e receberei erro de datatype , já que não existe dia 32 : [EMAIL PROTECTED]:SQL>exec P1(to_date('32/12/2007', 'dd/mm/yyyy')); BEGIN P1(to_date('32/12/2007')); END; * ERRO na linha 1: ORA-01847: dia do mês deve ser um valor entre 1 e o último dia do mês ORA-06512: em line 1 ==> ora veja, o status *** NÃO MUDOU ***, como nNÂO FAZ SENTIDO ter mudado : [EMAIL PROTECTED]:SQL>select object_type, object_name, status from all_objects where object_name in ('P1', 'P2', 'F_CONTA_TAB_P'); OBJECT_TYPE OBJECT_NAME STATUS ------------------ ------------------------------ ------- FUNCTION F_CONTA_TAB_P VALID PROCEDURE P1 VALID PROCEDURE P2 VALID ==>>> AGORA vou fazer uma ** ALTERAÇÃO ** numa dependência indireta : [EMAIL PROTECTED]:SQL>drop table TAB_P; Tabela eliminada. ==> PRONTO, F_CONTA_TAB_P precisava do objeto TAB_P, não existe mais (ou não tem acesso, enfim, não conseguiu mais resolver a dependência) , F_CONTA_TAB_P ficou inválido. Isso acontecendo, temos que P2 precisava de F_CONTA_TAB_P, com F_CONTA_TAB_P inválido P2 ficou inválido, e vaid daí que P1 precisava de P2, P2 ficando inválido automaticamente P1 não tema mais o que precisa, invalida também.... Veja só : [EMAIL PROTECTED]:SQL>select object_type, object_name, status from all_objects where object_name in ('P1', 'P2', 'F_CONTA_TAB_P'); OBJECT_TYPE OBJECT_NAME STATUS ------------------ ------------------------------ ------- FUNCTION F_CONTA_TAB_P INVALID PROCEDURE P1 INVALID PROCEDURE P2 INVALID ===>>> OK ??? Então é isso, com quase ABSOLUTA certeza, alguém (seja um humano, seja um proggrama - via job, trigger ou execução direta, não importa), seja middleware mal-comportado, enfim, , alguém/algo está invalidando um componente que era preciso pros seus programas... Pra vc saber, já que é algo 100% ** ESPECÍFICO ** do seu ambiente, a única opção é mesmo um trabalho de DEBUG, ie, com tudo válido vc executar passo-a-passo a tal rotina, consultando o status como eu fiz acima, pra vc descobrir quem/o que é. Pelo jeito, talvez alguma das rotinas que a tua proc chama faça DDL, aí quando vc não passa um datatype correto o DDL falha e deixa tudo como invalid, acho que é por aí..... []s Chiappa --- Em oracle_br@yahoogrupos.com.br, Elias Magalhães da Paixão Junior <[EMAIL PROTECTED]> escreveu > > Pessoal, > > > > Reparei que as procedures estão ficando inválidas sozinhas. A única coisa q > fiz, foi executa-las e tomei alguns erros normais. String onde era inteiro, > data inválida, esses lances. Minha pergunta é: Tomar um erro numa procedure > Válida a faz se tornar inválida? Se não, o que faz então? > > > > Elias Magalhães da Paixão Junior > > ___________________________________ > > Análise de Sistemas e Banco de Dados > > Consultoria e desenvolvimento de programas, sistemas e websites > > Tel.: (0XX21) 8262-7955 > > > > > > [As partes desta mensagem que não continham texto foram removidas] >