#ifdef ALG
/*
 *  $Revision$
 *  $Id$
 */

CREATE OR REPLACE PACKAGE alg
AS
  PROCEDURE upsertkenmerk (p_kenmerk_key   IN NUMBER,
                           p_alg_key       IN NUMBER,
                           p_waarde        IN VARCHAR2);
END alg;
/

CREATE OR REPLACE PACKAGE BODY alg
AS
    -- Er wordt nu niet getrackt (wat eigenlijk niet zo goed is)
    PROCEDURE upsertkenmerk (p_kenmerk_key   IN NUMBER,
                             p_alg_key       IN NUMBER,
                             p_waarde        IN VARCHAR2)
    AS
        v_count    NUMBER;
        v_niveau   VARCHAR2 (1);
    BEGIN
        -- niveau van prs_kenmerk ophalen, omdat deze ook in prs_kenmerklink wordt opgeslagen
        SELECT alg_kenmerk_niveau
          INTO v_niveau
          FROM alg_kenmerk
         WHERE alg_kenmerk_key = p_kenmerk_key;

        -- Is er al een actuele waarde?
        SELECT COUNT ( * )
          INTO v_count
          FROM alg_onrgoedkenmerk
         WHERE     alg_onrgoed_key = p_alg_key
               AND alg_kenmerk_key = p_kenmerk_key
               AND alg_onrgoedkenmerk_verwijder IS NULL;

        IF v_count = 1
        THEN
            IF p_waarde IS NULL
            THEN
                -- Wissen bestaande waarde
                DELETE alg_onrgoedkenmerk
                 WHERE     alg_onrgoed_key = p_alg_key
                       AND alg_kenmerk_key = p_kenmerk_key
                       AND alg_onrgoedkenmerk_verwijder IS NULL;
            ELSE
                -- Bijwerken bestaande waarde
                UPDATE alg_onrgoedkenmerk
                   SET alg_onrgoedkenmerk_waarde = p_waarde
                 WHERE     alg_onrgoed_key = p_alg_key
                       AND alg_kenmerk_key = p_kenmerk_key
                       AND alg_onrgoedkenmerk_verwijder IS NULL;
            END IF;
        ELSE
            IF p_kenmerk_key IS NOT NULL AND p_waarde IS NOT NULL
            THEN
                -- Registreren waarde
                INSERT INTO alg_onrgoedkenmerk (alg_kenmerk_key,
                                                alg_onrgoed_key,
                                                alg_onrgoed_niveau,
                                                alg_onrgoedkenmerk_waarde)
                    VALUES (p_kenmerk_key,
                            p_alg_key,
                            v_niveau,
                            p_waarde);
            END IF;
        END IF;
    END;
END alg;
/
REGISTERRUN('$Id$')
#endif // ALG
