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 :

variable liée PL/SQL


Sujet :

PL/SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre régulier
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2003
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Maroc

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Novembre 2003
    Messages : 6
    Par défaut variable liée PL/SQL
    Bonjour,
    Je suis entrains de me former en lisant le doc : "Oracle Database 10g: Les fondamentaux du language PL/SQL", et je suis arrivé aux exercices du chapitre 4, voici un petit résumé :
    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
    set serveroutput on;
    variable dept_id number;
    declare
       max_deptno departments.DEPARTMENT_ID%type;
       dept_name departments.DEPARTMENT_NAME%type := 'Education';
    begin
       select max(department_id)
       into max_deptno
       from departments;
       dbms_output.put_line('The maximum department_id is : ' || max_deptno);
       :dept_id := max_deptno + 10; 
     
       insert into 
                 departments(
                   department_id,
    			   department_name,
    			   location_id)
    			 values(
    			   :dept_id,
    			   dept_name,
    			   null
    			 );
       dbms_output.put_line('sql%rowcount gives ' || sql%rowcount); 
    end;
    /
    select * 
    from departments
    where department_id = :dept_id;
    le code ci-dessus fonctionne a merveille, le souci est dans le code suivant :
    set serveroutput on;
    variable dept_id number;
    begin
    select max(department_id)
    into :dept_id
    from departments ;

    update departments
    set location_id = 3000
    where department_id = :dept_id ;
    end;
    /
    commit;
    /
    delete
    from hr.departments
    where department_id = :dept_id;
    j'ai le message suivant :

    PL/SQL procedure successfully completed.
    Commit complete.
    unknown command "repeat" - rest of line ignored.
    ORA-01008: toutes les variables ne sont pas liées

    en fait il n'aime pas le "delete", et j'arrive pas a trouver pourquoi.

    Merci

  2. #2
    Expert confirmé Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    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 : 5 611
    Par défaut
    Votre script est un mélange de PL/SQL, SQL et commandes SQLPLUS
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    mni@DIANA> set serveroutput on
    mni@DIANA> variable dept_id number
    Ce sont des commandes sqlplus donc pas besoin de ;

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    mni@DIANA>
    mni@DIANA> begin
      2    select max(department_id)
      3      into :dept_id
      4      from hr.departments;
      5
      6    update hr.departments
      7       set location_id = 3000
      8     where department_id = :dept_id ;
      9  end;
     10  /
    ProcÚdure PL/SQL terminÚe avec succÞs.
    C'est un bloc PL/SQL donc il faut un ; après END et un / pour l'exécuter sous sqlplus
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    mni@DIANA> commit
      2  /
    Validation effectuÚe.
    C'est une commande SQL soit ; soit / pour l'exécuter sous sqlplus
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    mni@DIANA>
    mni@DIANA> delete
      2    from hr.departments
      3   where department_id = :dept_id
      4  /
     
    1 ligne supprimÚe.
    C'est une commande SQL, pareil.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    mni@DIANA> Rollback
      2  /
     
    Annulation (rollback) effectuÚe.
    Il n'y pas de souci avec ce code.

  3. #3
    Membre régulier
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2003
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Maroc

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Novembre 2003
    Messages : 6
    Par défaut
    Merci mnitu,

    j'utilise Toad, normalement quand tu fais un "/" c'est comme si tu lance une nouvelle commande SQL !!!!

    j'ai modifié mon bloc PLSQL, et j'ai intégré la requete delete dedans et ça passe mieux.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    set serveroutput on;
    variable dept_id number;
    begin
       select max(department_id)
       into :dept_id
       from departments ;
     
       update departments
       set location_id = 3000
       where department_id = :dept_id ;
     
       delete from departments where department_id = :dept_id;
       dbms_output.put_line(':dept_id = ' || :dept_id ); 
    end;
    Merci encore

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

Discussions similaires

  1. [Oracle] Variables liées PHP / PL\SQL
    Par goro62 dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 01/07/2009, 11h52
  2. Réponses: 3
    Dernier message: 21/02/2006, 16h43
  3. [Variable d'environement SQL] Probleme de config
    Par duelooser dans le forum Oracle
    Réponses: 2
    Dernier message: 16/12/2005, 09h16
  4. une variable dans du SQL ??
    Par Black Pearl dans le forum Langage SQL
    Réponses: 3
    Dernier message: 18/06/2005, 12h55
  5. Variable globale - PL/SQL - %TYPE
    Par ogre dans le forum PL/SQL
    Réponses: 25
    Dernier message: 20/10/2004, 13h47

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