Précédent   Forum des professionnels en informatique > Bases de données > PostgreSQL > Débuter
Débuter Forum d'entraide : Débuter en base de données avec 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/07/2011, 14h06   #1
Membre du Club
 
Inscription : novembre 2008
Messages : 270
Détails du profil
Informations forums :
Inscription : novembre 2008
Messages : 270
Points : 50
Points : 50
Par défaut [PL/Pgsql] Erreur de LOOP

Bonjour,
j'ai les boucles imbriquées suivantes :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
	j := 1;
 
	FOR tab IN SELECT unnest(tableau) LOOP
		--La première ligne du tableau contient les noms des colonnes, on passe aux suivantes
		IF j = 1 THEN
			j := j+1;
			CONTINUE; 
		END IF;
 
		i := 1;
 
		FOR elem IN SELECT unnest(tab) LOOP
			--La première colonne du tableau contient les noms des lignes, on passe aux suivantes
			IF i = 1 THEN
				i := i+1;
				CONTINUE; 
			ELSE IF elem IS NOT NULL THEN
				trouve := 1;
			END IF;
 
			--Si la ligne contient au moins une case non nulle, elle est gardée et on passe à la ligne suivante
			IF trouve = 1 THEN
				RETURN NEXT tab;
				EXIT;
			END IF;
 
		END LOOP;
 
	END LOOP;
avec i, j et trouve des entiers, tableau un tableau à 2 dimensions de varchar, tab un record et elem un varchar.

Je veux récupérer toutes les lignes de tableau qui ont au moins un élément non nul : éliminer toutes les lignes nulles.
A noter que les premières ligne et colonne du tableau contiennent des titres. C'est un tableau croisé.

Lorsque j'exécute, j'ai l'erreur suivante :
Code :
1
2
3
4
5
6
7
8
9
ERREUR:  erreur de syntaxe sur ou près de « LOOP »
LINE 113:   END LOOP;
                ^
 
********** Erreur **********
 
ERREUR: erreur de syntaxe sur ou près de « LOOP »
État SQL :42601
Caractère : 2018
yo_haha est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/07/2011, 15h15   #2
Modérateur
 
Inscription : octobre 2008
Messages : 1 508
Détails du profil
Informations personnelles :
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : octobre 2008
Messages : 1 508
Points : 2 040
Points : 2 040
Remplacer ELSE IF par ELSIF sinon il semble que les IF/END IF ne soient pas équilibrés.
estofilo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/07/2011, 15h46   #3
Membre du Club
 
Inscription : novembre 2008
Messages : 270
Détails du profil
Informations forums :
Inscription : novembre 2008
Messages : 270
Points : 50
Points : 50
Merci beaucoup. Il n'y a plus de message d'erreur.
yo_haha est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/07/2011, 15h59   #4
Membre du Club
 
Inscription : novembre 2008
Messages : 270
Détails du profil
Informations forums :
Inscription : novembre 2008
Messages : 270
Points : 50
Points : 50
Par contre, lorsque j'appelle la fonction
Code :
SELECT * FROM ma_fonction()
J'ai une erreur
Code :
1
2
ERREUR:  une liste de définition de colonnes est requise pour les fonctions renvoyant
un « record »
J'ai essayé de suivre le conseil donné dans cette discussion http://www.developpez.net/forums/d89...sultat-select/ en remplaçant record par text dans le retour de la fonction Mais j'ai cette erreur
Code :
ERREUR:  indice du tableau en dehors de l'échelle
Dans ma fonction j'utilise un tableau de 2 dimensions déclaré comme suit que je remplie sans initialisation parce que je ne connaît pas le nombre de lignes ni de colonnes dont j'aurai besoin => cela dépond du résultat d'une requête SELECT.
yo_haha est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 23h15.


 
 
 
 
Partenaires

Hébergement Web