Amigo,

O problema não está na sua função e sim na forma que vc está chamando a mesma, 
não sei como vc está chamando a mesma mas funções que executam operações DDL, 
COMMIT ou ROLLBACK no BD não podem ser chamadas dentro de uma query. 
Ex:

select fc_limpeza_base_dados_srta(9999) 

 from dual;


No caso acima vai gerar o erro. Segue abaixo alguns exemplos que podem te 
ajudar:

1º Ex

DECLARE
   VAR   NUMBER;
   FUNCTION A
      RETURN NUMBER
   IS
   BEGIN
      ROLLBACK;
      RETURN 1;
   END;
BEGIN
   SELECT A
     INTO VAR               --> Com esse comando dá o erro.
     FROM DUAL;

   VAR := A;                        -- Com esse funciona.
END;

2º Ex

CREATE FUNCTION A
   RETURN NUMBER
IS
BEGIN
   ROLLBACK;
   RETURN 1;
END;

SELECT A
  FROM DUAL;   --> Aqui vc tambem consegue simular o erro.


Espero ter ajudado.

Roberto Valenza.
----- Mensagem original ----
De: Mÿffffe1rcio Vilariÿfffff1o <[EMAIL PROTECTED]>
Para: [email protected]
Enviadas: Quarta-feira, 8 de Novembro de 2006 10:28:53
Assunto: [oracle_br] Error ORA-14552 ao executar a Function




Bom Dia!!!!!



Estou tento executar o Function abaixo e está me apresentando o seguinte erro :



ORA-14552:    cannot perform a DDL, commit or rollback inside a query or DML



Gostaria de saber o que está errado no codigo?



Desde já agredeço da todos..





CREATE OR REPLACE Function fc_limpeza_base_dados_srta(p_no_ano_mes_cmpt In 
Number)

RETURN NUMBER IS

 

 ERRO EXCEPTION;

 V_CT_NO_ANO_MES_CMPT LOG_LIMPEZA_BASE_SRTA.NO_ANO_MES_CMPT%Type;



BEGIN



    

    IF p_no_ano_mes_cmpt IS NULL Then

            RAISE ERRO;

    ELSE

        

        select NO_ANO_MES_CMPT Into V_CT_NO_ANO_MES_CMPT 

        from LOG_LIMPEZA_BASE_SRTA

        where NO_ANO_MES_CMPT = p_no_ano_mes_cmpt;

    

        IF V_CT_NO_ANO_MES_CMPT IS NOT NULL THEN

           RAISE ERRO;

        END IF;

        

    END IF;



    

    delete from PEDIDO_PRODUTOS_SUPRIMENTOS where NO_ANO_MES_CMPT = 
p_no_ano_mes_cmpt;



    delete from PEDIDO_PRODUTOS_SUPRIMENTOS where NO_ANO_MES_CMPT = 
p_no_ano_mes_cmpt;

    

    delete from HISTORICO_PRECO_MEDIO_REAL where NO_ANO_MES_CMPT = 
p_no_ano_mes_cmpt;



    delete from HIST_PRECO_MEDIO_REFERENCIA where NO_ANO_MES_CMPT = 
p_no_ano_mes_cmpt;



    delete from ESTIMATIVA_TRANSFERENCIA_ALC where NO_ANO_MES_CMPT = 
p_no_ano_mes_cmpt;



    delete from ESTIMATIVA_ALOCACAO_ALCOOL where NO_ANO_MES_CMPT = 
p_no_ano_mes_cmpt;



    delete from FORNECEDOR_ALCOOL_PRECO_REF where NO_ANO_MES_CMPT = 
p_no_ano_mes_cmpt;



    delete from TRANSFERENCIA_ALCOOL where NO_ANO_MES_CMPT = p_no_ano_mes_cmpt;



    delete from ALOCACAO_ALCOOL where NO_ANO_MES_CMPT = p_no_ano_mes_cmpt;



    delete from COMPRA_ALCOOL where NO_ANO_MES_CMPT = p_no_ano_mes_cmpt;

    



    COMMIT;

    

    -- PROCESSAMENTO TERMINOU COM SUCESSO

    insert into log_processamento 

    (CD_USUARIO, DT_PROC , TIMESTAMP_PROC , CD_PGM , NO_SEQ, TP_OPER, DS_MSG)

    values

    ('PRODUCAO', current_timestamp, current_timestamp, 'LIMPEZA_SRTA', 1, 'E', 
'TERMINO NORMAL' );

    

    COMMIT;

    

    RETURN 1; 





EXCEPTION



    

    WHEN ERRO then

    

         ROLLBACK;

    

         -- NÃO PASSOU NA VERIFICAÇÃO DA COMPETENCIA

         insert into log_processamento 

         (CD_USUARIO, DT_PROC , TIMESTAMP_PROC , CD_PGM , NO_SEQ, TP_OPER, 
DS_MSG)

         values

         ('PRODUCAO', current_timestamp, current_timestamp, 'LIMPEZA_SRTA', 1, 
'E', 'TERMINO ANORMAL' );

    

         COMMIT;

         

         RETURN 0; 



    WHEN OTHERS Then

    

         ROLLBACK;

    

         -- HOUVE FALHA DURANTE O PROCESSAMENTO

         insert into log_processamento 

         (CD_USUARIO, DT_PROC , TIMESTAMP_PROC , CD_PGM , NO_SEQ, TP_OPER, 
DS_MSG)

         values

         ('PRODUCAO', current_timestamp, current_timestamp, 'LIMPEZA_SRTA', 1, 
'E', 'TERMINO ANORMAL' );

    

        COMMIT;

         

         RETURN 0;



END fc_limpeza_base_dados_srta;

/













            

_______________________________________________________ 

Novidade no Yahoo! Mail: receba alertas de novas mensagens no seu celular. 
Registre seu aparelho agora! 

http://br.mobile.yahoo.com/mailalertas/ 

 





[As partes desta mensagem que não continham texto foram removidas]











                
_______________________________________________________ 
Yahoo! Acesso Grátis - Internet rápida e grátis. Instale 
o discador agora! 
http://br.acesso.yahoo.com

[As partes desta mensagem que não continham texto foram removidas]



Sábado Agora: ENPO-BR 2006 - Encontro Nacional de Profissionais Oracle
VISITE: http://www.enpo-br.org/ - Dia 11/11 "Vagas Limitadas"
________________________________________________________________
Este Grupo recebe o apoio da SQL Magazine - www.devmedia.com.br/sqlmagazine 
--------------------------------------------------------------------------------------------------------------------------
Atenção! As mensagens do grupo ORACLE_BR são de acesso público e de inteira 
responsabilidade de seus remetentes.
Acesse: http://www.mail-archive.com/[email protected]/ 
--------------------------------------------------------------------------------------------------------------------------
O GRUPO ORACLE_BR TEM SEU PROPRIO ESPAÇO! VISITE: http://www.oraclebr.com.br/  
------------------------------------------------------------------------------------------------------------------------
  
Links do Yahoo! Grupos

<*> Para visitar o site do seu grupo na web, acesse:
    http://br.groups.yahoo.com/group/oracle_br/

<*> Para sair deste grupo, envie um e-mail para:
    [EMAIL PROTECTED]

<*> O uso que você faz do Yahoo! Grupos está sujeito aos:
    http://br.yahoo.com/info/utos.html

 

Responder a