Sql Oracle触发器:如果数据库B中不存在值,则在数据库a中的表中显示错误
我有两个表,但这些表在不同的数据库中。我试图做的是创建一个触发器,当我更新学生表时,当我输入大学表中不存在的大学时,它应该向我显示一个错误。然而,我没有得到任何错误。以下是我的尝试: 表:Sql Oracle触发器:如果数据库B中不存在值,则在数据库a中的表中显示错误,sql,oracle,triggers,Sql,Oracle,Triggers,我有两个表,但这些表在不同的数据库中。我试图做的是创建一个触发器,当我更新学生表时,当我输入大学表中不存在的大学时,它应该向我显示一个错误。然而,我没有得到任何错误。以下是我的尝试: 表: UNIVERSITY - DatabaseA | Student(PK) | State | | A | X State | | B | Y State | | C | B State | STUDENT - DatabaseB |
UNIVERSITY - DatabaseA
| Student(PK) | State |
| A | X State |
| B | Y State |
| C | B State |
STUDENT - DatabaseB
| Student_Name (PK) | Grade | University (PK)(FK) |
| James | D | A |
| Andrew | HD | B |
| James | D | C |
触发:
DELIMITER //
CREATE OR REPLACE TRIGGER student_trigger
BEFORE UPDATE ON student
FOR EACH ROW
DECLARE temp_count INTEGER;
BEGIN
SELECT COUNT(*) INTO temp_count
FROM university@DatabaseA u
WHERE u.Student = :OLD.Student;
IF (temp_count < 1)
THEN RAISE_APPLICATION_ERROR(-20101, 'Error:Uni doesnt exist');
END IF;
END;
但是,当我执行如下所示的更新时,如果我尝试更新数据库A中大学表中不存在的大学,则不会出现错误,只会得到“0行受影响”:
UPDATE student
SET Grade = 'C'
WHERE Student_Name = 'James'
AND University = 'something_that_doesnt_exist';
如果我输入的大学名称在数据库的大学表中不存在,如何使其显示错误a将对满足update语句条件的表的每一行执行update触发器 在第二种情况下
UPDATE student
SET Grade = 'C'
WHERE Student_Name = 'James'
AND University = 'something_that_doesnt_exist';
不影响任何行,因此根本不执行触发器。对满足update语句条件的表的每一行执行update触发器 在第二种情况下
UPDATE student
SET Grade = 'C'
WHERE Student_Name = 'James'
AND University = 'something_that_doesnt_exist';
没有行受到影响,因此根本不会执行触发器。为什么名为
University
的表有一个名为Student
的主键列?您的数据结构看起来非常笨拙。很抱歉,学生表有一个由大学名和学生名组成的复合主键。我编辑了我的问题请将更新声明的表名从房间调整为学生
为什么名为大学
的表有一个名为学生
的主键列?您的数据结构看起来非常笨拙。很抱歉,学生表有一个由大学名和学生名组成的复合主键。我编辑了我的问题,请将更新声明的表名从房间
调整为学生
啊哈,这非常有意义,谢谢你,弗兰克,非常感谢你的帮助啊哈,这非常有意义,谢谢你,弗兰克,非常感谢你的帮助