我正在尝试编写一个显示星期几的过程,但是我得到的错误是“ 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;
此表达式不正确:
to_char(date'data', 'Day')
数据库试图将文字字符串 'data'
评估为ISO格式('YYYY-MM-DD'
)的日期,但失败。
您需要先使用to_date()
将变量字符串转换为date
,然后再转换为to_char()
:
to_char(to_date(data, 'DD/MM/YYYY'), 'Day')