Précédent   Forum des professionnels en informatique > Bases de données > Oracle > Outils > Forms
Forms Forum d'entraide sur Oracle Forms
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 27/01/2012, 10h42   #1
Invité de passage
 
Femme
Inscription : juillet 2011
Messages : 3
Détails du profil
Informations personnelles :
Sexe : Femme

Informations forums :
Inscription : juillet 2011
Messages : 3
Points : 0
Points : 0
Par défaut ORA-01858, erreur affectation d'un mois

*** Bonjour, ***

J'ai voulu déclarer un curseur qui pointe sur les numéros de livraison qui correspondent à un mois sélectionné dans une liste.
Mon code :
Code :
1
2
3
4
5
6
7
8
9
10
Cursor C_LIV IS SELECT DATE_LIV_PROD FROM LIVRAISON_PROD WHERE LIVRAISON_PROD.DATE_LIV_PROD= 'DD/:BLOCK8.LIST9/YYYY';
 mois LIVRAISON_PROD.DATE_LIV_PROD%type;
begin
	open C_LIV ;
	fetch C_LIV INTO mois;
	Set_Block_Property( 'LIVRAISON_PROD', ONETIME_WHERE, 'DATE_LIV_PROD = ' || mois ) ;
          Go_Block('LIVRAISON_PROD');
          Execute_Query ;
 
	close C_LIV;
J'ai essayé aussi d'utiliser dans le WHERE la fonction exact(month...) mais ça ne se compile meme pas : format erroné.

Que puis-je faire ?

*** Merci. ***
samy2590 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/01/2012, 10h57   #2
Futur Membre du Club
 
Homme Maxime Maro
Ingénieur développement logiciels
Inscription : décembre 2011
Messages : 14
Détails du profil
Informations personnelles :
Nom : Homme Maxime Maro
Âge : 27
Localisation : France, Paris (Île de France)

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

Informations forums :
Inscription : décembre 2011
Messages : 14
Points : 18
Points : 18
Bonjour samy,

quel est le type de LIVRAISON_PROD.DATE_LIV_PROD?

Après je ne comprends pas ce que tu cherches à récupérer dans ton curseur.
Tu veux sélectionner DATE_LIV_PROD en lui donnant DATE_LIV_PROD dans la clause WHERE.
Explique ton cas qu'on puisse t'aider

EDIT : essaie avec la clause WHERE To_Number(To_Char(DATE_LIV_PROD,'MM')) = :BLOCK8.LIST9
si ton :BLOCK8.LIST9 renvoie le numéro du mois.
Siegduk est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/01/2012, 11h03   #3
Rédacteur

 
Avatar de SheikYerbouti
 
Inscription : mai 2003
Messages : 6 533
Détails du profil
Informations forums :
Inscription : mai 2003
Messages : 6 533
Points : 6 469
Points : 6 469
si DATE_LIV_PROD est une date et mois un number, il est normal que l'égalité ne puisse être respectée : 10/01/2012 = 2 ne fonctionnera jamais.
Il faut changer le format de date:
Code :
To_Number(To_Char(DATE_LIV_PROD,'MM')) = :mois
__________________
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 30/01/2012, 14h17   #4
McM
Expert Confirmé Sénior
 
Inscription : juillet 2003
Messages : 3 448
Détails du profil
Informations forums :
Inscription : juillet 2003
Messages : 3 448
Points : 4 194
Points : 4 194
Code :
 WHERE LIVRAISON_PROD.DATE_LIV_PROD= 'DD/:BLOCK8.LIST9/YYYY'
Dans une chaine de caractère les variables ne sont jamais replacées automatiquement.
Le select du curseur ne s'exécute pas sous sql même en remplaçant :BLOCK8.LIST9 par une valeur.

De plus, à quoi sert le curseur ? S'il y a 100000 livraisons sur le mois voulu, ca va faire 100000 fois le même execute query.
__________________
More Code : More Bugs. Less Code : Less Bugs
McM est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/01/2012, 15h26   #5
Futur Membre du Club
 
Homme Maxime Maro
Ingénieur développement logiciels
Inscription : décembre 2011
Messages : 14
Détails du profil
Informations personnelles :
Nom : Homme Maxime Maro
Âge : 27
Localisation : France, Paris (Île de France)

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

Informations forums :
Inscription : décembre 2011
Messages : 14
Points : 18
Points : 18
Citation:
Envoyé par McM Voir le message
De plus, à quoi sert le curseur ? S'il y a 100000 livraisons sur le mois voulu, ca va faire 100000 fois le même execute query.
Le curseur affichera les livraisons pour un mois donné, je ne vois pas pourquoi il y aurait 100 000 execute_query car ce n'est pas dans une boucle, ou j'ai raté un truc
Siegduk est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/01/2012, 15h43   #6
McM
Expert Confirmé Sénior
 
Inscription : juillet 2003
Messages : 3 448
Détails du profil
Informations forums :
Inscription : juillet 2003
Messages : 3 448
Points : 4 194
Points : 4 194
C'est moi qui ai zappé un truc.. faut dire c'est tellement pas intuitif de déclarer un curseur pour ne pas boucler dessus .. pff y'en a qui se compliquent la vie et la vie de ceux qui reprendront leur code
__________________
More Code : More Bugs. Less Code : Less Bugs
McM 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 20h49.


 
 
 
 
Partenaires

Hébergement Web