hallo!
Ich habe eine „nicht DB2“ Tabelle, die u.a. zu den User-Kennungen die Anteilungsbezeichnung enthält.
Wir haben eine Userdefined-Function im SQL mit welcher wir beim select den User mit geben und als Ergebnis die Abteilung erhalten.
SELECT
DRTADM.USERGRP_D(T1SAB) AS EMPF
Das ist auch alles gut.
Mein Problem ist nun folgendes:
bei einem sog. technischen User, habe ich keine Abteilung. Es kommt also der Wert BLANK zurück.
Ich möchte nun, wenn das Ergebnis Blank ist,
die ersten 4 Stellen des technischen Users in der Liste anlisten.
„Selectiere Abtlg mit Hilfe von UDF.
wenn Ablung leer dann nimm erste 4 Stellen vom user
else nimm UDF-Ergebnis“ oder umgekehrt.
Also habe ich es mit dem Case-Befehl versucht.
Z.B. so:
CASE DRTADM.USERGRP_D(T1SAB)
WHEN ‚‘
THEN (SUBSTR(T1SAB, 1, 4))
END,
oder so:
CASE
WHEN EXISTS(SELECT * FROM DRTADM.GRUREF1
WHERE DRTADM.USERGRP_D(T1SAB)^= ‚‘)
THEN DRTADM.USERGRP_D(T1SAB)
ELSE (SUBSTR(T1SAB, 1, 4))
END,
Fehlermeldungen waren z.B.:
DSNT408I SQLCODE = -583, ERROR: THE USE OF FUNCTION OR EXPRESSION USE
OF FUNCTION OR EXPRESSION USERGRP_D IS INVALID BECAUSE IT IS NOT DETERMINISTIC OR
HAS AN EXTERNAL ACTION
und:
DSNT408I SQLCODE = -582, ERROR: THE SEARCH-CONDITION IN A SEARCHED-WHEN-CLAUSE CANNOT BE A QUANTIFIED PREDICATE, IN PREDICATE, OR AN EXISTS PREDICATE
DSNT418I SQLSTATE = 42625 SQLSTATE RETURN CODE
Ich habe den Eindruck, eine UDF darf ich nicht in einer case und auch nicht in einer exists - Abfrage benutzen.
Hat jemand einen Tipp, wie sich das lösen lässt ???
LG aus HH
Bettina