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

Bha*_*ana 16 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;
/
Run Code Online (Sandbox Code Playgroud)

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

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

它显示错误

ERROR: ORA-O6575: package or function tax is in invalid state.
Run Code Online (Sandbox Code Playgroud)

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

小智 15

使用此命令检查错误:

Select * from user_errors where name='Your function name'
Run Code Online (Sandbox Code Playgroud)


Kla*_*äck 9

函数编译如下:

alter function tax compile;
Run Code Online (Sandbox Code Playgroud)

然后,检查编译错误:

SHOW ERRORS
Run Code Online (Sandbox Code Playgroud)

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

  1. 代码无效(并在您尝试编译时给出了错误消息).解决方案当然是修复错误然后重新编译它.
  2. 该对象引用另一个对象,另一个对象已更改.解决方案是重新编译无效对象.

此外,某些数据库连接驱动程序会保留对数据库中对象的引用.如果这些对象的状态在数据库中发生变化,则引用将变为陈旧,您将收到类似于上述错误的错误.


Pab*_*ruz 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;
Run Code Online (Sandbox Code Playgroud)

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