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 :

[PL/SQL] réference a un ensemble non initialisé


Sujet :

Oracle

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

    Informations forums :
    Inscription : Décembre 2006
    Messages : 65
    Points : 43
    Points
    43
    Par défaut [PL/SQL] réference a un ensemble non initialisé
    je ne comprends pas a quoi correspond l'erreur donc 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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    DECLARE 
    empl courrier_empl.num_emp%TYPE;
    noml courrier_empl.nom%TYPE;
    dptl courrier_empl.num_dept%TYPE;
    sala courrier_empl.salaire%TYPE;
    
    nempl NUMBER(4);
    nnoml CHAR(10);
    ndptl NUMBER(4);
    nsala NUMBER(7,2);
    
    TYPE type_employes
    IS TABLE OF employes%ROWTYPE;
    num_emp type_employes;
    nom type_employes;
    num_dept type_employes;
    salaire type_employes;
    i employes.salaire%TYPE;
    
    BEGIN 
    	--i:=type_employes(num_emp,nom,num_dept,salaire);
    	FOR i IN salaire.first..salaire.last //ORA-06531:réference a un ensemble non initialisé
    	LOOP
    		
    		SELECT num_emp,nom,num_dept,salaire 
    		INTO nempl,nnoml,ndptl,nsala FROM employes WHERE salaire>2331.00;
    		INSERT INTO courrier_empl VALUES (nempl,nnoml,ndptl,nsala);
    
    	
    	END LOOP;
    	
    END;
    /

  2. #2
    Membre expert

    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Janvier 2004
    Messages
    2 862
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 862
    Points : 3 609
    Points
    3 609
    Par défaut
    Tu fais une boucle sur un ensemble vide : nulle part dans ton code tu n'as rempli le tableau salaire.

    NB : merci d'utiliser les balises code qui améliorent la lisibilité.
    Un problème sans solution est un problème mal posé

    Merci de poser vos questions sur le forum, je ne réponds pas aux questions posées par MP.

  3. #3
    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
    on peut déjà remplacer :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    		SELECT num_emp,nom,num_dept,salaire 
    		INTO nempl,nnoml,ndptl,nsala FROM employes WHERE salaire>2331.00;
    		INSERT INTO courrier_empl VALUES (nempl,nnoml,ndptl,nsala);
    Par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    INSERT INTO courrier_empl SELECT num_emp,nom,num_dept,salaire 
    		FROM employes WHERE salaire>2331.00;
    et en effet, si le tableau n'est pas rempli la boucle ne peut pas fonctionner

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

    Informations forums :
    Inscription : Décembre 2006
    Messages : 65
    Points : 43
    Points
    43
    Par défaut
    bah en fait je n'avais pas fournit avec le code les table mais elles sont creer les voici:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    CREATE TABLE departement
    (	num_dept number(4) PRIMARY KEY,
    	nom_dept VARCHAR(20),
    	localite char(10)
    );
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    CREATE TABLE employes
    (	num_emp NUMBER(4) PRIMARY KEY,
    	nom CHAR(10) NOT NULL CHECK (NOM=UPPER(NOM)),
    	fonction CHAR(9),
    	superieur NUMBER(4) REFERENCES employes(num_emp),
    	date_embauche DATE,
    	salaire NUMBER(7,2) CHECK(salaire>1000),
    	comission NUMBER (7,2),
    	num_dept number(4) NOT NULL REFERENCES departement (num_dept)
    );
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    CREATE TABLE courrier_empl
    (
    num_emp NUMBER(4),
    nom CHAR(10),
    num_dept NUMBER(4),
    salaire NUMBER(7,2)
    );
    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
    DECLARE 
    empl courrier_empl.num_emp%TYPE;
    noml courrier_empl.nom%TYPE;
    dptl courrier_empl.num_dept%TYPE;
    sala courrier_empl.salaire%TYPE;
     
    nempl NUMBER(4);
    nnoml CHAR(10);
    ndptl NUMBER(4);
    nsala NUMBER(7,2);
     
    TYPE type_employes
    IS TABLE OF employes%ROWTYPE;
    num_emp type_employes;
    nom type_employes;
    num_dept type_employes;
    salaire type_employes;
    i employes.salaire%TYPE;
     
    BEGIN 
    	--i:=type_employes(num_emp,nom,num_dept,salaire);
    	FOR i IN salaire.first..salaire.last //ORA-06531:réference a un ensemble non initialisé
    	LOOP
     
    		INSERT INTO courrier_empl SELECT num_emp,nom,num_dept,salaire 
    		FROM employes WHERE salaire>2331.00;
     
     
    	END LOOP;
     
    END;
    /

  5. #5
    Membre expert

    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Janvier 2004
    Messages
    2 862
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 862
    Points : 3 609
    Points
    3 609
    Par défaut
    Cela ne change rien, nulle part dans le code que tu nous fournis, ton tableau salaire est rempli. De plus, je ne comprends pas à quoi sert ta boucle

    Pour la deuxième fois, merci de penser aux balises code
    Un problème sans solution est un problème mal posé

    Merci de poser vos questions sur le forum, je ne réponds pas aux questions posées par MP.

  6. #6
    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
    je ne saurais trop te conseiller de lire ce tutoriel : http://sheikyerbouti.developpez.com/...?page=Chap5#L5 pour mieux appréhender tes problèmes.

Discussions similaires

  1. [debutant] Pointeur non-initialisé ?
    Par Pit29 dans le forum C
    Réponses: 8
    Dernier message: 04/01/2007, 16h55
  2. [Oracle8i][PL/SQL]Probleme de commit ou non ?
    Par Drizzt [Drone38] dans le forum Oracle
    Réponses: 11
    Dernier message: 09/08/2006, 10h10
  3. SQL plus connaitre l'ensemble des tables
    Par miniseb dans le forum Oracle
    Réponses: 2
    Dernier message: 26/07/2006, 15h41
  4. Directx non initialisé
    Par Cyclops dans le forum DirectX
    Réponses: 3
    Dernier message: 07/06/2005, 10h14
  5. Réponses: 3
    Dernier message: 24/05/2005, 08h19

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