Oracle - 触发器和过程编译错误

Oracle - Trigger and Procedure compilation errors

我正在尝试编写一个程序来显示星期几,但我得到的错误是 "ORA-01841: The (full) year must be between -4713 and +9999 and cannot be 0"。 另一个问题是我创建了一个触发器来检查 SCOTT.BONUS.SALARY 中的列是否已更新并计算 "howmuch" - raise 和 returns 它。它说 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;

这个表达不对:

to_char(date'data', 'Day')

数据库尝试将 文字字符串 'data' 计算为 ISO 格式的日期 ('YYYY-MM-DD'),但失败了。

你需要先用to_date()把你的可变字符串变成date,然后to_char():

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