Oracle - ошибки компиляции триггера и процедуры - PullRequest
0 голосов
/ 31 января 2020

Я пытаюсь написать процедуру для отображения дня недели, но я получаю ошибку: «ORA-01841: (полный) год должен быть между -4713 и +9999 и не может быть 0». Другая проблема заключается в том, что я сделал триггер, который проверяет, был ли обновлен столбец в SCOTT.BONUS.SALARY, и вычисляет «сколько» - поднимает и возвращает его. Он говорит, что NEW.SAL должен быть объявлен, но как он может быть объявлен, если это имя столбца ...? Я думаю, что я довольно близок, но мне чего-то не хватает, Может кто-нибудь помочь, пожалуйста? Очень ценится.

-- trigger --
CREATE OR REPLACE TRIGGER Raise 
BEFORE DELETE OR INSERT OR UPDATE ON SCOTT.BONUS
FOR EACH ROW 
WHEN (NEW.SAL > 0.1*OLD.SAL) 
DECLARE 
   howmuch number; 
BEGIN 
   howmuch := 0.1*NEW.SAL; 
   dbms_output.put_line('Bonus changed to 10% - : ' || howmuch); 
END; 
/

    -- Procedure --
CREATE OR REPLACE PROCEDURE Birth_Day(data IN varchar, Dey OUT varchar) IS 
BEGIN        
   select to_char(date'data', 'Day') INTO Dey from dual;
END; 
/    
 -- Starting procedure Birth_Day --
DECLARE
    Dey varchar(20);
begin
    Birth_Day('10/11/2020',Dey); 
end;

enter image description here

1 Ответ

1 голос
/ 31 января 2020

Это выражение неверно:

to_char(date'data', 'Day')

База данных пытается оценить буквенную строку 'data' как дату в формате ISO ('YYYY-MM-DD') и завершается неудачей.

Вам нужно сначала использовать to_date(), чтобы превратить переменную строку в date, а затем to_char():

to_char(to_date(data, 'DD/MM/YYYY'), 'Day')
...