Précédent   Forum des professionnels en informatique > Bases de données > PostgreSQL
PostgreSQL Forum PostgreSQL. Avant de poster -> F.A.Q PostGreSQL Tutoriels PostGreSQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 19/07/2007, 10h03   #1
Membre habitué
 
Avatar de cysboy
 
Développeur informatique
Inscription : août 2006
Messages : 221
Détails du profil
Informations personnelles :
Âge : 32
Localisation : France

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : août 2006
Messages : 221
Points : 129
Points : 129
Par défaut [Procedure] interroger une fonction.

Bonjour tout le monde.

Je souhaiterais savoir s'il est possible d'interroger une procedure via une requete SQL...
Genre :
Code :
SELECT * FROM <ma_procedure>
Ou doit-on passer par un trigger..?

Merci d'avance pour vos réponses !
cysboy est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/07/2007, 10h07   #2
ced
Rédacteur/Modérateur

 
Avatar de ced
 
Homme Cédric Duprez
Inscription : avril 2002
Messages : 3 823
Détails du profil
Informations personnelles :
Nom : Homme Cédric Duprez
Âge : 36
Localisation : France, Loiret (Centre)

Informations professionnelles :
Secteur : Agroalimentaire - Agriculture

Informations forums :
Inscription : avril 2002
Messages : 3 823
Points : 6 423
Points : 6 423
Ouh là, il y a confusion sur les termes...
Une procédure et un trigger ne renvoient pas d'informations.
C'est une fonction qui fait ça. Donc, ta synthaxe est correcte pour une fonction.

ced
ced est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/07/2007, 11h11   #3
Membre habitué
 
Avatar de cysboy
 
Développeur informatique
Inscription : août 2006
Messages : 221
Détails du profil
Informations personnelles :
Âge : 32
Localisation : France

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : août 2006
Messages : 221
Points : 129
Points : 129
Oui, je me suis un peu mélangé les pinceaux....
J'ai réussit à interroger ma fonction, mais par contre je n'arrive pas à à insérer le résultat de ma requête dans mon objet ROW...

Si tu as une idée sur la question... Voici mon morceau de code test:

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
 
requete text;
row ht_tradlibellefenetre%ROWTYPE;		
 
BEGIN
	requete:= 'SELECT INTO ' || row || ' lfe_lib_s FROM ht_tradlibellefenetre';
	requete := requete || ' INNER JOIN hp_libellefenetre ON lfe_id = tlfe_lfe_k ';
	requete := requete || ' AND lfe_cod_s = ' || quote_literal(code);
 
	IF isActive = 'Y' THEN
			requete := requete || ' AND lfe_isactive = ' || quote_literal('Y');
	END IF;
	IF restriction <> 'none' THEN
		requete := requete || ' AND lfe_fen_k = ' || quote_literal(fen_id);
		requete := requete || ' AND lfe_gpf_k = ' || quote_literal(gpf_id);
	END IF;
 
	EXECUTE requete;
Je cherche ardemment le problème mais sans succés... j'ai cette erreur:

Code :
1
2
3
4
5
 
ERROR: could NOT find array type FOR DATA type ht_tradlibellefenetre
État SQL :42704
Contexte : SQL statement "SELECT  'SELECT INTO ' ||  $1  || ' lfe_lib_s FROM ht_tradlibellefenetre'"
PL/pgSQL FUNCTION "hpt_tradlibellefenetre" line 13 at assignment
J'avais précédemment essayer avec une variable de type "record" mais une erruer venait se glilsser... le code était le même, seul la déclaration de type de row était différente (maintenant ht_tradlibellefenetre%ROWTYPE avant record)

En tous cas, merci de ton aide.
cysboy est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/07/2007, 11h18   #4
Membre habitué
 
Avatar de cysboy
 
Développeur informatique
Inscription : août 2006
Messages : 221
Détails du profil
Informations personnelles :
Âge : 32
Localisation : France

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : août 2006
Messages : 221
Points : 129
Points : 129
En fait j'ai un autre soucis plus... gênant...
Ma requête ne s'execute pas en fait... j'ai un zoli message d'errur :
Code :
1
2
3
4
 
ERROR: cannot EXECUTE a NULL querystring
État SQL :22004
Contexte : PL/pgSQL FUNCTION "hpt_tradlibellefenetre" line 25 at execute statement
Donc si je comprend bien... pour lui ma chaine qui contient ma requête n'est pas une requête...
Je pensais pouvoir faire celà comme çà mais apparemment ... Non !

EDIT: Le problème vient de ma variable row ! Si je l'enlève ma requête contient de nouveau quelque chose....
cysboy est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/07/2007, 11h45   #5
Membre émérite
 
Avatar de hpalpha
 
Inscription : mars 2002
Messages : 770
Détails du profil
Informations forums :
Inscription : mars 2002
Messages : 770
Points : 833
Points : 833
Bonjour,

pour le select * from <mafonction> tu peux regarder ici :

http://postgresql.developpez.com/faq...kees#appelproc
hpalpha est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/07/2007, 12h01   #6
Membre habitué
 
Avatar de cysboy
 
Développeur informatique
Inscription : août 2006
Messages : 221
Détails du profil
Informations personnelles :
Âge : 32
Localisation : France

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : août 2006
Messages : 221
Points : 129
Points : 129
Merci beaucoup j'arrive à interroger ma fonction... Mais celle-ci ne veut pas exécuter ma requête....

Pourtant quant je lui demande de me retourner la chaîne de caractères, la requête est bonne ! Seulement et seulement si j'enlève ma clause 'INTO' et ma variable de type %ROW...

je sens que je touche au but mais là je suis un peu dans le brouillard.... allez ! je vais manger ! les frites portent conseil...
cysboy est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/07/2007, 13h37   #7
Membre habitué
 
Avatar de cysboy
 
Développeur informatique
Inscription : août 2006
Messages : 221
Détails du profil
Informations personnelles :
Âge : 32
Localisation : France

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : août 2006
Messages : 221
Points : 129
Points : 129
je recherche queqlque chose aussi... je sais que çà existe mais je ne rappel plus du nom et de la syntaxe....

En gros il s'agit d'un argument de condition IF pour savoir si un SELECT à renvoyer une valeur... Je ne sais pas si je suis très claire... mais je n'arrive pas à retrouver l'info
cysboy est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/07/2007, 15h15   #8
Membre émérite
 
Avatar de hpalpha
 
Inscription : mars 2002
Messages : 770
Détails du profil
Informations forums :
Inscription : mars 2002
Messages : 770
Points : 833
Points : 833
je pense que tu parles de FOUND :


SELECT * FROM matable where id=111;
IF FOUND THEN
...
END IF;
hpalpha est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 03h48.


 
 
 
 
Partenaires

Hébergement Web