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

SQL Oracle Discussion :

ORA-06550: Ligne 10, colonne 41 pb


Sujet :

SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Étudiant
    Inscrit en
    Décembre 2006
    Messages
    65
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2006
    Messages : 65
    Par défaut ORA-06550: Ligne 10, colonne 41 pb
    Bonjour,

    Je dois creer un ficheir de commandes pl/sql qui permet de mettre dans la table courrier_empl: num_emp,nom,num_dept,salaire de l'employé si son salaire est superrieur à 2331.00

    j'ai un leger probleme:
    ORA-06550: Ligne 10, colonne 41 :
    PL/SQL: ORA-00933: la commande SQL ne se termine pas correctement
    voici mon code:
    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
    DECLARE 
    CURSOR cp IS
    SELECT num_emp,nom,num_dept,salaire FROM employes;
    
    BEGIN 
    
    OPEN cp;
    LOOP
    FETCH cp INTO num_emp,nom,num_dept,salaire;
    INSERT INTO courrier_empl VALUES num_emp,nom,num_dept,salaire WHERE salaire>2331;
    EXIT WHEN cp%NOTFOUND;
    END LOOP;
    CLOSE cp;
    END;
    /
    la ligne de l'erreur est la ligne orange

  2. #2
    Membre chevronné
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    349
    Détails du profil
    Informations personnelles :
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Décembre 2004
    Messages : 349
    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
    14
    15
    16
    begin
         for rec in (SELECT num_emp,nom,num_dept,salaire 
                        FROM employes
                        WHERE salaire>2331 ) loop
             begin
             insert into courrier_empl(num_emp,nom,num_dept,salaire)
             values 
             ( rec.num_emp,
               rec.nom,
               rec.num_dept,
               rec.salaire);
              exception WHEN_OTHERS then
                dbms_output.put_line ( sqlerrm ) ;  //  ou sqlerrcode ? à vérifier
              end;
         end loop ;
    end;
    CDLT.

  3. #3
    Membre confirmé
    Étudiant
    Inscrit en
    Décembre 2006
    Messages
    65
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2006
    Messages : 65
    Par défaut
    heu ca ne serait pas plus simple avec des curseurs comme je l'ai fait ??

    parceque la ca ne marche pas du tout j'ai modifier des truc mais bon ca n'a rien changer

  4. #4
    Membre chevronné
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    349
    Détails du profil
    Informations personnelles :
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Décembre 2004
    Messages : 349
    Par défaut
    Je pense que pour la lisibilité ma méthode est meilleure. Néanmoins j'ai saisi le code à l'a

  5. #5
    Membre chevronné
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    349
    Détails du profil
    Informations personnelles :
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Décembre 2004
    Messages : 349
    Par défaut
    Je pense que pour la lisibilité ma méthode est meilleure.
    Je pense qu'il est préférable de déclarer des curseurs de façon implicite. Il est plus facile d'analyser ce type de curseurs lorsqu'il sont inclus dans un package de quelques milliers de lignes.
    Néanmoins j'ai saisi le code à l'arrache et n'ayant pas tes structures, je ne l'ai pas compilé....

    Si veux conserver ton code , 2 PBs sautent aux yeux :

    1. La clause where doit être déclarée dans ton curseur et non pas dans l'ordre insert .

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT num_emp,nom,num_dept,salaire FROM employes;
    à replacer par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT num_emp,nom,num_dept,salaire FROM employes where salaire >2321 ;
    2. Tu FETCH des valeurs dans des variables qui ne sont pas déclarées ( initialisées )

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    FETCH cp INTO num_emp,nom,num_dept,salaire;
    CDLT.

  6. #6
    Membre confirmé
    Inscrit en
    Juin 2006
    Messages
    76
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 76
    Par défaut Proposition de solution
    Je reste dans la logique première et propose ceci:

    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
    DECLARE 
    CURSOR cp IS
    SELECT num_emp,nom,num_dept,salaire FROM employes;
    line cp%ROWTYPE;
    BEGIN 
     
    OPEN cp;
    LOOP
    FETCH cp INTO line;
    INSERT INTO courrier_empl VALUES line.num_emp,line.nom,line.num_dept,salaire WHERE salaire>2331;
    EXIT WHEN cp%NOTFOUND;
    END LOOP;
    CLOSE cp;
    END;
    /

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [T-SQL] Convertir des lignes en colonne
    Par cortex93 dans le forum Langage SQL
    Réponses: 1
    Dernier message: 07/12/2005, 17h17
  2. Supprimer toutes les lignes et colonnes d'un tableau
    Par pekka77 dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 01/12/2005, 12h26
  3. Tableau 5 lignes * 3 colonnes
    Par slackjayo dans le forum Algorithmes et structures de données
    Réponses: 4
    Dernier message: 05/04/2005, 12h27
  4. Demande de conseil pour migration de lignes vers colonnes
    Par ririd dans le forum Administration
    Réponses: 6
    Dernier message: 04/11/2004, 18h02
  5. [TSynMemo] Positionnement par ligne et colonne
    Par Mercilius dans le forum Composants VCL
    Réponses: 9
    Dernier message: 16/04/2003, 17h22

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