我是数据库新手,我有一个要求。我有一个包含节点的表树。表 ConnectedNodes 包含连接的节点
CREATE TABLE Tree ( nodeID NUMBER(16,0), parentID NUMBER(16,0))
CREATE TABLE ConnectedNodes (node1 NUMBER(16,0), node2 NUMBER(16,0))
只能连接叶节点。因此,我需要在表 ConnectedNodes 上写一个 Insert / Update Trigger ,以检查两个节点是否均为叶节点
我正在使用Oracle 12c数据库。
下面是触发器实现
CREATE TRIGGER TR_VerifyLeafNodes
BEFORE INSERT OR UPDATE ON ConnectedNodes
FOR EACH ROW
DECLARE
children NUMBER;
n1 NUMBER(16,0) := :NEW.node1;
n2 NUMBER(16,0) := :NEW.node2;
BEGIN
SELECT COUNT(*) INTO children
FROM Tree
WHERE parentID = n1 OR parentID = n2;
IF(children > 0)
THEN
RETURN;
ELSE
DBMS_OUTPUT.put_line('Trigger yet to be implemented');
END IF;
END
请让我知道以上触发器是否达到目的。
答案 0 :(得分:0)
a)我假设如果您连接两个节点,而当其中至少一个不是叶节点时,那么您想引发错误,而不仅仅是“返回”;从触发器中退出
b)为了使树与定义保持一致,还必须实现一个触发器,如果该节点的父节点“连接”到其他节点,则该触发器将不允许您插入任何新节点。
只是出于好奇:您需要这种“树”做什么?