【发布时间】:2021-05-24 02:58:25
【问题描述】:
我正在创建一个触发器,用于检查 Majorcode 列在插入或更新之前是否为空,如果是则输入默认值“100”
我的代码:
CREATE TRIGGER MUmajorcode_changes
BEFORE INSERT OR UPDATE ON M_Students
FOR EACH ROW
BEGIN
IF NEW.Majorcode = null THEN
SET NEW.Majorcode = '100';
END IF;
运行后我收到以下消息 警告:创建的触发器存在编译错误。
然后当我实际插入一个带有空白主代码的新值时。
我收到以下消息/错误:
第 1 行出现错误:
ORA-04098: trigger 'SCOTT.MUMAJORCODE_CHANGES' is invalid and failed re-validation.
这是我最初设置表格的方式:
CREATE TABLE M_Students
(
ID CHAR(3) PRIMARY KEY,
FName VARCHAR2(25),
LName VARCHAR2(25),
Status VARCHAR2(25),
Majorcode CHAR(3) REFERENCES Departments(DeptCode),
GPA NUMBER (4,2),
AdmittedDate DATE
);
不知道我哪里出错了?
【问题讨论】:
-
几个错误两件事:你更好的测试'是空的'而不是'=空'。并且你需要一个END来结束触发器,NEW前面应该有':',并去掉SET。要查找在 sqlplus 中创建触发器时引发的错误,请在创建触发器后执行“显示错误”。
-
不知道我哪里出错了? 您没有使用正确的 PL/SQL 语法。 Oracle 文档是您的朋友。搜索您正在使用的 Oracle 数据库版本的“PL/SQL 语言参考”。
-
您是否尝试使用 Oracle DEFAULT ON NULL 您可能不需要触发器,ALTER TABLE M_Students MODIFY Majorcode DEFAULT ON NULL '100';
-
@Baloo - 如果任何答案解决了您的问题,那么请接受该答案。这有助于未来的提问者对以前的工作有类似的问题。如果没有什么可以帮助母鸡用仍未解决的问题更新问题。只是不要让一个成功回答的问题悬而未决。