数据库触发器以验证节点是否为叶节点

时间:2018-07-27 11:50:16

标签: oracle triggers tree

我是数据库新手,我有一个要求。我有一个包含节点的表。表 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

请让我知道以上触发器是否达到目的。

1 个答案:

答案 0 :(得分:0)

  1. 那是我见过的最奇怪的树定义:)
  2. 不,您的触发器还不够。

a)我假设如果您连接两个节点,而当其中至少一个不是叶节点时,那么您想引发错误,而不仅仅是“返回”;从触发器中退出

b)为了使树与定义保持一致,还必须实现一个触发器,如果​​该节点的父节点“连接”到其他节点,则该触发器将不允许您插入任何新节点。

只是出于好奇:您需要这种“树”做什么?