このような機能を作成しました
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.
この関数を有効な状態にする方法を誰かが私に提案できますか?前もって感謝します。
このコマンドでエラーを確認してください:
Select * from user_errors where name='Your function name'
関数は次のようにコンパイルされます。
alter function tax compile;
次に、コンパイルエラーを確認します。
SHOW ERRORS
Oracleのオブジェクトが無効である場合、2つの主な理由があります。
また、一部のデータベース接続ドライバーは、データベース内のオブジェクトへの参照を保持します。これらのオブジェクトの状態がデータベースで変更されると、参照が古くなり、上記と同様のエラーが発生します。
エラーはSHOW ERROR
コマンドで確認できます
SQL> show error function Your_Function_Name;
関数がエラーなしでコンパイルされていることを確認してください。これが、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)
は必要ありません。