DBA Data[Home] [Help]

TRIGGER: APPS.CZ_PS_NODES_T5

Source

Description
CZ_PS_NODES_T5
  BEFORE INSERT OR UPDATE OF
    parent_id,
    minimum,
    maximum,
    counted_options_flag,
    deleted_flag,
    instantiable_flag,
    ui_omit
  ON CZ_PS_NODES
  REFERENCING OLD AS OLD NEW AS NEW
  FOR EACH ROW
Type
BEFORE EACH ROW
Event
INSERT OR UPDATE
Column
When
Referencing
REFERENCING NEW AS NEW OLD AS OLD
Body
DECLARE
  l_update_devl_project BOOLEAN;
  l_count NUMBER;
BEGIN
  l_update_devl_project := FALSE;

  -- time stamp add
  IF INSERTING THEN
    IF :new.UI_TIMESTAMP_ADD IS NULL THEN
      :new.UI_TIMESTAMP_ADD:=SYSDATE;
      l_update_devl_project := TRUE;
    END IF;
  END IF;

  -- time stamp add
  IF UPDATING AND (:old.ui_omit='1' AND :new.ui_omit='0') THEN
    :new.UI_TIMESTAMP_ADD:=SYSDATE;
    l_update_devl_project := TRUE;
  END IF;

  -- time stamp remove
  IF UPDATING AND (
          (:old.deleted_flag<>:new.deleted_flag) OR
          (:old.ui_omit='0' AND :new.ui_omit='1')) THEN
    :new.UI_TIMESTAMP_REMOVE:=SYSDATE;
    l_update_devl_project := TRUE;
  END IF;

  -- time stamp move
  IF UPDATING AND (:old.parent_id<>:new.parent_id) THEN
    :new.UI_TIMESTAMP_MOVE:=SYSDATE;
    l_update_devl_project := TRUE;
  END IF;

  -- time stamp changetype
  IF UPDATING THEN

     -- time stamp reorder FP Bug 5926323
    IF (:old.tree_seq<>:new.tree_seq) THEN
      :new.UI_TIMESTAMP_REORDER := SYSDATE;
      l_update_devl_project := TRUE;
    END IF;

    IF :new.ps_node_type = CZ_TYPES.PS_NODE_TYPE_FEATURE
      AND :new.feature_type = 0
      AND ( ((:old.maximum IS NULL)<>(:new.maximum IS NULL))
            OR(:old.maximum = 1 AND :new.maximum <> 1)
            OR (:old.maximum <> 1 AND :new.maximum = 1)
            OR ( :old.counted_options_flag IN ('0', 'N') AND :new.counted_options_flag IN ('1', 'Y'))
            OR ( :old.counted_options_flag IN ('1', 'Y') AND :new.counted_options_flag IN ('0', 'N'))
          ) THEN
        :new.UI_TIMESTAMP_CHANGETYPE:=SYSDATE;
        l_update_devl_project := TRUE;
    END IF;

    IF :old.instantiable_flag <> :new.instantiable_flag
       AND :new.ps_node_type IN (CZ_TYPES.PS_NODE_TYPE_COMPONENT, CZ_TYPES.PS_NODE_TYPE_PRODUCT, CZ_TYPES.PS_NODE_TYPE_REFERENCE) THEN
        :new.UI_TIMESTAMP_CHANGETYPE:=SYSDATE;
        l_update_devl_project := TRUE;
    END IF;

    IF ((NVL(:old.minimum,-1) <> NVL(:new.minimum,-1)) OR (NVL(:old.maximum,-1) <> NVL(:new.maximum,-1)) OR NVL(:old.instantiable_flag,'*') <> NVL(:new.instantiable_flag,'*'))
       AND :new.ps_node_type=CZ_TYPES.PS_NODE_TYPE_CONNECTOR THEN
        :new.UI_TIMESTAMP_CHANGETYPE:=SYSDATE;
        l_update_devl_project := TRUE;
    END IF;

  END IF;

  IF l_update_devl_project THEN
    UPDATE CZ_DEVL_PROJECTS
    SET UI_TIMESTAMP_STRUCT_UPDATE = SYSDATE
    WHERE devl_project_id = :new.devl_project_id;
  END IF;
END;