En gros je veux faire une requete dynamique, je passe en parametres la table dans laquelle je vais lire, la colonne que jutilise pour faire ma jointure, le champs que je vais lire ... avec ca je construis ma requete en concaténant tout ca.
Maintenant il me reste a l'executer. La requete retournera toujours 1 seul record donc j'aimerais directement renvoyer le resultat de cette colonne lue qui sera de type entier.
(possibilité d'avoir 0 record retourné mais je m'arrangerai pour faire un test plus tard genre si count(*) = 0 je renvoi pas le resultat de ma requete mais le code -1)
En gros j'ai cherché à utiliser EXECUTE IMMEDIATE mais apparemment sous DB2 on peut pas l'utiliser avec un select ??
Je cherchais a faire un truc du genre:
EXECUTE IMMEDIATE STR_QUERY INTO RETURN_VALUE;
...mais ca marche pas
VOila pour le code de ma fonction dans letat actuel: (je retourne pour linstant une string qui contient la requete que j'ai construite plutot que le resultat de celle ci)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| CREATE FUNCTION OX00UC1.MUL_POINTER_LOOKUP
(DB_SCHEMA VARCHAR(30),
HUB_TO_USE VARCHAR(30),
HUB_JOIN_KEY VARCHAR(30),
HUB_FIELD_TO_READ VARCHAR(254),
SOURCE_VALUE BIGINT
)
RETURNS VARCHAR(254)
BEGIN ATOMIC
DECLARE STR_QUERY VARCHAR(4000) DEFAULT '';
SET STR_QUERY = 'SELECT ' CONCAT HUB_FIELD_TO_READ CONCAT
' FROM ' CONCAT DB_SCHEMA CONCAT '.' CONCAT HUB_TO_USE CONCAT
' WHERE ' CONCAT HUB_JOIN_KEY CONCAT ' = ' CONCAT CAST (SOURCE_VALUE AS CHARACTER(10));
RETURN STR_QUERY;
END |
Merci pour l'aide
Partager