簡體   English   中英

數據庫觸發器以驗證節點是否為葉節點

[英]Database Trigger to verify if the node is leaf or not

我是數據庫新手,但有要求。 我有一個包含節點的表 ConnectedNodes包含連接的節點

CREATE TABLE Tree ( nodeID NUMBER(16,0), parentID NUMBER(16,0))

CREATE TABLE ConnectedNodes (node1 NUMBER(16,0), node2 NUMBER(16,0))

只能連接葉節點。 因此,我需要在表ConnectedNodes上編寫一個插入/更新 觸發器 ,以檢查兩個節點是否均為葉節點

我正在使用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. 那是我見過的最奇怪的樹定義:)
  2. 不,您的觸發器還不夠。

a)我假設如果您連接兩個節點,而當其中至少一個不是葉節點時,那么您想引發錯誤,而不僅僅是“返回”; 從觸發

b)為了使樹與定義保持一致,還必須實現一個觸發器,如果​​該節點的父節點“連接”到其他節點,則該觸發器將不允許您插入任何新節點。

出於好奇:您需要這種“樹”做什么?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM