IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 Oracle Discussion :

Problèmes d'insertion dans ma table


Sujet :

Oracle

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    96
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2007
    Messages : 96
    Points : 39
    Points
    39
    Par défaut Problèmes d'insertion dans ma table
    Bonjour,

    Voilà, comme mon intitulé l'explique bien, j'ai un petit problème lorsque je veux insérer des données dans une de mes tables.

    Voici le code de ma table visitors

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    CREATE TABLE VISITORS
       (
        ID_VISITORS NUMBER(2)  NOT NULL,
        ID_COUNTRY NUMBER(2)  NOT NULL,
        ID_PROFESSION NUMBER(2)  NOT NULL,
        USER_NAME VARCHAR2(255)  NOT NULL,
        PASSWORD VARCHAR2(255)  NOT NULL,
        SURNAME VARCHAR2(255)  NOT NULL,
        FIRSTNAME VARCHAR2(255)  NOT NULL,
        EMAIL_VISITORS VARCHAR2(255)  NOT NULL,
        TOWN VARCHAR2(255)  NOT NULL,
        ADRESS VARCHAR2(255)  NOT NULL,
        REGION VARCHAR2(255)  NOT NULL,
        NBRE_CONNECTION NUMBER(2)  NOT NULL
    ,   CONSTRAINT PK_VISITORS PRIMARY KEY (ID_VISITORS)  
       ) ;
    Et voici mon code lors de l'insertion dans la table
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    INSERT INTO visitors (id_visitors, id_country, id_profession, user_name, password, surname, firstname, email_visitors, town, adress, region, nbre_connection)
    VALUES (visitors_id_visitors.NEXTVAL, v_idcountry,v_idprofession, v_username, v_password, v_surname, v_firstname, v_mail, v_town, v_adress, v_region,0);
    Je précise que cette insertion vient en fait d'une fonction que je veux créer. Donc lorsque je veux faire uniquement mon INSERT INTO dans sql plus, j'obtiens l'erreur suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ERREUR à la ligne 2 :
    ORA-00984: Un nom de colonne n'est pas autorisé ici
    Je me suis dit que j'avais fait une bête faute d'orthographe mais j'ai beau vérifier partout, je ne vois rien :/.

    Alors soit vous me dites que je peux aller m'acheter des lunettes le plus rapidement possible et je le ferai ^^, soit une petite aide serait sympa.

    Merci d'avance pour ceux qui répondront.

    Dasson

  2. #2
    McM
    McM est déconnecté
    Expert éminent

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Points : 7 740
    Points
    7 740
    Billets dans le blog
    4
    Par défaut
    visitors_id_visitors.NEXTVAL n'est pas une "valeur".
    Il faut faire une sélection en base pour la récupérer.

    Donc fait un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    INSERT INTO () SELECT ... FROM DUAL
    More Code : More Bugs. Less Code : Less Bugs
    Mon Blog PL/Sql : Fichier Zip / Image BMP / Lire sqliteDB / QRCode et Images PNG ou BMP

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    96
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2007
    Messages : 96
    Points : 39
    Points
    39
    Par défaut
    Heu ça en fait, c'est une séquence que j'incrémente, et j'utilise toujours ce genre de chose dans d'autre insert et il n'y a aucun problème.

    Mais je ne comprends pas très bien à quoi va me servir cette requette que tu m'as écrit. Tu peux m'en expliquer d'avantage s'il te plait ?

    Merci

  4. #4
    Expert éminent sénior
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 073
    Points
    19 073
    Par défaut
    replace ta requête par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    INSERT INTO visitors (id_visitors, id_country, id_profession, user_name, password, surname, firstname, email_visitors, town, adress, region, nbre_connection)
    SELECT visitors_id_visitors.NEXTVAL, v_idcountry,v_idprofession, v_username, v_password, v_surname, v_firstname, v_mail, v_town, v_adress, v_region,0 FROM dual;
    visitors_id_visitors.NEXTVAL est une fonction, il faut donc faire un SELECT pour incrémenter ta séquence.

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    96
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2007
    Messages : 96
    Points : 39
    Points
    39
    Par défaut
    Voilà j'ai remplacé mon code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    INSERT INTO visitors (id_visitors, id_country, id_profession, user_name, password, surname, firstname, email_visitors, town, adress, region, nbre_connection)
    VALUES (visitors_id_visitors.NEXTVAL, v_idcountry,v_idprofession, v_username, v_password, v_surname, v_firstname, v_mail, v_town, v_adress, v_region,0);
    par ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    INSERT INTO visitors (id_visitors, id_country, id_profession, user_name, password, surname, firstname, email_visitors, town, adress, region, nbre_connection)
    VALUES (SELECT visitors_id_visitors.NEXTVAL, v_idcountry,v_idprofession, v_username, v_password, v_surname, v_firstname, v_mail, v_town, v_adress, v_region,0 FROM DUAL);
    Mais j'obtiens une autre erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ERREUR à la ligne 2 :
    ORA-00936: expression absente
    Je vous laisse le code de ma fonction complètement peut être que ça peut venir d'autre part :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    CREATE OR REPLACE FUNCTION add_visitors (v_idcountry IN visitors.id_country%TYPE, v_idprofession IN visitors.id_profession%TYPE, v_username IN visitors.user_name%TYPE, v_password IN visitors.password%TYPE, v_surname IN visitors.surname%TYPE, v_firstname IN visitors.firstname%TYPE, v_mail IN visitors.email_visitors, v_town IN visitors.town%TYPE, v_adress IN visitors.adress%TYPE, v_region IN visitors.region%TYPE) RETURN NUMBER
    	IS
    		CURSOR agent_cursor IS
    			SELECT * 
    			FROM agent_pe
    			WHERE nickname = v_username;
     
    		CURSOR visitor_cursor IS
    			SELECT * FROM visitors
    			WHERE user_name = v_username;
     
    		rec_visitor visitors%ROWTYPE;
    		rec_agent agent_pe%ROWTYPE;
     
    		v_return NUMBER :=0;
     
    	BEGIN
    		OPEN agent_cursor;
    		FETCH agent_cursor INTO rec_agent;
     
    		IF agent_cursor%NOTFOUND THEN
     
    			OPEN visitor_cursor;
    			FETCH visitor_cursor INTO rec_visitor;
     
    			IF visitor_cursor%NOTFOUND THEN
     
    				INSERT INTO visitors (id_visitors, id_country, id_profession, user_name, password, surname, firstname, email_visitors, town, adress, region, nbre_connection)
    				VALUES (visitors_id_visitors.NEXTVAL, v_idcountry,v_idprofession, v_username, v_password, v_surname, v_firstname, v_mail, v_town, v_adress, v_region,0);
    				COMMIT;
    				v_return :=1;
    			END IF;
    		END IF;
     
    		RETURN v_return;
     
    	END;
    Merci de votre aide
    Dasson

  6. #6
    McM
    McM est déconnecté
    Expert éminent

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Points : 7 740
    Points
    7 740
    Billets dans le blog
    4
    Par défaut
    Citation Envoyé par orafrance Voir le message
    replace ta requête par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    INSERT INTO visitors (id_visitors, id_country, id_profession, user_name, password, surname, firstname, email_visitors, town, adress, region, nbre_connection)
    SELECT visitors_id_visitors.NEXTVAL, v_idcountry,v_idprofession, v_username, v_password, v_surname, v_firstname, v_mail, v_town, v_adress, v_region,0 FROM dual;
    visitors_id_visitors.NEXTVAL est une fonction, il faut donc faire un SELECT pour incrémenter ta séquence.
    Faut bien tout faire pareil !
    More Code : More Bugs. Less Code : Less Bugs
    Mon Blog PL/Sql : Fichier Zip / Image BMP / Lire sqliteDB / QRCode et Images PNG ou BMP

  7. #7
    Expert éminent sénior
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 073
    Points
    19 073
    Par défaut
    Evidemment, si tu ne recopies pas exactement l'exemple

    la syntaxe est : INSERT... VALUES OU INSERT... SELECT

  8. #8
    Rédacteur
    Avatar de Vincent Rogier
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    2 373
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2 373
    Points : 5 307
    Points
    5 307
    Par défaut
    [NOM de SEQUENCE].nextval PEUT TRES BIEN ETRE utilisé dans une expression VALUES(...) d'un INSERT !!
    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

  9. #9
    Rédacteur
    Avatar de Vincent Rogier
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    2 373
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2 373
    Points : 5 307
    Points
    5 307
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    SQL> create sequence seq_test;
     
    SÚquence crÚÚe.
     
    SQL> create table seq_table(value int);
     
    Table crÚÚe.
     
     
    SQL> insert into seq_table(value) values(seq_test.nextval);
     
    1 ligne crÚÚe.
    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

  10. #10
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    96
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2007
    Messages : 96
    Points : 39
    Points
    39
    Par défaut
    Evidemment, si tu ne recopies pas exactement l'exemple

    la syntaxe est : INSERT... VALUES OU INSERT... SELECT
    Ha ben je dormirai moins con, je ne savais pas ça ^^

    Sinon j'ai essayé en remplaçant correctement cette fois ci, mais alors là je reste vraiment dans le fou total vu qu'ici l'erreur n'est plus là, mais la procédure a des erreurs de compilation. Donc j'écris ma fonction dans une procédure mais aucune erreur ne m'apparait clair à part celle où il me dit que les différentes variable en paramètre de ma fonction ne sont pas déclarées.

    Enfin voici les erreurs avec le code que j'ai tappé
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    SQL> DECLARE
      2    CURSOR agent_cursor IS
      3     SELECT * 
      4     FROM agent_pe
      5     WHERE nickname = v_username;
      6  
      7    CURSOR visitor_cursor IS
      8     SELECT * FROM visitors
      9     WHERE user_name = v_username;
     10  
     11    rec_visitor visitors%ROWTYPE;
     12    rec_agent agent_pe%ROWTYPE;
     13    
     14    v_return NUMBER :=0;
     15  
     16   BEGIN
     17    OPEN agent_cursor;
     18    FETCH agent_cursor INTO rec_agent;
     19  
     20    IF agent_cursor%NOTFOUND THEN
     21  
     22     OPEN visitor_cursor;
     23     FETCH visitor_cursor INTO rec_visitor;
     24      
     25     IF visitor_cursor%NOTFOUND THEN
     26         
     27      INSERT INTO visitors (id_visitors, id_country, id_profession, user_name, password, surname,
     firstname, email_visitors, town, adress, region, nbre_connection)
     28      SELECT visitors_id_visitors.NEXTVAL, v_idcountry,v_idprofession, v_username, v_password, v_
    surname, v_firstname, v_mail, v_town, v_adress, v_region,0 FROM dual;
     29      COMMIT;
     30      v_return :=1;
     31     END IF;
     32    END IF;
     33  
     34    RETURN v_return;
     35     
     36   END;
     37   /
       WHERE nickname = v_username;
                        *
    ERREUR à la ligne 5 :
    ORA-06550: Ligne 5, colonne 21 :
    PL/SQL: ORA-00904: "V_USERNAME" : identificateur non valide
    ORA-06550: Ligne 3, colonne 4 :
    PL/SQL: SQL Statement ignored
    ORA-06550: Ligne 9, colonne 22 :
    PL/SQL: ORA-00904: "V_USERNAME" : identificateur non valide
    ORA-06550: Ligne 8, colonne 4 :
    PL/SQL: SQL Statement ignored
    ORA-06550: Ligne 28, colonne 144 :
    PL/SQL: ORA-00904: "V_REGION" : identificateur non valide
    ORA-06550: Ligne 27, colonne 5 :
    PL/SQL: SQL Statement ignored
    ORA-06550: Ligne 34, colonne 3 :
    PLS-00372: L'instruction RETURN ne peut pas contenir d'expression dans une
    procédure.
    ORA-06550: Ligne 34, colonne 3 :
    PL/SQL: Statement ignored
    Sinon comme l'a dit Vicenzo et qu'il le montre par un exemple, je savais que ça marchait vu que c'est comme ça qu'ils font dans le cours d'Oracle.

    Enfin sinon je sais vraiment pas quoi faire pour le moment :s.

    Merci pour les réponses

    Dasson

  11. #11
    Rédacteur
    Avatar de Vincent Rogier
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    2 373
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2 373
    Points : 5 307
    Points
    5 307
    Par défaut
    bon, j'ai repris ton code et cela fonctionne très bien chez moi sous sql*plus :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
     
     
    SQL> CREATE TABLE VISITORS
      2     (
      3      ID_VISITORS NUMBER(2)  NOT NULL,
      4      ID_COUNTRY NUMBER(2)  NOT NULL,
      5      ID_PROFESSION NUMBER(2)  NOT NULL,
      6      USER_NAME VARCHAR2(255)  NOT NULL,
      7      PASSWORD VARCHAR2(255)  NOT NULL,
      8      SURNAME VARCHAR2(255)  NOT NULL,
      9      FIRSTNAME VARCHAR2(255)  NOT NULL,
     10      EMAIL_VISITORS VARCHAR2(255)  NOT NULL,
     11      TOWN VARCHAR2(255)  NOT NULL,
     12      ADRESS VARCHAR2(255)  NOT NULL,
     13      REGION VARCHAR2(255)  NOT NULL,
     14      NBRE_CONNECTION NUMBER(2)  NOT NULL,
     15      CONSTRAINT PK_VISITORS PRIMARY KEY (ID_VISITORS)
     16     ) ;
     
    Table crÚÚe.
     
    SQL>
    SQL> CREATE SEQUENCE visitors_id_visitors;
     
    SÚquence crÚÚe.
     
    SQL>
    SQL> DECLARE
      2
      3     v_idcountry number := 1;
      4     v_idprofession number := 1;
      5     v_username VARCHAR2(255) := 'toto';
      6     v_password VARCHAR2(255) := 'toto';
      7     v_surname VARCHAR2(255) := 'toto';
      8     v_firstname VARCHAR2(255) := 'toto';
      9     v_mail VARCHAR2(255) := 'toto';
     10     v_town VARCHAR2(255) := 'toto';
     11     v_adress VARCHAR2(255) := 'toto';
     12     v_region VARCHAR2(255) := 'toto';
     13  BEGIN
     14
     15  INSERT INTO visitors
     16  (
     17     id_visitors,
     18     id_country,
     19     id_profession,
     20     user_name,
     21     password,
     22     surname,
     23     firstname,
     24     email_visitors,
     25     town,
     26     adress,
     27     region,
     28     nbre_connection
     29  )
     30  VALUES
     31  (
     32     visitors_id_visitors.NEXTVAL,
     33     v_idcountry,
     34     v_idprofession,
     35     v_username,
     36     v_password,
     37     v_surname,
     38     v_firstname,
     39     v_mail,
     40     v_town,
     41     v_adress,
     42     v_region,
     43     0);
     44
     45  END;
     46  /
     
    ProcÚdure PL/SQL terminÚe avec succÞs.
     
    SQL> select count(*) from visitors;
     
      COUNT(*)
    ----------
             1
     
     
    SQL>
    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

  12. #12
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    96
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2007
    Messages : 96
    Points : 39
    Points
    39
    Par défaut
    Je viens d'essayer une bête insertion manuelle comme tu l'as fait, mais voilà ce que j'ai :s

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    INSERT INTO visitors (id_visitors, id_country, id_profession, user_name, password, surname, firstname, email_visitors, town, adress, region, nbre_connection)
    VALUES (visitors_id_visitors.NEXTVAL,1,1,'test','test','test','test','test','test','test','test',0);
    et le message d'erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ERREUR à la ligne 2 :
    ORA-01722: Nombre non valide
    Merci de ton aide

    Dasson

    P.S. : Personne n'a jamais eu des envies suicidaires quand on bosse par exemple sur une fonction pl/sql depuis 9h du matin ?

  13. #13
    Rédacteur
    Avatar de Vincent Rogier
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    2 373
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2 373
    Points : 5 307
    Points
    5 307
    Par défaut
    Hummmmm!


    j'ai copie coller l'insert que tu viens de mettre et voila le resultat :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
     
    SQL> INSERT INTO visitors (id_visitors, id_country, id_profession, user_name, password, surname, firstname, email_visitors, town, adress, region, nbre_connection)
      2  VALUES (visitors_id_visitors.NEXTVAL,1,1,'test','test','test','test','test','test','test','test',0);
     
    1 ligne crÚÚe.
     
    SQL>
    Ca fonctionne...

    Un conseil recrée ta table et réessaie !

    Il doit y avoir un mismatch entre la table dans la base et le DDL que tu as posté !
    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

  14. #14
    McM
    McM est déconnecté
    Expert éminent

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Points : 7 740
    Points
    7 740
    Billets dans le blog
    4
    Par défaut
    Citation Envoyé par vicenzo Voir le message
    [NOM de SEQUENCE].nextval PEUT TRES BIEN ETRE utilisé dans une expression VALUES(...) d'un INSERT !!
    Après des test sur dvp et sur ma base en sql et pl/sql, c'est vrai.
    Je suppose que c'est sous Forms ça ne marche pas.

    Quelqu'un sait depuis quelle version de base on peut le faire ?
    More Code : More Bugs. Less Code : Less Bugs
    Mon Blog PL/Sql : Fichier Zip / Image BMP / Lire sqliteDB / QRCode et Images PNG ou BMP

  15. #15
    Rédacteur
    Avatar de Vincent Rogier
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    2 373
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2 373
    Points : 5 307
    Points
    5 307
    Par défaut
    fonctionne avec serveur 8.1.7 et 11g (j'ai pas de serveur 7.3.4 sous la main !)
    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

  16. #16
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    96
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2007
    Messages : 96
    Points : 39
    Points
    39
    Par défaut
    Envoyé par McM
    Après des test sur dvp et sur ma base en sql et pl/sql, c'est vrai.
    Je suppose que c'est sous Forms ça ne marche pas.

    Quelqu'un sait depuis quelle version de base on peut le faire ?
    Bha moi j'ai le cours officiel d'Oracle qui m'a été donné à mon école supérieur et c'est la version 8i.

    Sinon ben ça ne marche toujours pas

    Si tu veux bien, Vicenzo, tester ma fonction entièrement, je te donne pour ça le code de ce que tu as besoin :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    CREATE TABLE VISITORS
       (
        ID_VISITORS NUMBER(2)  NOT NULL,
        ID_COUNTRY NUMBER(2)  NOT NULL,
        ID_PROFESSION NUMBER(2)  NOT NULL,
        USER_NAME VARCHAR2(255)  NOT NULL,
        PASSWORD VARCHAR2(255)  NOT NULL,
        SURNAME VARCHAR2(255)  NOT NULL,
        FIRSTNAME VARCHAR2(255)  NOT NULL,
        EMAIL_VISITORS VARCHAR2(255)  NOT NULL,
        TOWN VARCHAR2(255)  NOT NULL,
        ADRESS VARCHAR2(255)  NOT NULL,
        REGION VARCHAR2(255)  NOT NULL,
        NBRE_CONNECTION NUMBER(2)  NOT NULL
    ,   CONSTRAINT PK_VISITORS PRIMARY KEY (ID_VISITORS)  
       ) ;
     
    CREATE TABLE AGENT_PE
       (
        ID_AGENT NUMBER(2)  NOT NULL,
        PASSWORD VARCHAR2(255)  NOT NULL,
        NICKNAME VARCHAR2(255)  NOT NULL,
        EMAIL_AGENT VARCHAR2(255)  NOT NULL,
        CONNECTED NUMBER(1)  NOT NULL,
        BUSY NUMBER(1)  NOT NULL
    ,   CONSTRAINT PK_AGENT_PE PRIMARY KEY (ID_AGENT)  
       ) ;
     
    CREATE SEQUENCE agent_pe_id_agent_pe
    	INCREMENT BY 1
    	START WITH 1
    	MAXVALUE 9999
    	NOCACHE
    	NOCYCLE;
     
     
    CREATE SEQUENCE visitors_id_visitors
    	INCREMENT BY 1
    	START WITH 1
    	MAXVALUE 9999
    	NOCACHE
    	NOCYCLE;
     
    CREATE OR REPLACE FUNCTION add_visitors (v_idcountry IN visitors.id_country%TYPE, v_idprofession IN visitors.id_profession%TYPE, v_username IN visitors.user_name%TYPE, v_password IN visitors.password%TYPE, v_surname IN visitors.surname%TYPE, v_firstname IN visitors.firstname%TYPE, v_mail IN visitors.email_visitors, v_town IN visitors.town%TYPE, v_adress IN visitors.adress%TYPE, v_region IN visitors.region%TYPE) RETURN NUMBER
    	IS
    		CURSOR agent_cursor IS
    			SELECT * 
    			FROM agent_pe
    			WHERE nickname = v_username;
     
    		CURSOR visitor_cursor IS
    			SELECT * FROM visitors
    			WHERE user_name = v_username;
     
    		rec_visitor visitors%ROWTYPE;
    		rec_agent agent_pe%ROWTYPE;
     
    		v_return NUMBER :=0;
     
    	BEGIN
    		OPEN agent_cursor;
    		FETCH agent_cursor INTO rec_agent;
     
    		IF agent_cursor%NOTFOUND THEN
     
    			OPEN visitor_cursor;
    			FETCH visitor_cursor INTO rec_visitor;
     
    			IF visitor_cursor%NOTFOUND THEN
     
    				INSERT INTO visitors (id_visitors, id_country, id_profession, user_name, password, surname, firstname, email_visitors, town, adress, region, nbre_connection)
    				VALUES(visitors_id_visitors.NEXTVAL, v_idcountry,v_idprofession, v_username, v_password, v_surname, v_firstname, v_mail, v_town, v_adress, v_region,0);
    				COMMIT;
    				v_return :=1;
    			END IF;
    		END IF;
     
    		RETURN v_return;
     
    	END;
    	/
    Voilà je crois que j'ai tout donné. Bien sur ne te sens pas obligé.

    Merci bien

    Dasson

  17. #17
    Rédacteur
    Avatar de Vincent Rogier
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    2 373
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2 373
    Points : 5 307
    Points
    5 307
    Par défaut
    Je viens de tester avec un serveur 7.3.4 et ca fonctionne aussi
    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

  18. #18
    Rédacteur
    Avatar de Vincent Rogier
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    2 373
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2 373
    Points : 5 307
    Points
    5 307
    Par défaut
    ta fonction ne compile pas :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    Erreurs pour FUNCTION ADD_VISITORS :
     
    LINE/COL ERROR
    -------- ----------------------------------------------------------------
    0/0      PL/SQL: Compilation unit analysis terminated
    1/1      PLS-00488: dÚclaration de variable non valide : l'objet
             'VISITORS.EMAIL_VISITORS' doit Ûtre un type ou sous-type
     
    SQL>
    Si tu lisais les erreurs, tu aurais vu que ton paramètre est mal déclaré :

    v_mail IN visitors.email_visitors

    doit être plutôt

    v_mail IN visitors.email_visitors%TYPE

    Après modif, ca compile bien !!
    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

  19. #19
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    96
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2007
    Messages : 96
    Points : 39
    Points
    39
    Par défaut
    Rhoalala ben comme je l'ai marqué à mon 1er post, je peux aller m'acheter des lunettes ...

    Merci bien pour ton aide, sinon comment tu fais pour qu'il t'affiche les erreurs de compilation parce que moi il ne m'affiche rien du tout à part ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Avertissement : Fonction créée avec erreurs de compilation.
    Enfin merci bien de votre aide !

    Dasson

  20. #20
    Rédacteur
    Avatar de Vincent Rogier
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    2 373
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2 373
    Points : 5 307
    Points
    5 307
    Par défaut
    tout simplement :

    il y plusieurs variantes en fonction du type d'objet (package, procédure, ...)
    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

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. [Conception] Problème avec INSERT dans une TABLE
    Par dunbar dans le forum PHP & Base de données
    Réponses: 26
    Dernier message: 20/07/2006, 12h56
  2. Problème d'insertion dans une table Access
    Par tribaleur dans le forum ASP
    Réponses: 21
    Dernier message: 27/06/2006, 08h20
  3. Problème d'insertion dans une table filtrée.
    Par charlie289 dans le forum Access
    Réponses: 5
    Dernier message: 20/06/2006, 16h45
  4. [MySQL] Problème d'insertion dans une table
    Par ph_anrys dans le forum PHP & Base de données
    Réponses: 7
    Dernier message: 06/03/2006, 17h43
  5. Problème d'insertion dans une table MYSQL
    Par greg69 dans le forum Requêtes
    Réponses: 4
    Dernier message: 24/10/2005, 11h34

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo