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

PL/SQL Oracle Discussion :

ORA-00926: missing VALUES key


Sujet :

PL/SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Homme Profil pro
    Consultant ERP
    Inscrit en
    Avril 2011
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Consultant ERP
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2011
    Messages : 5
    Par défaut ORA-00926: missing VALUES key
    Bonjour tout le monde,

    Je suis confronté a un petit problème à la compilation d'une procedure avec SQL*Plus.

    Voila ci-dessous la procédure avec les deux erreurs :

    Code sql : 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
    SQL> edit
    Wrote file afiedt.buf
     
      1  CREATE OR REPLACE PROCEDURE Y_INC_SAS_ENT(NUMCMD IN NUMBER)
      2  AS
      3  BEGIN
      4  INSERT INTO satcd (nuisatcd, etssatcd,clasatcd, numsatcd, snusatcd, fousatcd, mnesatcd, refsatc
      5  devsatcd, depsatcd, refsatcd, devsatcd, depsatcd, dcdsatcd, drdsatcd,lansatcd,etasatcd,
      6  extsatcd,obssatcd, ucrsatcd);
      7  SELECT nuisvcdv, substr(clisvcdv,0,3),'HPML', numsvcdv, snusvcdv, etssvcdv,'BL'||expsvcdv,
      8  clasvcdv||numsvcdv||snusvcdv, devsvcdv, refsvcli, dcdsvcdv, dedsvcdv,'FR','A',nuisvcdv,obssvcdv
      9  FROM svcdv, svcli
     10  where nuisvcdv = NUMCMD and clisvcdv = numsvcli and etssvcli = etssvcdv;
     11* END;
    SQL> /
     
    Warning: Procedure created with compilation errors.
     
    SQL> show error
    Errors for PROCEDURE Y_INC_SAS_ENT:
     
    LINE/COL ERROR
    -------- -----------------------------------------------------------------
    4/1      PL/SQL: SQL Statement ignored
    6/29     PL/SQL: ORA-00926: missing VALUES keyword
    SQL>

    Je vous remercie d'avance pour l'aide que vous allez pouvoir m'apporter.

    Anis

  2. #2
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 173
    Par défaut
    bonjour,

    dégagez le ";" avant le "SELECT" et mettez des parenthèses autour de votre "SELECT".

    Et pendant que vous y êtes, utilisez des inner join pour vos jointures

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    INSERT INTO satcd (nuisatcd, etssatcd,clasatcd, numsatcd, snusatcd, fousatcd, mnesatcd, refsatc
    devsatcd, depsatcd, refsatcd, devsatcd, depsatcd, dcdsatcd, drdsatcd,lansatcd,etasatcd,
    extsatcd,obssatcd, ucrsatcd)
    (SELECT nuisvcdv, substr(clisvcdv,0,3),'HPML', numsvcdv, snusvcdv, etssvcdv,'BL'||expsvcdv,
    clasvcdv||numsvcdv||snusvcdv, devsvcdv, refsvcli, dcdsvcdv, dedsvcdv,'FR','A',nuisvcdv,obssvcdv
    FROM svcdv 
    INNER JOIN svcli on clisvcdv = numsvcli and etssvcli = etssvcdv
    where nuisvcdv = NUMCMD);

  3. #3
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 454
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 454
    Par défaut
    Les parenthèses autour du select sont facultatives !
    Une bonne mise en page suffit en général.

    Utilisez également des alias de tables pour faciliter la relecture.

  4. #4
    Membre à l'essai
    Homme Profil pro
    Consultant ERP
    Inscrit en
    Avril 2011
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Consultant ERP
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2011
    Messages : 5
    Par défaut
    j'ai bien enlever le ";" et et toujours ne fonctionne pas.
    Après plusieurs test j'ai trouver que le nombre des champs dans l' INSERT et plus grand que dans la SELECT

    Voila ca fonctionne comme ça!

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    CREATE OR REPLACE PROCEDURE Y_INC_SAS_ENT(NUMCMD IN NUMBER)
    AS
    BEGIN
    INSERT INTO satcd( nuisatcd, etssatcd,clasatcd, numsatcd, snusatcd, fousatcd, mnesatcd,
    refsatcd,devsatcd, depsatcd, dcdsatcd, drdsatcd,lansatcd,etasatcd,extsatcd,obssatcd, ucrsatcd) 
    SELECT nuisvcdv, substr(clisvcdv,0,3),'HPML', numsvcdv, snusvcdv, etssvcdv,'BL'||expsvcdv,
    clasvcdv||numsvcdv||snusvcdv, devsvcdv, refsvcli, dcdsvcdv, dedsvcdv,'FR','A',
    nuisvcdv,obssvcdv,ucrsvcdv
    FROM svcdv, svcli
    where nuisvcdv = NUMCMD and clisvcdv = numsvcli and etssvcli = etssvcdv ;
    END;
    /

    Merci.

  5. #5
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 454
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 454
    Par défaut
    J'espère juste que ce n'est pas pour un de vos clients, un peu de mise en page ne prend que deux minutes à réaliser et c'est tellement plus lisible et maintenable :
    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
    create or replace procedure y_inc_sas_ent
    (
      p$_numcmd in number
    )
    as
    begin
      insert into <schema>.satcd
      (
        nuisatcd, etssatcd, clasatcd, numsatcd, snusatcd, fousatcd,
        mnesatcd, refsatcd, devsatcd, depsatcd, dcdsatcd, drdsatcd,
        lansatcd, etasatcd, extsatcd, obssatcd, ucrsatcd
      ) 
      select ???.nuisvcdv                                 as nuisatcd
           , substr(???.clisvcdv, 1, 3)                   as etssatcd
           , 'HPML'                                       as clasatcd
           , ???.numsvcdv                                 as numsatcd
           , ???.snusvcdv                                 as snusatcd
           , ???.etssvcdv                                 as fousatcd
           , 'BL' || ???.expsvcdv                         as mnesatcd
           , ???.clasvcdv || ???.numsvcdv || ???.snusvcdv as refsatcd
           , ???.devsvcdv                                 as devsatcd
           , ???.refsvcli                                 as depsatcd
           , ???.dcdsvcdv                                 as dcdsatcd
           , ???.dedsvcdv                                 as drdsatcd
           , 'FR'                                         as lansatcd
           , 'A'                                          as etasatcd
           , ???.nuisvcdv                                 as extsatcd
           , ???.obssvcdv                                 as obssatcd
           , ???.ucrsvcdv                                 as ucrsatcd
        from <schema>.svcdv cdv
             inner join <schema>.svcli cli
               on cli.numsvcli = cdv.clisvcdv
              and cli.etssvcli = cdv.etssvcdv 
       where cdv.nuisvcdv = p$_numcmd;
    end;
    /

  6. #6
    Membre à l'essai
    Homme Profil pro
    Consultant ERP
    Inscrit en
    Avril 2011
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Consultant ERP
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2011
    Messages : 5
    Par défaut
    bonjour,
    j'ai besoin d'ajouter UPDATE OR INSERT si l enregistrement déjà existant je dois faire Update sinon INSERT, a la compilation j'ai l'erreur suivante :
    7/3 PL/SQL: SQL Statement ignored
    7/10 PL/SQL: ORA-00903: invalid table name
    si je supprime "UPDATE OR" la procédure ça compile bien.

    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
    CREATE OR REPLACE procedure y_inc_sas_ent
    (
      NUMCMD IN number
    )
    AS
    begin
      UPDATE OR INSERT INTO satcd
      (
        nuisatcd, etssatcd, clasatcd, fousatcd, mnesatcd, 
        refsatcd, devsatcd, depsatcd, dcdsatcd, drdsatcd,
        lansatcd, etasatcd, extsatcd, obssatcd, ucrsatcd
      ) 
     
      SELECT cdv.nuisvcdv                                 AS nuisatcd
           , substr(cdv.clisvcdv, 1, 3)                   AS etssatcd
           , case when movsvlcv = 'RVS' then'HPRM' 
                  else 'HPML' end  			      AS clasatcd
           , cdv.etssvcdv                                 AS fousatcd
           , 'BL' || cdv.expsvcdv                         AS mnesatcd
           , cdv.clasvcdv || cdv.numsvcdv || cdv.snusvcdv AS refsatcd
           , cdv.devsvcdv                                 AS devsatcd
           , cli.refsvcli                                 AS depsatcd
           , cdv.dcdsvcdv                                 AS dcdsatcd
           , cdv.dedsvcdv                                 AS drdsatcd
           , 'FR'                                         AS lansatcd
           , 'A'                                          AS etasatcd
           , cdv.nuisvcdv                                 AS extsatcd
           , cdv.obssvcdv                                 AS obssatcd
           , cdv.ucrsvcdv                                 AS ucrsatcd
        FROM svcdv cdv
             INNER JOIN svcli cli
               ON cli.numsvcli = cdv.clisvcdv
              AND cli.etssvcli = cdv.etssvcdv
    	 INNER JOIN svlcv svl
    	  ON svl.nuisvlcv = cdv.nuisvcdv 
       WHERE cdv.nuisvcdv = NUMCMD;
    end;
    /
    merci de votre aide.

  7. #7
    McM
    McM est déconnecté
    Expert confirmé

    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
    Billets dans le blog
    4
    Par défaut
    Citation Envoyé par Waldar Voir le message
    J'espère juste que ce n'est pas pour un de vos clients, un peu de mise en page ne prend que deux minutes à réaliser et c'est tellement plus lisible et maintenable :
    Tout est une question de goût.. je préfère un code plus compact qu'un insert qui me prend tout l'écran.. et encore dans l'exemple il n'y a que 15 colonnes qu'est ce que ce serait pour une centaine.

Discussions similaires

  1. ORA-00926: mot-clé VALUES absent lors de l'insertion avec tOracleOutPut
    Par hikamovic dans le forum Développement de jobs
    Réponses: 5
    Dernier message: 19/02/2015, 16h27
  2. ORA-00905 - missing key word
    Par jby43 dans le forum SQL
    Réponses: 2
    Dernier message: 04/09/2014, 14h24
  3. SQLException: ORA-00936: missing expression
    Par punisher999 dans le forum JDBC
    Réponses: 1
    Dernier message: 19/09/2008, 21h42
  4. Réponses: 5
    Dernier message: 07/08/2007, 12h20
  5. Réponses: 7
    Dernier message: 17/10/2006, 13h55

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