2011-03-06 20 views
10

我创建了一个函数,这样的Oracle 10g:ORA-06575:功能处于无效状态

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; 
/

,当我在插入语句中使用此税之类的函数

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

它显示像

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

任何人都可以建议我如何使这个功能处于有效状态? 在此先感谢。

+3

检查错误(S)请更小心格式化您的问题,并避免ALLCAPS冠军。另外,请接受您的问题的相关答案。请参阅http://stackoverflow.com/faq上的常见问题解答 – Mat 2011-03-06 12:18:04

回答

2

确保您的功能没有出现任何错误。这就是Oracle用ERROR: ORA-06575告诉你的。

与此语句来创建你的函数:

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; 

声明中参数NUMBER时,您不需要(4)参数列表上。

7

一个函数编译如下:

alter function tax compile; 

然后,检查是否与编译错误:

SHOW ERRORS 

主要有两个原因,而在甲骨文的对象是无效的:

  1. 的代码是无效的(当你试图 一声 错误信息编译它)。解决方案是 当然要修复错误,然后 重新编译它。
  2. 的对象引用另一个对象和另一对象是 改变。解决的办法是到 重新编译无效的对象。

此外,一些数据库连接的驱动保持引用数据库中的对象。如果这些对象的状态在数据库中发生变化,那么引用就会过时,并且会出现与上面类似的错误。

10

检查错误,用这个命令:

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

你可以用SHOW ERROR命令

SQL> show error function Your_Function_Name; 
相关问题