Précédent   Forum des professionnels en informatique > Bases de données > Oracle > SQL
SQL Forum d'entraide sur le SQL pour Oracle
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 01/07/2008, 16h44   #1
Membre régulier
 
Inscription : février 2005
Messages : 283
Détails du profil
Informations forums :
Inscription : février 2005
Messages : 283
Points : 84
Points : 84
Par défaut [8i] Erreur dans une procédure

Bonjour,

Lorsque je compile cette procédure, Oracle me retourne l'erreur suivante :

Code :
1
2
3
4
5
6
7
 
16:42:57 SQL> SHOW error
Erreurs pour PROCEDURE REMPLIR_TABLE_STAT_INDEX :
 
28/4     PL/SQL: Statement ignored
28/25    PLS-00306: wrong number OR types of arguments IN call TO '||'
16:43:00 SQL>
Voici le code de ma procédure :
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
30
31
32
33
 
CREATE OR REPLACE PROCEDURE remplir_table_stat_index IS 
 
CURSOR index_stat IS
	SELECT	name,
             	height,
             	lf_rows,
             	del_lf_rows
	FROM	index_stats;
 
v_index_stat index_stat%rowtype;
 
CURSOR nom_Index IS
	SELECT	index_name, 
		tablespace_name
	FROM	user_indexes
	WHERE	index_name = 'PS_ESTHER_IND3';
 
v_nom_index nom_Index%rowtype;
 
BEGIN
DBMS_OUTPUT.ENABLE(100000);
 
FOR v_nom_index IN nom_index
	LOOP
		EXECUTE IMMEDIATE 'analyze index ' || v_nom_index.index_name ||' validate structure';
		OPEN index_stat;
			fetch index_stat INTO v_index_stat;
			DBMS_OUTPUT.PUT_LINE(v_index_stat || '');
		CLOSE index_stat;
   	END LOOP;
END;
/
Je ne vois pas ce qui pose problème ..

Merci pour votre aide,
A.Personnat
apersonnat est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/07/2008, 16h51   #2
Membre expérimenté
 
Inscription : juillet 2007
Messages : 495
Détails du profil
Informations personnelles :
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : juillet 2007
Messages : 495
Points : 585
Points : 585
Je pense que ça vient de ton DBMS_OUTPUT.PUT_LINE à la fin, auquel tu balances v_index_stat qui est un ROWTYPE.
Il faudrait peut-être préciser la ou les variable(s) du ROWTYPE utilisée(s).
__________________
Des chercheurs qui cherchent, on en trouve, mais des chercheurs qui trouvent, on en cherche !
dgi77 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/07/2008, 17h01   #3
Membre régulier
 
Inscription : février 2005
Messages : 283
Détails du profil
Informations forums :
Inscription : février 2005
Messages : 283
Points : 84
Points : 84
"préciser la ou les variable(s) du ROWTYPE utilisée(s)."

Humm désolé mais je ne vois pas trop, pourrais tu stp préciser ta pensée ?

Merci,
Alain
apersonnat est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/07/2008, 17h06   #4
Membre expérimenté
 
Inscription : juillet 2007
Messages : 495
Détails du profil
Informations personnelles :
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : juillet 2007
Messages : 495
Points : 585
Points : 585
Dans ton curseur index_stat, tu sélectionnes name, height, lf_rows et del_lf_rows. Donc il faut spécifier v_index_stat.name ou v_index_stat.height par exemple. Ou les combiner en les concaténant avec ||
Par exemple :
Code :
1
2
 
DBMS_OUTPUT.PUT_LINE('Nom : ' || v_index_stat.name || ' - Taille : ' || v_index_stat.height  || '');
Entre parenthèse, tes '' à la fin me semblent inutiles.
__________________
Des chercheurs qui cherchent, on en trouve, mais des chercheurs qui trouvent, on en cherche !
dgi77 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/07/2008, 17h12   #5
Rédacteur/Modérateur
 
Avatar de Vincent Rogier
 
vincent rogier
Inscription : juillet 2007
Messages : 2 355
Détails du profil
Informations personnelles :
Nom : vincent rogier
Âge : 34

Informations forums :
Inscription : juillet 2007
Messages : 2 355
Points : 3 108
Points : 3 108
L'erreur se situe la :

Code :
DBMS_OUTPUT.PUT_LINE(v_index_stat || '');
tu ne peux pas passer un record (v_index_stat) à put_line()...

Il faut passer les camps un à un...

[edit] : me suis fait griller...
__________________
Vincent Rogier.

Rubrique ORACLE : Accueil - Forum - Tutoriels - FAQ - Livres - Blog

Vous voulez contribuer à la rubrique Oracle ? Contactez la rubrique !

OCILIB (C Driver for Oracle)

Librairie C Open Source multi-plateformes pour accéder et manipuler des bases de données Oracle
Vincent Rogier est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/07/2008, 17h16   #6
Membre régulier
 
Inscription : février 2005
Messages : 283
Détails du profil
Informations forums :
Inscription : février 2005
Messages : 283
Points : 84
Points : 84
Bien vu

Merci pour ton aide

En te souhaitant une bonne fin de journée

Cdt,
Alain
apersonnat 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 03h35.


 
 
 
 
Partenaires

Hébergement Web