web-dev-qa-db-ja.com

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;
/

この税関数を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.

この関数を有効な状態にする方法を誰かが私に提案できますか?前もって感謝します。

17
Bhavana

このコマンドでエラーを確認してください:

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

関数は次のようにコンパイルされます。

alter function tax compile;

次に、コンパイルエラーを確認します。

SHOW ERRORS

Oracleのオブジェクトが無効である場合、2つの主な理由があります。

  1. コードが無効です(コンパイルしようとしたときにエラーメッセージが表示されました)。もちろん、解決策はエラーを修正してから再コンパイルすることです。
  2. オブジェクトが別のオブジェクトを参照し、他のオブジェクトが変更されました。解決策は、無効なオブジェクトを再コンパイルすることです。

また、一部のデータベース接続ドライバーは、データベース内のオブジェクトへの参照を保持します。これらのオブジェクトの状態がデータベースで変更されると、参照が古くなり、上記と同様のエラーが発生します。

9
Klas Lindbäck

エラーはSHOW ERRORコマンドで確認できます

SQL> show error function Your_Function_Name;
4
Phi

関数がエラーなしでコンパイルされていることを確認してください。これが、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)は必要ありません。

2