【问题标题】:Oracle 10G: ORA-06575: function in invalid stateOracle 10G:ORA-06575:函数处于无效状态
【发布时间】:2023-03-10 18:05:01
【问题描述】:

我创建了一个这样的函数

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 中使用此税务功能时

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.

谁能建议我如何使此功能处于有效状态? 提前致谢。

【问题讨论】:

  • 请更仔细地格式化您的问题,并避免使用全大写标题。另外,请接受您问题的相关答案。请参阅stackoverflow.com/faq 的常见问题解答

标签: function oracle10g


【解决方案1】:

使用此命令检查错误:

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

【讨论】:

    【解决方案2】:

    一个函数是这样编译的:

    alter function tax compile;
    

    然后,检查编译错误:

    SHOW ERRORS
    

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

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

    此外,一些数据库连接驱动程序保留对数据库中对象的引用。如果数据库中这些对象的状态发生变化,则引用会失效,您将收到与上述类似的错误。

    【讨论】:

      【解决方案3】:

      您可以使用SHOW ERROR 命令检查错误

      SQL> show error function Your_Function_Name;
      

      【讨论】:

        【解决方案4】:

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

        【讨论】:

          【解决方案5】:

          ORA-O6575:包或功能税处于无效状态。

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

          alter function tax compile;
          

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

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2013-05-06
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2020-06-26
            相关资源
            最近更新 更多