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

问题描述 投票:-1回答:1

我正在尝试编写一个显示星期几的过程,但是我得到的错误是“ 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

sql oracle date triggers procedure
1个回答
1
投票

此表达式不正确:

to_char(date'data', 'Day')

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

您需要先使用to_date()将变量字符串转换为date,然后再转换为to_char()

to_char(to_date(data, 'DD/MM/YYYY'), 'Day')
© www.soinside.com 2019 - 2024. All rights reserved.