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