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 :

Comment ajouter à la table emp une colonne


Sujet :

PL/SQL Oracle

  1. #1
    Futur Membre du Club
    Étudiant
    Inscrit en
    Février 2008
    Messages
    6
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2008
    Messages : 6
    Points : 6
    Points
    6
    Par défaut Comment ajouter à la table emp une colonne
    salut !

    j'ai volu ajouter à la table emp une colone qui va comporter les salaires annuels si il son > 10000 du chaque emplouer.
    Alors j'ai ajouter un colone : SAL_ANN pour la table emp
    et j'ai créer une vue :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    create view salan as
    select empno,ename,job,((sal+comm)*12) as sa
    from emp;
    puis le curseur qui beug tjs :


    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
     
    1 declare cursor c1_emp is
    2 select e.empno,e.ename,e.job,s.empno,s.sa
    3 from
    4 emp e,salan s
    5 where
    6 s.empno = e.empno;
    7 begin
    8 for e1_emp in c1_emp
    9 loop
    10 if(e1_emp.sa> 10000)
    11 then
    12 update emp
    13 set asl_ann = e1_emp;
    14 exit;
    15 end if;
    16 end loop;
    17* end;
    SQL> /
    for e1_emp in c1_emp
    *
    ERREUR à la ligne 8 :
    ORA-06550: Ligne 8, colonne 1 :
    PLS-00402: alias requis dans liste de curseur SELECT pour éviter noms de col. en double
    ORA-06550: Ligne 8, colonne 1 :
    PL/SQL: Statement ignored
    *************************************************
    NB : e1_emp c'est l'enregistrement !

    MERCI D'AVANCE

  2. #2
    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 306
    Points
    5 306
    Par défaut
    c'est pourtant clair :

    PLS-00402: alias required in SELECT list of cursor to avoid duplicate column names
    Cause: A cursor was declared with a SELECT statement that contains duplicate column names. Such references are ambiguous.
    Action: Replace the duplicate column name in the select list with an alias.
    ajoute des alias dans ton select...

  3. #3
    Futur Membre du Club
    Étudiant
    Inscrit en
    Février 2008
    Messages
    6
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2008
    Messages : 6
    Points : 6
    Points
    6
    Par défaut Merci,
    Mais qq me donne un exemple ! SVP !


  4. #4
    Membre confirmé

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    507
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 507
    Points : 503
    Points
    503
    Par défaut
    Dans ton curseur, tu as deux fois la colonne "empno". il faut ajouter deux alias différents pour ces colonnes.

    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
    DECLARE
       CURSOR c1_emp
       IS
          SELECT e.empno EMPNO1, e.ename, e.job, s.empno EMPNO2, s.sa
            FROM emp e, salan s
           WHERE s.empno = e.empno;
    BEGIN
       FOR e1_emp IN c1_emp
       LOOP
          IF (e1_emp.sa > 10000)
          THEN
             UPDATE emp
                SET asl_ann = e1_emp;
    
             EXIT;
          END IF;
       END LOOP;
    END;

  5. #5
    Membre expérimenté Avatar de fatsora
    Profil pro
    Inscrit en
    Février 2006
    Messages
    1 103
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 1 103
    Points : 1 332
    Points
    1 332
    Par défaut
    Bonjour,

    il y a d'autres erreurs ici

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    CREATE OR REPLACE VIEW SALAN
    (
       EMPNO,
       ENAME,
       JOB,
       SA
    )
    AS
       SELECT   empno,
                ename,
                job,
                ( (sal + NVL(comm,0) )* 12) AS sa
         FROM   emp;

    sans le NVL Oracle n'effectue pas la somme des 2 colonnes ou l'une est nulle


    2. dans le PLSQL

    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
     
    declare cursor c1_emp IS
     SELECT e.empno,e.ename,e.job,s.empno SALAN_NO,s.sa
     FROM
     emp e,salan s
     WHERE
     s.empno = e.empno;
     
     begin
       FOR e1_emp IN c1_emp
        loop
              IF(e1_emp.sa> 10000)
                    then
                          UPDATE emp
                              SET SAL_ann =  e1_emp.SA
                              where empno =e1_emp.empno;
     
            end IF;
     end loop;
     end;
     /


    -le exit est superflu car il fait sortir tout de suie apres la 1 value

    -e dedoubelment de colone est inutile !!

    -et il faut ajouter un where a l'update !

  6. #6
    Futur Membre du Club
    Étudiant
    Inscrit en
    Février 2008
    Messages
    6
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2008
    Messages : 6
    Points : 6
    Points
    6
    Par défaut MERCIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
    Citation Envoyé par fatsora Voir le message
    Bonjour,

    il y a d'autres erreurs ici

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    CREATE OR REPLACE VIEW SALAN
    (
       EMPNO,
       ENAME,
       JOB,
       SA
    )
    AS
       SELECT   empno,
                ename,
                job,
                ( (sal + NVL(comm,0) )* 12) AS sa
         FROM   emp;

    sans le NVL Oracle n'effectue pas la somme des 2 colonnes ou l'une est nulle


    2. dans le PLSQL

    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
     
    declare cursor c1_emp IS
     SELECT e.empno,e.ename,e.job,s.empno SALAN_NO,s.sa
     FROM
     emp e,salan s
     WHERE
     s.empno = e.empno;
     
     begin
       FOR e1_emp IN c1_emp
        loop
              IF(e1_emp.sa> 10000)
                    then
                          UPDATE emp
                              SET SAL_ann =  e1_emp.SA
                              where empno =e1_emp.empno;
     
            end IF;
     end loop;
     end;
     /


    -le exit est superflu car il fait sortir tout de suie apres la 1 value

    -e dedoubelment de colone est inutile !!

    -et il faut ajouter un where a l'update !



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

Discussions similaires

  1. [MySQL] comment ajouter plusieurs articles dans une BD MySql+tables temporaires
    Par forbidden_fruit dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 19/05/2008, 12h00
  2. Réponses: 2
    Dernier message: 06/05/2008, 10h52
  3. Comment faire un "remplacer" dans une colonne d'une table ?
    Par arnaudperfect dans le forum Requêtes
    Réponses: 7
    Dernier message: 22/02/2008, 12h32
  4. comment isoler le nom d'une colonne ou d'une table?
    Par Mydriaze dans le forum Requêtes
    Réponses: 2
    Dernier message: 13/07/2007, 16h59
  5. Réponses: 2
    Dernier message: 08/02/2006, 21h22

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