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 19/12/2010, 00h13   #1
Invité régulier
 
titeuf
Étudiant
Inscription : novembre 2009
Messages : 63
Détails du profil
Informations personnelles :
Nom : titeuf

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : novembre 2009
Messages : 63
Points : 6
Points : 6
Par défaut Problème sur requête sql

bonsoir
Je bloque sur une requête SQL qui semble être très simple .


Code :
1
2
3
4
5
6
7
CREATE TABLE title ( title_id number (10)  
,title varchar2 (60) NOT     NULL
,description  varchar2(400) NOT NULL
, rating  varchar2(4)
,category  varchar2(20) 
, release_date date 
, constraint pk_a PRIMARY KEY ( title_id ));
Code :
1
2
3
4
5
6
7
8
INSERT INTO title 
VALUES ('TITLE_ID_SEQ.nextval'
,'Willie and Christmas Too'
,'All of Willie s friends make a Christmas list for Santa but
                                Willie has yet to add his own wish list'
,'G'
,'CHILD'
,'05-OCT-1995');
sql plus m'affiche ce message : Nombre non valide

J'ai bien vérifié les apostrophes et les parenthèses mais je ne sais pas pourquoi cette erreur
aidez-moi s'il-vous-plait,
merci
titeufdev est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/12/2010, 00h22   #2
Expert Confirmé Sénior
 
Homme Laurent Willems
Expert Stop/Start
Inscription : septembre 2002
Messages : 2 544
Détails du profil
Informations personnelles :
Nom : Homme Laurent Willems
Âge : 33
Localisation : Belgique

Informations professionnelles :
Activité : Expert Stop/Start

Informations forums :
Inscription : septembre 2002
Messages : 2 544
Points : 4 249
Points : 4 249
Salut,

Quel gestionnaire de base de données utilises-tu?

Code :
1
2
 
'TITLE_ID_SEQ.nextval'
Les apostrophes doivent être utilisées pour les valeurs de type chaine de caractère or ici il s'agit d'un nombre => il faut donc retirer les apostrophes.
__________________
Alea Jacta Test!
Mygale1978 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/12/2010, 00h37   #3
Invité régulier
 
titeuf
Étudiant
Inscription : novembre 2009
Messages : 63
Détails du profil
Informations personnelles :
Nom : titeuf

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : novembre 2009
Messages : 63
Points : 6
Points : 6
salut j'utilise sql plus d oracle
titeufdev est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/12/2010, 00h41   #4
Invité régulier
 
