![]() |
| Le forum de référence en programmation et développement. Articles, cours et tutoriels du débutant au chef de projet et DBA confirmé. | |||||||
|
|||||||
| DB2 Forum d'entraide technique sur la base de données DB2. Voir aussi -> Rubrique DB2 |
![]() |
|
|
Outils de la discussion |
|
|
#1 (permalink) |
|
Futur Membre du Club
![]() Date d'inscription: juin 2004
Messages: 38
|
Bonjour,
Je suis dans une fonction SQL. Avec les paremetres d'entree de cette fonction j'ai construit ma requete. Il me faut maintenant l'éxécuter... mais je ne vois pas comment faire ? (Je suis sous DB2 mais j'imagine que les solutions sont +/- les memes dans tous les SGBD) Merci, Gaël |
|
|
|
|
|
#2 (permalink) |
|
Membre expérimenté
![]() Date d'inscription: mai 2004
Localisation: Racour (province de Liège)
Messages: 516
|
Tu serais mieux de poster le code de la fonction...
Pour SQL Server : ce que tu mentionnes n'est pas possible car une fonction sous SS ne peut pas être dynamique. Avec une stored procedure, cela marcherait : définition d'une variable varchar() que tu initialiserais et que tu exécuterais avec un exec sp_executesql. Bonne chance.
__________________
Christophe |
|
|
|
|
|
#3 (permalink) |
|
Futur Membre du Club
![]() Date d'inscription: juin 2004
Messages: 38
|
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: Code :
EXECUTE IMMEDIATE STR_QUERY INTO RETURN_VALUE;
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) Code :
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 |
|
|
|
|
|
#4 (permalink) |
|
Membre expérimenté
![]() Date d'inscription: mai 2004
Localisation: Racour (province de Liège)
Messages: 516
|
Je ne connais pas DB2; désolé. Une fois encore, avec SQL Server, c'est impossible : une fonction ne peut pas contenir un SQL dynamique.
__________________
Christophe |
|
|
|
|
![]() |
![]() |
||
Executer une requete construite dans une string
|
||
| Outils de la discussion | |
|
|