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 26/08/2008, 16h43   #1
Membre régulier
 
Inscription : mai 2005
Messages : 347
Détails du profil
Informations forums :
Inscription : mai 2005
Messages : 347
Points : 81
Points : 81
Par défaut Compter nombre de résultats d'un CURSEUR

Bonsoir

Je place dans un curseur, le résultat d'un sélect.
Mon but est en fait de faire une action, seulement si ce curseur est vide.

En gros, mon but est d'insérer une valeur dans une table si celle-ci n'est pas déjà présente...
Je fais donc donc un sélect, et si je n'ai aucun résultat, j'insère ma valeur.

Actuellement, j'ai donc ceci:

Code :
1
2
3
4
 
OPEN c_present(id);
dbms_output.put_line('NBR ROW:'||c_present%ROWCOUNT);
CLOSE c_present;
Le problème est que même si le sélect du curseur retourne un résultats, au final, le %ROWCOUNT me retourne 0...

D'après un post que j'ai vu sur ce forum, cela devrait fonctionner.
Mais cela ne fonctionne pas, et j'ai vu sur un autre tuto que cela ne retourne pas le nbre d'enregistrements du curseur....

Je précise, que j'aimerais éviter autant que possible de boucler sur ce curseur (sinon, dans ce cas, je pourrai faire une bidouille avec un variable pour savoir si on a bouclé dessus...)

merci pour votre aide !
bobic est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/08/2008, 16h53   #2
Expert Confirmé
 
Homme
Chef de projet en SSII
Inscription : janvier 2004
Messages : 2 866
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Loire Atlantique (Pays de la Loire)

Informations professionnelles :
Activité : Chef de projet en SSII
Secteur : Conseil

Informations forums :
Inscription : janvier 2004
Messages : 2 866
Points : 3 448
Points : 3 448
Si tu n'as pas fait de fetch, rowcount est toujours égal à 0.
__________________
Un problème sans solution est un problème mal posé

Merci de poser vos questions sur le forum, je ne réponds pas aux questions posées par MP.
plaineR est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/08/2008, 17h01   #3
Rédacteur

 
Avatar de SheikYerbouti
 
Inscription : mai 2003
Messages : 6 534
Détails du profil
Informations forums :
Inscription : mai 2003
Messages : 6 534
Points : 6 471
Points : 6 471
Dans ce cas précis, il peut être plus simple d'utiliser un ordre Select ... Into et de gérer l'insertion dans l'exception : NO_DATA_FOUND.
__________________
Rédacteur Oracle (Oracle ACE)
Guide Oracle ,Guide PL/SQL, Guide Forms 9i/10g, Index de recherche
Je ne réponds pas aux questions techniques par MP
Blogs: Forms-PL/SQL-J2EE - Forms Java Beans
SheikYerbouti est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/08/2008, 17h02   #4
Expert Confirmé Sénior
 
Avatar de mnitu
 
Homme Marius Nitu
Ingénieur développement logiciels
Inscription : octobre 2007
Messages : 3 320
Détails du profil
Informations personnelles :
Nom : Homme Marius Nitu
Localisation : France, Marne (Champagne Ardenne)

Informations professionnelles :
Activité : Ingénieur développement logiciels
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : octobre 2007
Messages : 3 320
Points : 5 839
Points : 5 839
Citation:
Envoyé par bobic Voir le message
...
Mon but est en fait de faire une action, seulement si ce curseur est vide.

En gros, mon but est d'insérer une valeur dans une table si celle-ci n'est pas déjà présente...
Une contrainte de type unique devrait suffire.
mnitu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/08/2008, 17h10   #5
Membre régulier
 
Inscription : mai 2005
Messages : 347
Détails du profil
Informations forums :
Inscription : mai 2005
Messages : 347
Points : 81
Points : 81
mnitu, en fait, je ne peux pas toucher à la base
SheikYerbouti, oui en effet, je vais faire cela. Je suis parti comme un *** sur un curseur vu que j'en ai fait quelques uns, et quà la base je pensais boucler dessus. Mais vu que je ne veux pas boucler, je vais faire un simple select

Merki beaucoup !
bobic est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/08/2008, 10h10   #6
Membre régulier
 
Inscription : mai 2005
Messages : 347
Détails du profil
Informations forums :
Inscription : mai 2005
Messages : 347
Points : 81
Points : 81
J'ai tjs un petit prob...
J'ai bien fait mon sélect, et ajouté un EXCEPTION...
Seulement, ma procédure ne veut pas compiler.... L'erreur se situe en fait sur l'exception:

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
 
 
BEGIN
 
 
FOR ......... LOOP
 
 
	SELECT * INTO xxxx FROM matable WHERE motcle='test';	
 
EXCEPTION WHEN NO_DATA_FOUND THEN
          		dbms_output.put_line('Aucun enregistrement');
 
suite du code de taitement (autres boucles, etc....)
END LOOP;
 
END;
bobic est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/08/2008, 10h34   #7
Membre émérite
 
Inscription : août 2008
Messages : 835
Détails du profil
Informations forums :
Inscription : août 2008
Messages : 835
Points : 823
Points : 823
Salut,
De manière générale, indiquer le message d'erreur peut aider.
Snipah est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/08/2008, 10h34   #8
Membre Expert
 
Inscription : août 2008
Messages : 1 276
Détails du profil
Informations forums :
Inscription : août 2008
Messages : 1 276
Points : 1 936
Points : 1 936
Salut,

Il te manque un BEGIN avant le select et un END après l'exception.

De plus tu es sûr que ta requête te renvoie seulement 0 ou 1 ligne, sinon ça plantera à l'execution.
skuatamad est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/08/2008, 10h38   #9
Membre régulier
 
Inscription : mai 2005
Messages : 347
Détails du profil
Informations forums :
Inscription : mai 2005
Messages : 347
Points : 81
Points : 81
En fait pour le message d'erreur, il ne me sort rien, tout au moins, je ne trouve pas l'erreur dans TOAD.

Pour le reste, en effet, avec un BEGIN END,avant et après donc, cela fonctionne à la compile.

Sinon, oui, la requête ne me renvoit que un seul résultat obligatoirement

merci !
bobic 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 22h02.


 
 
 
 
Partenaires

Hébergement Web