2011-03-06 45 views
10

creé una funcion como estoOracle 10G: ORA-06575: la función de estado no válido

CREATE OR REPLACE FUNCTION tax 
(p_sal IN NUMBER(4)) 
RETURN NUMBER 
AS 
v_tax NUMBER(4); 
BEGIN 
v_tax:= CASE   
WHEN p_sal> 4000 THEN 
p_sal*0.33  
WHEN p_sal >2500 THEN 
p_sal*0.25  
WHEN p_sal >1500 THEN 
p_sal*0.20  
ELSE 0   
END; 
RETURN v_tax; 
END; 
/

cuando he usado esta función tributaria en stmt inserto como

INSERT INTO employees(eno, ename, job, join_date, sal, comm) 
VALUES (7784,'allen','salesman',sysdate, 5000, tax(5000)); 

que muestra el error como

ERROR: ORA-O6575: package or function tax is in invalid state. 

¿alguien puede sugerirme cómo hacer que esta función se encuentre en estado válido? gracias de antemano.

+3

Debe formatear sus preguntas con más cuidado, y evitar títulos MAYÚSCULAS. Además, acepte respuestas relevantes a sus preguntas. Consulte las preguntas frecuentes en http://stackoverflow.com/faq – Mat

Respuesta

2

Asegúrese de que su función compilada sin errores. Eso es lo que Oracle te dice con ERROR: ORA-06575.

Crear su función con esta declaración:

CREATE OR REPLACE FUNCTION tax (p_sal IN NUMBER) 
    RETURN NUMBER AS 
    v_tax NUMBER(4); 
BEGIN 
    v_tax:= CASE 
    WHEN p_sal> 4000 THEN p_sal*0.33 
    WHEN p_sal >2500 THEN p_sal*0.25 
    WHEN p_sal >1500 THEN p_sal*0.20 
    ELSE 0 
    END; 
    RETURN v_tax; 
END; 

No es necesario el (4) en la lista de parámetros cuando se declara un NUMBER en el parámetro.

7

Una función se compila como esto:

alter function tax compile; 

A continuación, comprobar si hay errores de compilación con:

SHOW ERRORS 

Hay dos razones principales, mientras que un objeto en Oracle no es válido:

  1. El código no es válido (y dio un mensaje de error cuando intentó compilarlo). La solución es del curso para corregir el error y luego recompilarlo.
  2. El objeto hace referencia a otro objeto y el otro objeto fue cambiado. La solución es recompilar el objeto no válido.

Además, algunos controladores de conexión de bases de datos mantienen referencias a objetos en la base de datos. Si el estado de esos objetos cambia en la base de datos, las referencias quedan obsoletas y obtendrá un error similar al anterior.

10

Verificar errores con este comando:

Select * from user_errors where name='Your function name' 
3

Puede comprobar el error (s) con el comando SHOW ERROR

SQL> show error function Your_Function_Name; 
Cuestiones relacionadas