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 04/05/2005, 16h09   #1
Membre habitué
 
Avatar de Tchinkatchuk
 
Homme Sylvain Gourvil
Freelance en développement Web
Inscription : mars 2005
Messages : 248
Détails du profil
Informations personnelles :
Nom : Homme Sylvain Gourvil
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Freelance en développement Web
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : mars 2005
Messages : 248
Points : 141
Points : 141
Par défaut Procedures stockées qui appellent un autre ?

Bonjour,

j'ai une question a poser aux experts que vous etes.
J'ai lu les différentes docs de SQLPro sur ce theme mais je n'ai pas trouvé.

comment faire en sorte que lorsque que j'execute ce code
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
CREATE OR REPLACE FUNCTION deleteantiquaire(int4)
  RETURNS int4 AS
$BODY$
DECLARE 
	identifiant ALIAS FOR $1;
	r record;
BEGIN
	FOR r IN SELECT id_objet FROM objet_commun WHERE id_antiquaire = identifiant loop
 
	end loop;
END;
%BODY%
LANGUAGE 'plpgsql' VOLATILE;
je puisse appeller une autre PS qui effacera tous les id_objets et appellera une autre etc.
J'aurais pu tester mais ma base pourrait en subir les conséquences. Ca risquerait de gueuler mais si ce n'est evidemment pas la base de prod.

Merci d'avance.
Tchinkatchuk est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/05/2005, 16h58   #2
Membre habitué
 
Avatar de Tchinkatchuk
 
Homme Sylvain Gourvil
Freelance en développement Web
Inscription : mars 2005
Messages : 248
Détails du profil
Informations personnelles :
Nom : Homme Sylvain Gourvil
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Freelance en développement Web
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : mars 2005
Messages : 248
Points : 141
Points : 141
bon, j'ai enfin trouvé grace a la doc officielle ! ok, je sors

mais mon code ne semble pas fonctionner. La fonction est bien créée mais elle n'est aps executée
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
CREATE OR REPLACE FUNCTION deleteantiquaire(int4)
  RETURNS int2 AS
 
DECLARE identifiant ALIAS FOR $1;
DECLARE r record;
BEGIN
	FOR r IN SELECT id_objet FROM objet_commun WHERE id_antiquaire = identifiant loop
		deleteobjet(r.id_objet);
	end loop;
	DELETE FROM antiquaire_prestation WHERE id_antiquaire = identifiant; 
	DELETE FROM boutique_specialites  WHERE id_antiquaire = identifiant; 
	DELETE FROM pages_perso	 	  WHERE id_antiquaire = identifiant; 
	DELETE FROM antiquaire_client     WHERE id_antiquaire = identifiant; 
	DELETE FROM francais	 	  WHERE id_antiquaire = identifiant; 
	RETURN 0;
END;
 
  LANGUAGE 'plpgsql' VOLATILE;
ALTER FUNCTION deleteantiquaire(int4) OWNER TO postgres;
GRANT EXECUTE ON FUNCTION deleteantiquaire(int4) TO public;
GRANT EXECUTE ON FUNCTION deleteantiquaire(int4) TO postgres;
J'obtiens ceci à l'execution :
Code :
1
2
3
4
 
ERROR:  syntax error at OR near "deleteobjet" at character 1
QUERY:  deleteobjet( $1 )
CONTEXT:  PL/pgSQL FUNCTION "deleteantiquaire" line 6 at SQL statement
... La je seche !
Tchinkatchuk est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/05/2005, 17h32   #3
Membre habitué
 
Avatar de Tchinkatchuk
 
Homme Sylvain Gourvil
Freelance en développement Web
Inscription : mars 2005
Messages : 248
Détails du profil
Informations personnelles :
Nom : Homme Sylvain Gourvil
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Freelance en développement Web
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : mars 2005
Messages : 248
Points : 141
Points : 141
Autant pour moi

pour les newbies comme moi, ca peut toujours servir

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
CREATE OR REPLACE FUNCTION deleteantiquaire(int4)
  RETURNS int2 AS
$BODY$
DECLARE identifiant ALIAS FOR $1;
DECLARE r record;
BEGIN
	FOR r IN SELECT * FROM objet_commun WHERE id_antiquaire = identifiant loop
		perform deleteobjet(r.id_objet);
	end loop;
	DELETE FROM antiquaire_prestation WHERE id_antiquaire = identifiant; 
	DELETE FROM boutique_specialites  WHERE id_antiquaire = identifiant; 
	DELETE FROM pages_perso_eng 	  WHERE id_antiquaire = identifiant; 
	DELETE FROM pages_perso_fra 	  WHERE id_antiquaire = identifiant; 
	DELETE FROM pages_perso	 	  WHERE id_antiquaire = identifiant; 
	DELETE FROM antiquaire_client     WHERE id_antiquaire = identifiant; 
	DELETE FROM francais	 	  WHERE id_antiquaire = identifiant; 
	RETURN 0;
END;
$BODY$
  LANGUAGE 'plpgsql';
ALTER FUNCTION deleteantiquaire(int4) OWNER TO postgres;
GRANT EXECUTE ON FUNCTION deleteantiquaire(int4) TO public;
GRANT EXECUTE ON FUNCTION deleteantiquaire(int4) TO postgres;
Tchinkatchuk est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/05/2005, 17h47   #4
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 me permet juste de souligner, pour les newbies :
on appelle une fonction avec l'instruction perform

(Desole Tchinkatchuk, mais ce n'etait pas tres visible ta modif)
hpalpha est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/05/2005, 09h30   #5
Membre habitué
 
Avatar de Tchinkatchuk
 
Homme Sylvain Gourvil
Freelance en développement Web
Inscription : mars 2005
Messages : 248
Détails du profil
Informations personnelles :
Nom : Homme Sylvain Gourvil
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Freelance en développement Web
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : mars 2005
Messages : 248
Points : 141
Points : 141
il n'y a pas de problemes !
Tchinkatchuk 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 06h47.


 
 
 
 
Partenaires

Hébergement Web