FSN#25871 refreshlegenda functie

svn path=/Database/trunk/; revision=19058
This commit is contained in:
Jos Groot Lipman
2013-09-11 10:01:30 +00:00
parent 74250ad3bc
commit 15db4713ab

View File

@@ -4,6 +4,10 @@
* $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)
@@ -39,8 +43,16 @@ AS
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 '
@@ -49,20 +61,15 @@ AS
|| 'TO_CHAR(DBMS_UTILITY.get_hash_value (waarde, 0, POWER (2, 24)), ''0XXXXX'')'
|| ', REPLACE(waarde, ''*'', '''')'
|| ' FROM '
|| vname
|| ' thv WHERE waarde IS NOT NULL';
|| 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);
IF reinit <> 1
THEN
sql_stmt :=
sql_stmt || ' 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)
|| ')';
END IF;
EXECUTE IMMEDIATE sql_stmt;
END;
END cad;