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 :

PL/SQL, probl�me dans un curseur avec un insert


Sujet :

PL/SQL Oracle

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    16
    D�tails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2004
    Messages : 16
    Par d�faut PL/SQL, probl�me dans un curseur avec un insert
    Bonjour,

    J'ai deux tables: "session_client" et "fichier"
    Je cr�e un curseur qui est le r�sultat d'une requ�te sur "session_client" :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
     
    cursor c_sessions is select * from session_client where ... ;
    Puis je parcours mon cuseur:

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
     
    for c_l in c_sessions
    loop
    A ce moment j'aimerais ins�rer dans la table "fichier", un champ de mon tuple courant de mon curseur seulement si celui-ci n'est pas d�j� pr�sent dans la table "fichier".
    J'ai donc �cris ceci:

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
     
    INSERT INTO fichier (lib_fichier)
                SELECT c_l.fichier FROM c_sessions
                WHERE c_l.fichier NOT IN
                (SELECT lib_fichier FROM fichier);
    Mais cela ne fonctionne pas! J'ai l'erreur suivante:
    PL/SQL: ORA-00942: Table ou vue inexistante
    en me d�sigant mon instruction "FROM c_sessions".
    Si je ne peux pas utiliser un curseur dans ma clause FROM, je ne vois pas comment r�soudre mon probl�me!

    Quelqu'un a-t-il une solution susceptible de m'aider? Ou une explication? Merci d'avance!

  2. #2
    Membre confirm�
    Inscrit en
    Juin 2004
    Messages
    213
    D�tails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 213
    Par d�faut
    salut,

    T'as essayer au lieu de mettre ton curseur dans ta clause from de mettre le vrai nom de la table c'est � dire session_client??

  3. #3
    Membre confirm�
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    36
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 36
    Par d�faut
    Est pourquoi pas plutot

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
     
    INSERT INTO fichier (lib_fichier) VALUES (c_l.fichier);
    tout simplement
    Il me semble que c'et la meilleur mani�re d'utiliser ton curseur.

  4. #4
    Membre confirm�
    Inscrit en
    Juin 2004
    Messages
    213
    D�tails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 213
    Par d�faut
    Mais le probl�me en voyant �a requete c'est qu'il veu ins�rer ce qu'il r�cup ds son curseur mais il ne veut pas de redondance.

    Si elle fait ton code yvesguep il ne fera pas de test sur la redondance

  5. #5
    Membre confirm�
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    36
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 36
    Par d�faut
    Pardon, ca m'apprendra a lire en diagonale.

    En utilisant la table DUAL au lieu de "session_client" on peut gagner en pref.
    Je pense

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
     
    INSERT INTO fichier (lib_fichier)
                SELECT c_l.fichier FROM DUAL
                WHERE c_l.fichier NOT IN
                (SELECT lib_fichier FROM fichier);
    C juste une idee en passant.