2011-03-06 19 views
10

我創建了一個函數,這樣的Oracle 10g:ORA-06575:功能處於無效狀態

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 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. 

任何人都可以建議我如何使這個功能處於有效狀態? 在此先感謝。

+3

檢查錯誤(S)請更小心格式化您的問題,並避免ALLCAPS冠軍。另外,請接受您的問題的相關答案。請參閱http://stackoverflow.com/faq上的常見問題解答 – Mat 2011-03-06 12:18:04

回答

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; 

聲明中參數NUMBER時,您不需要(4)參數列表上。

7

一個函數編譯如下:

alter function tax compile; 

然後,檢查是否與編譯錯誤:

SHOW ERRORS 

主要有兩個原因,而在甲骨文的對象是無效的:

  1. 的代碼是無效的(當你試圖 一聲 錯誤信息編譯它)。解決方案是 當然要修復錯誤,然後 重新編譯它。
  2. 的對象引用另一個對象和另一對象是 改變。解決的辦法是到 重新編譯無效的對象。

此外,一些數據庫連接的驅動保持引用數據庫中的對象。如果這些對象的狀態在數據庫中發生變化,那麼引用就會過時,並且會出現與上面類似的錯誤。

10

檢查錯誤,用這個命令:

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

你可以用SHOW ERROR命令

SQL> show error function Your_Function_Name; 
相關問題