Oracle 10G:ORA-06575:处于无效状态的函数

时间:2011-03-06 12:11:13

标签: function oracle10g

我创建了一个这样的功能

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

当我在插入stmt中使用此税务功能时,如

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.

任何人都可以建议我如何让这个功能处于有效状态? 提前谢谢。

5 个答案:

答案 0 :(得分:12)

使用此命令检查错误:

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

答案 1 :(得分:7)

函数编译如下:

alter function tax compile;

然后,使用以下命令检查编译错误:

SHOW ERRORS

Oracle中的对象无效时有两个主要原因:

  1. 代码无效(并给出了一个 您尝试时出现错误消息 编译它)。解决方案是 当然要修复错误然后 重新编译它。
  2. 对象引用另一个对象而另一个对象是 改变。解决方案是 重新编译无效对象。
  3. 此外,某些数据库连接驱动程序会保留对数据库中对象的引用。如果这些对象的状态在数据库中发生变化,引用就会失效,您将收到类似于上述错误的错误。

答案 2 :(得分:3)

您可以使用SHOW ERROR命令

检查错误
SQL> show error function Your_Function_Name;

答案 3 :(得分: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;

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

答案 4 :(得分:0)

<块引用>

ORA-O6575:包或函数税处于无效状态。

表示该函数需要编译。本声明

alter function tax compile;

应该编译该函数,但在某些情况下它完成时没有错误,但实际上没有做任何事情。 (dBeaver 就是这种情况)。

在这种情况下,在您的 SQL 客户端中找到该函数并从菜单或工具栏中选择编译函数。