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 31/10/2008, 08h49   #1 (permalink)
Futur Membre du Club
 
Date d'inscription: juin 2004
Messages: 38
Par défaut SQL dynamique: PL/SQL -> DB2

Cette fonction PL/SQL peut elle trouver un equivalent dans DB2 ?
Code :
 
FUNCTION Compte_rec
  (
        PC$Table IN VARCHAR2,
        PC$ClauseWhere IN VARCHAR2
  ) RETURN PLS_INTEGER
IS
  LC$Requete      VARCHAR2(512) ;
  LN$Total        PLS_INTEGER ;
BEGIN
  LC$Requete := ‘SELECT count(*) FROM ‘ || PC$Table || ‘ WHERE ‘ || PC$ClauseWhere ;
  EXECUTE IMMEDIATE LC$Requete INTO LN$Total ;
  RETURN LN$Total ;
END ;
 
...je n'arrive pas a utiliser en DB2 le EXECUTE IMMEDIATE avec ma requete construite comme dans l'exemple ci dessus en string pour recuperer le resultat de la requete.

Merci pour l'aide
gael.mases est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 31/10/2008, 10h29   #2 (permalink)
Membre habitué
 
Date d'inscription: mai 2008
Messages: 149
Par défaut

L'Execute IMMEDIATE ne permet pas de SELECT et encore moins de INTO.
Si on veux faire du Dynamique, il faut passer par un curseur.
Voir ce post ou je donne un exemple identique
K2R400 est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 31/10/2008, 10h57   #3 (permalink)
Futur Membre du Club
 
Date d'inscription: juin 2004
Messages: 38
Par défaut

Merci bcoupn J'ai effectivement compris comment faire avec ta solution.

...seulement pour une raison que je n'arrive vraiment pas a comprendre la declaration d'un cursor me donne une erreur, que je passe par une variable pour ma requete, que je la mette directement ...
(j'utilise Quest Central)

Par ex, fonction simplissime ou je declare juste un cursor dont je me sers pas pour le moment vu que ca compile pas :
Code :
CREATE FUNCTION TOTO()RETURNS VARCHAR(254)
  LANGUAGE SQL
  BEGIN ATOMIC
  	DECLARE c1 CURSOR FOR SELECT count(*) FROM OX00UC1.OKDGLA_HUB;
	RETURN 'aaa';
  END
...et bah je recois cette erreur:
Code :
Statement processed with ERROR.
[DB2/6000] SQL0104N  An unexpected token "FOR" was found following "IC DECLARE c1 CURSOR". Expected tokens may include: "<SQL_variable_declarations>". LINE NUMBER=1.  SQLSTATE=42601
*** Execution stopped due to error *** 
Autre truc bizarre sur lequel je cherche des eclaircissement:
rien ne fonctionne si je mets pas ATOMIC apres mon BEGIN
gael.mases est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 31/10/2008, 15h25   #4 (permalink)
Membre chevronné
 
Avatar de Mercure
 
Date d'inscription: novembre 2004
Localisation: Région parisienne
Messages: 615
Par défaut

Quelle DB2 utilises-tu ? Sous quel OS ?
__________________
Philippe
Mercure 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 23h44.


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