Files
Database/CAD/CAD_PAC.SRC
Jos Groot Lipman de2938b9c2 FSN#27706 $Workfile overal vervangen door $Id
svn path=/Database/trunk/; revision=19574
2013-10-23 07:42:19 +00:00

81 lines
2.6 KiB
Plaintext

#ifdef CAD // 22-05-1998 KTH
/*
* $Revision$
* $Id$
*/
CREATE OR REPLACE PACKAGE cad AS
PROCEDURE refreshlegenda (themakey IN NUMBER, reinit IN NUMBER);
END cad;
/
CREATE OR REPLACE PACKAGE BODY cad
AS
PROCEDURE refreshlegenda (themakey IN NUMBER, reinit IN NUMBER)
AS
vname cad_thema.cad_thema_view%TYPE;
lkey cad_thema.cad_legenda_key%TYPE;
tomschrijving cad_thema.cad_thema_omschrijving%TYPE;
sql_stmt VARCHAR2 (1000);
newlegenda BOOLEAN := FALSE;
BEGIN
BEGIN
-- Welke domein en welke legenda?
SELECT cad_thema_view, cad_legenda_key, cad_thema_omschrijving
INTO vname, lkey, tomschrijving
FROM cad_thema
WHERE cad_thema_key = themakey;
EXCEPTION
WHEN NO_DATA_FOUND
THEN
newlegenda := TRUE;
END;
IF newlegenda OR lkey IS NULL
THEN
-- nieuwe legenda
INSERT INTO cad_legenda (cad_legenda_omschrijving, cad_legenda_discreet)
VALUES (SUBSTR(tomschrijving, 1, 32), 1)
RETURNING cad_legenda_key
INTO lkey;
-- gebruiken bij dit thema
UPDATE cad_thema
SET cad_legenda_key = lkey
WHERE cad_thema_key = themakey;
ELSE
-- bestaande legenda, eventueel wissen
IF reinit = 1
THEN
DELETE FROM cad_legendawaarde WHERE cad_legenda_key = lkey;
END IF;
END IF;
sql_stmt :=
'INSERT INTO cad_legendawaarde (cad_legenda_key, cad_legendawaarde_value, cad_legendawaarde_rgb, cad_legendawaarde_omschr) '
|| 'SELECT DISTINCT '
|| TO_CHAR (lkey)
|| ', waarde, '
|| 'TO_CHAR(DBMS_UTILITY.get_hash_value (waarde, 0, POWER (2, 24)), ''0XXXXX'')'
|| ', REPLACE(waarde, ''*'', '''')'
|| ' FROM '
|| vname -- er zit een constraint op cad_thema.cad_thema_view dus relatief SQL-injection safe
|| ' thv WHERE REPLACE (waarde, ''*'', '''') IS NOT NULL'
|| ' AND NOT EXISTS '
|| ' (SELECT cl.cad_legendawaarde_value FROM cad_legendawaarde cl WHERE cl.cad_legendawaarde_value = thv.waarde AND cl.cad_legenda_key = '
|| TO_CHAR (lkey)
|| ')';
DBMS_OUTPUT.put_line (sql_stmt);
EXECUTE IMMEDIATE sql_stmt;
END;
END cad;
/
REGISTERRUN('$Id$')
#endif // CAD