Ответ 1
Проверьте ошибки с помощью этой команды:
Select * from user_errors where name='Your function name'
Я создал такую функцию
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.
Может ли кто-нибудь предложить мне, как сделать эту функцию в правильном состоянии? спасибо заранее.
Проверьте ошибки с помощью этой команды:
Select * from user_errors where name='Your function name'
Функция компилируется следующим образом:
alter function tax compile;
Затем проверьте ошибки компиляции с помощью:
SHOW ERRORS
Есть две основные причины, когда объект в Oracle недействителен:
Кроме того, некоторые драйверы подключения к базе данных содержат ссылки на объекты в базе данных. Если состояние этого объекта изменяется в базе данных, ссылки остаются устаревшими, и вы получите ошибку, аналогичную приведенной выше.
Вы можете проверить ошибки с помощью команды 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;
Вам не нужно (4)
в списке параметров при объявлении параметра NUMBER
.