我创建了一个这样的功能
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.
任何人都可以建议我如何让这个功能处于有效状态? 提前谢谢。
答案 0 :(得分:12)
使用此命令检查错误:
Select * from user_errors where name='Your function name'
答案 1 :(得分:7)
函数编译如下:
alter function tax compile;
然后,使用以下命令检查编译错误:
SHOW ERRORS
Oracle中的对象无效时有两个主要原因:
此外,某些数据库连接驱动程序会保留对数据库中对象的引用。如果这些对象的状态在数据库中发生变化,引用就会失效,您将收到类似于上述错误的错误。
答案 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 客户端中找到该函数并从菜单或工具栏中选择编译函数。