titeuf
Étudiant
Inscription : novembre 2009
Messages : 63
Détails du profil
Informations personnelles :
Nom : titeuf

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : novembre 2009
Messages : 63
Points : 6
Points : 6
Quand j'ai enlevé les apostrophes voila l'erreur déclenchée : (caractère non numérique trouvé à la place d'un caractère numérique)
titeufdev est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/12/2010, 00h58   #5
Expert Confirmé Sénior
 
Homme Laurent Willems
Expert Stop/Start
Inscription : septembre 2002
Messages : 2 544
Détails du profil
Informations personnelles :
Nom : Homme Laurent Willems
Âge : 33
Localisation : Belgique

Informations professionnelles :
Activité : Expert Stop/Start

Informations forums :
Inscription : septembre 2002
Messages : 2 544
Points : 4 249
Points : 4 249
Re,

Comment as-tu créé ta séquence?

Que te donne le résultat de la requête suivante:

Code :
1
2
 
SELECT TITLE_ID_SEQ.NEXTVAL FROM DUAL
__________________
Alea Jacta Test!
Mygale1978 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/12/2010, 01h08   #6
Invité régulier
 
titeuf
Étudiant
Inscription : novembre 2009
Messages : 63
Détails du profil
Informations personnelles :
Nom : titeuf

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : novembre 2009
Messages : 63
Points : 6
Points : 6
le résultat c est

NEXTVAL
--------
93
titeufdev est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/12/2010, 01h38   #7
Expert Confirmé Sénior
 
Homme Laurent Willems
Expert Stop/Start
Inscription : septembre 2002
Messages : 2 544
Détails du profil
Informations personnelles :
Nom : Homme Laurent Willems
Âge : 33
Localisation : Belgique

Informations professionnelles :
Activité : Expert Stop/Start

Informations forums :
Inscription : septembre 2002
Messages : 2 544
Points : 4 249
Points : 4 249
Ok,

L'erreur est située au niveau de ta date.

Remplace
par

et ton insert devrait s'effectuer sans problème
__________________
Alea Jacta Test!
Mygale1978 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/12/2010, 12h34   #8
Invité régulier
 
titeuf
Étudiant
Inscription : novembre 2009
Messages : 63
Détails du profil
Informations personnelles :
Nom : titeuf

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : novembre 2009
Messages : 63
Points : 6
Points : 6
salut mygale 1978
j ai mis

a la place de mais toujours je reçois le même message

titeufdev est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/12/2010, 13h17   #9
Expert Confirmé Sénior
 
Homme Laurent Willems
Expert Stop/Start
Inscription : septembre 2002
Messages : 2 544
Détails du profil
Informations personnelles :
Nom : Homme Laurent Willems
Âge : 33
Localisation : Belgique

Informations professionnelles :
Activité : Expert Stop/Start

Informations forums :
Inscription : septembre 2002
Messages : 2 544
Points : 4 249
Points : 4 249
Es-tu sûr que tu n'a pas remis les apostrophes pour la séquence?




J'ai testé l'insert suivant chez moi et ça fonctionne.

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
 
INSERT INTO title VALUES 
(title_id_seq.NEXTVAL,
 'Willie and Christmas Too',
'All of Willie s friends make a Christmas list for Santa but Willie has yet to add his own wish list',
'G',
'CHILD',
'05-10-1995');
 
1 row(s) inserted.
 
 
0,16 seconds
__________________
Alea Jacta Test!
Mygale1978 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/12/2010, 16h33   #10
Membre Expert
 
Homme
Responsable de service informatique
Inscription : janvier 2009
Messages : 1 081
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 38
Localisation : France

Informations professionnelles :
Activité : Responsable de service informatique
Secteur : Boutique - Magasin

Informations forums :
Inscription : janvier 2009
Messages : 1 081
Points : 1 875
Points : 1 875
Bonjour,
Il faut vérifier le format de date utilisé par ta base de données. Si c'est le format ISO, il faut remplacer '05-10-1998' par '1998-10-05'.

Tatayo.
tatayo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/12/2010, 18h24   #11
Modérateur
 
Avatar de al1_24
 
Homme Alain
Ingénieur d'études décisionnel
Inscription : mai 2002
Messages : 4 443
Détails du profil
Informations personnelles :
Nom : Homme Alain
Âge : 51
Localisation : France, Val de Marne (Île de France)

Informations professionnelles :
Activité : Ingénieur d'études décisionnel
Secteur : Conseil

Informations forums :
Inscription : mai 2002
Messages : 4 443
Points : 7 525
Points : 7 525
Ne connaissant pas le format de date pris en charge par la configuration de ta base de données, tu as toujours intérêt à définir explicitement la conversion de tes dates dans les requêtes de mise à jour ou d'insertion.

Avec Oracle, tu utiliseras la fonction TO_DATE à cet effet :
Code :
1
2
3
4
5
6
7
8
9
INSERT INTO title 
VALUES 
(title_id_seq.NEXTVAL,
 'Willie and Christmas Too',
'All of Willie s friends make a Christmas list for Santa but Willie has yet to add his own wish list',
'G',
'CHILD',
TO_DATE('05-10-1995', 'DD-MM-YYYY')
);
__________________
Modérateur Langage SQL
Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
N'oubliez pas le bouton et pensez aux balises [code]
Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
al1_24 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 27/12/2010, 13h32   #12
Invité régulier
 
titeuf
Étudiant
Inscription : novembre 2009
Messages : 63
Détails du profil
Informations personnelles :
Nom : titeuf

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : novembre 2009
Messages : 63
Points : 6
Points : 6
bonjour tout le monde

merci maygale 1978 ,j ai tester to_date et ça marche bien mais quand je remplace '05-10-1995' par '05-OCT-1995'

sql plus m'affiche ERREUR Ó la ligne 2 :
ORA-01843: ce n'est pas un mois valide)

voila le code complet

Code :
1
2
3
4
 
CREATE TABLE TITLE(TITLE_ID number(10) constraint ti_pk PRIMARY KEY NOT NULL,
              TITLE varchar2(60) NOT NULL, DESCRIPTION varchar2(400) NOT NULL, RATING varchar2(4) constraint tit_rat CHECK (Rating IN('G','PG','R','NC17','NR')) ,
              CATEGORY varchar2(20) constraint ti_cat CHECK (CATEGORY IN('DRAMA','COMEDY','ACTION','CHILD','SCIFI','DOCUMENT ARY')), RELEASE_DATE date);

Code :
1
2
3
4
 
 
INSERT INTO title VALUES (title_id_seq.NEXTVAL,'Willie and Christmas Too','All of Willie s friends make a Christmas list for Santa but
                                Willie has yet to add his own wish list','G','CHILD',TO_DATE('05-OCT-1995', 'DD-MON-yyyy'));
merci les amis
titeufdev est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/12/2010, 15h18   #13
Expert Confirmé Sénior
 
Avatar de mnitu
 
Homme Marius Nitu
Ingénieur développement logiciels
Inscription : octobre 2007
Messages : 3 311
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 311
Points : 5 808
Points : 5 808
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
 
Connected TO Oracle DATABASE 10g Enterprise Edition Release 10.2.0.4.0 
Connected AS impdata
 
SQL> 
SQL> SELECT TO_DATE('05-OCT-1995', 'DD-MON-yyyy')
  2    FROM dual
  3  /
 
SELECT TO_DATE('05-OCT-1995', 'DD-MON-yyyy')
  FROM dual
 
ORA-01843: ce n'est pas un mois valide
 
SQL> 
SQL> Select TO_DATE('05-OCT.-1995', 'DD-MON-yyyy')
  2    from dual
  3  /
 
TO_DATE('05-OCT.-1995','DD-MON
------------------------------
05/10/1995
 
SQL>
mnitu est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 28/12/2010, 18h07   #14
Invité régulier
 
titeuf
Étudiant
Inscription : novembre 2009
Messages : 63
Détails du profil
Informations personnelles :
Nom : titeuf

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : novembre 2009
Messages : 63
Points : 6
Points : 6
alors d après se que j ai compris c est impossible d'insérer une date sous la forme DD-MON-yyyy et puis l'avoir enregistrer comme par exemple 05-oct-2010 ?
titeufdev est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/12/2010, 18h48   #15
Rédacteur
 
Inscription : décembre 2002
Messages : 2 385
Détails du profil
Informations personnelles :
Localisation : France, Var (Provence Alpes Côte d'Azur)

Informations forums :
Inscription : décembre 2002
Messages : 2 385
Points : 3 261
Points : 3 261
Ce que Mnitu a voulu vous montrer, c'est que les abréviations de mois reconnues par Oracle doivent être respectées strictement, sinon vous n'arriverez pas à faire accepter votre date.
Ces abréviations dépendent de la langue de votre session et de la version d'Oracle.

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
34
35
36
37
38
39
40
41
42
SQL> SHOW release
release 1002000400
SQL>
SQL>
SQL> ALTER session SET nls_date_language=french;
 
SQL>  SELECT to_char(to_date(num_mois, 'MM'), 'MON') AS code_mois FROM (SELECT rownum AS num_mois FROM dual connect BY rownum <= 12);
 
CODE_
-----
JANV.
FÉVR.
MARS
AVR.
MAI
JUIN
JUIL.
AOÛT
SEPT.
OCT.
NOV.
DÉC.
 
 
SQL> ALTER session SET nls_date_language=english;
 
SQL>  SELECT to_char(to_date(num_mois, 'MM'), 'MON') AS code_mois FROM (SELECT rownum AS num_mois FROM dual connect BY rownum <= 12);
 
COD
---
JAN
FEB
MAR
APR
MAY
JUN
JUL
AUG
SEP
OCT
NOV
DEC
Si vous dites "OCT" alors qu'Oracle attend "OCT.", ça ne marche pas !

Pour éviter ce genre d'ennuis, il est vivement conseillé de ne pas utiliser les abréviations de mois lors de vos INSERT, mais plutôt le numéro de mois, sur lequel il n'y aura pas d'ambiguïté, comme montré par Mygale1978 ou Al1_24.
__________________
Consultant / formateur Oracle indépendant
Certifié OCP 10g et 11g, sécurité 11g
Pomalaix est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 29/12/2010, 12h28   #16
Invité régulier
 
titeuf
Étudiant
Inscription : novembre 2009
Messages : 63
Détails du profil
Informations personnelles :
Nom : titeuf

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : novembre 2009
Messages : 63
Points : 6
Points : 6
d accord maintenant j ai bien compris merci beaucoup pour votre explication
titeufdev 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 08h53.


 
 
 
 
Partenaires

Hébergement Web