Forum des développeurs  

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é.
Précédent   Forum des développeurs > Bases de données > DB2

DB2 Forum d'entraide technique sur la base de données DB2. Voir aussi -> Rubrique DB2

Réponse
 
Outils de la discussion
Vieux 30/10/2008, 16h19   #1 (permalink)
Futur Membre du Club
 
Date d'inscription: juin 2004
Messages: 38
Par défaut Executer une requete construite dans une string

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
gael.mases est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 30/10/2008, 16h51   #2 (permalink)
Membre expérimenté
 
Avatar de cavo789
 
Date d'inscription: mai 2004
Localisation: Racour (province de Liège)
Messages: 516
Par défaut

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
cavo789 est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 31/10/2008, 08h45   #3 (permalink)
Futur Membre du Club
 
Date d'inscription: juin 2004
Messages: 38
Par défaut

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;
...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)
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
Merci pour l'aide
gael.mases est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 31/10/2008, 09h46   #4 (permalink)
Membre expérimenté
 
Avatar de cavo789
 
Date d'inscription: mai 2004
Localisation: Racour (province de Liège)
Messages: 516
Par défaut

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
cavo789 est déconnecté   Envoyer un message privé Réponse avec citation
NEWS DB2F.A.Q DB2TUTORIELS DB2TUTORIELS SQLLIVRES DB2

Réponse

Précédent   Forum des développeurs > Bases de données > DB2



Outils de la discussion

Règles de messages
Vous ne pouvez pas créer de nouvelles discussions
Vous ne pouvez pas envoyer des réponses
Vous ne pouvez pas envoyer des pièces jointes
Vous ne pouvez pas modifier vos messages

Les balises BB sont activées : oui
Les smileys sont activés : oui
La balise [IMG] est activée : oui
Le code HTML peut être employé : non
Trackbacks are non
Pingbacks are non
Refbacks are non
Navigation rapide


Fuseau horaire GMT +1. Il est actuellement 01h38.


Publiez vos articles, tutoriels et cours et rejoignez-nous dans l'équipe de rédaction du club d'entraide des développeurs francophones. Nous contacter
Copyright 2000-2009 www.developpez.com - Legal informations