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

Function Oracle 10G:ORA-06575:函数处于无效状态,function,oracle10g,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.2

我创建了这样一个函数

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 stmt like中使用此tax函数时

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.
有人能建议我如何使这个函数处于有效状态吗?
提前感谢。

请确保编译的函数没有错误。这就是Oracle告诉您的错误: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)

函数编译如下:

alter function tax compile;
然后,使用以下命令检查编译错误:

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

  • 代码无效(并给出了一个 当您尝试删除时出现错误消息 编译它)。解决办法是 修复错误的过程,然后 重新编译它
  • 该对象引用了另一个对象,而另一个对象是 改变。解决办法是 重新编译无效对象

  • 此外,一些数据库连接驱动程序保留对数据库中对象的引用。如果这些对象在数据库中的状态发生更改,则引用将过时,您将收到与上述错误类似的错误。

    使用此命令检查错误:

    Select * from user_errors where name='Your function name'
    
    您可以使用
    SHOW error
    命令检查错误

    SQL> show error function Your_Function_Name;
    

    请更仔细地编排问题的格式,避免使用所有大写标题。另外,请接受您的问题的相关答案。请参阅常见问题解答,网址为