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 :

[Debutant] procedure PL/SQL association de donnees de plusieurs tables


Sujet :

PL/SQL Oracle

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 8
    Points : 2
    Points
    2
    Par défaut [Debutant] procedure PL/SQL association de donnees de plusieurs tables
    Bonjour à tous!

    Le décor:
    je récupère des données contenant un index de lieu (ID_LIEUX) que je mets dans une table: TABLE1
    Je dispose d'une table :TABLE2, contenant les ID (ID_LIEUX) et les libellés des lieux (LIB_LIEUX)

    Je voudrais faire une procédure me permettant d'aller chercher les libellés de lieux de la table 2 pour les écrire à la place des libellés de lieu de la table 1 pour chaque enregistrement...

    Je ne sais pas comment m'y prendre...
    Je vois en VB mais le SQL c'est tout nouveau pour moi...Pourriez vous m'aiguiller?

  2. #2
    Membre expérimenté Avatar de scheu
    Inscrit en
    Juin 2007
    Messages
    1 506
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 1 506
    Points : 1 734
    Points
    1 734
    Par défaut
    Il y a un tutoriel PL/SQL très bien fait sur ce site : http://sheikyerbouti.developpez.com/pl_sql/
    La théorie, c'est quand on sait tout mais que rien ne fonctionne.
    La pratique, c'est quand tout fonctionne mais que personne ne sait pourquoi.
    Ici, nous avons réuni théorie et pratique : Rien ne fonctionne ... et personne ne sait pourquoi !

    Réplication de base avec Postgresql : http://scheu.developpez.com/tutoriel.../log-shipping/

  3. #3
    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
    Un simple update devrait suffir non ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    update table1 set libelle_lieux = (select lib_lieux from table2 where id_lieux = table1.id_lieux)
    where exists (select null from table2 where id_lieux = table1.id_lieux)
    La clause where est pour éviter de mettre à null des libellés de lieux présent dans la table1 et pas dans la table2.
    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.

  4. #4
    Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 8
    Points : 2
    Points
    2
    Par défaut
    Tout d'abords, merci pour ta réponse Plainer

    En fait, un simple update suffit mais c'est le fait de le passer sur chaque enregistrement de la table 1...
    Je pourrai passer par une boucle mais je ne sais pas comment en sortir...
    Dois je utiliser un curseur?


    PS (scheu): Merci pour le tuto mais si je pose ma question ici c'est que je n'ai pas trouvé ou pas compris la réponse à ma question

  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
    Citation Envoyé par Jagga Voir le message
    En fait, un simple update suffit mais c'est le fait de le passer sur chaque enregistrement de la table 1...
    Peux-tu préciser, je ne comprends pas ?
    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
    Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 8
    Points : 2
    Points
    2
    Par défaut
    Peux-tu préciser, je ne comprends pas ?
    Désolé c'est moi qui n'ai pas compris...
    Cela marche très bien !

    Merci beaucoup!

  7. #7
    Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 8
    Points : 2
    Points
    2
    Par défaut
    Désolé mais comme je bosse sur d'autres projets, celui-ci est un peu réalisé en pointillés...et j'ai du mal à suivre...
    Bref j'ai toujours un problème.

    Cela marche très bien mais j'ai homis certaines données importantes.
    Effectivement, la table 2 contient des dates et des heures de modifications...
    Je peux donc avoir plusieurs enregistrements de même ID_Lieux mais de lieux et de date /heure différentes.
    ex:
    | ID_LIEU | LIEU | DATE | HEURE |
    1 | PARIS| 20071114 | 092334 |
    2 | LONDRES| 20070910 | 221214 |
    1 | MARSEILLES| 20061009 | 100330 |
    ....
    1 | TUNIS| 20080120 | 190336 |

    La table 1 contient elle aussi des dates et des heures par enregistrement.
    ex:
    NOM|PRENOM|ID_LIEU|DATE|HEURE|
    DURAND | MICHEL | 1 |20071115 | 083432 |
    Il faut donc prendre le bon lieu en effectuant un test sur la date et l'heure.
    Dans le cadre de mon exemple le lieu est PARIS.

    L'avantage est que les dates et heures sont des integers.
    C'est un vrai casse tête, pouvez vous me donner une orientation, une piste?
    Comment feriez vous?

  8. #8
    Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 8
    Points : 2
    Points
    2
    Par défaut
    J'ai tenté d'inclure des 'AND' dans la condition du WHERE mais cela ne fonctionne pas correctement...

    Help me

  9. #9
    Membre actif
    Profil pro
    Étudiant
    Inscrit en
    Février 2008
    Messages
    224
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2008
    Messages : 224
    Points : 211
    Points
    211
    Par défaut
    Bonjour,

    Pourquoi avoir créé deux colonnes pour la date et l'heure au lieu d'une seule de type DATE ?

    Sinon, montre ta requête avec ta fameuse clause AND supplémentaire, ca se trouve il s'agit juste d'une légère erreur

  10. #10
    Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 8
    Points : 2
    Points
    2
    Par défaut
    Pourquoi avoir créé deux colonnes pour la date et l'heure au lieu d'une seule de type DATE ?
    Tout simplement parce que les données proviennent d'un autre système et que l'import ce fait de cette manière (je ne suis pas maitre d'oeuvre pour l'import... )

    Pour les AND cela ne marche pas non pas dans le code mais dans le résultat...
    Effectivement, il peut y avoir plus de 3 lieux avec un même ID_Lieux...
    Il faut donc utiliser un intervalle...

  11. #11
    Membre actif
    Profil pro
    Étudiant
    Inscrit en
    Février 2008
    Messages
    224
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2008
    Messages : 224
    Points : 211
    Points
    211
    Par défaut
    Citation Envoyé par Jagga Voir le message

    Il faut donc prendre le bon lieu en effectuant un test sur la date et l'heure.
    Dans le cadre de mon exemple le lieu est PARIS.
    Il y a plusieurs choses que je ne comprend pas... pourquoi dans ta table 2 plusieurs villes ont le même ID_LIEUX ?

    Ensuite tu dis pour ton exemple qu'il faut faire le test sur la date et l'heure et que dans ton exemple le lieu est PARIS or la seule chose qui réunit PARIS et MICHEL DURAND c'est ID_LIEUX. Donc je ne vois pas sur quoi tu veux te baser pour faire la mise à jour...

    Pourquoi ne pas mettre une contrainte unique ou primary key sur l'ID_LIEUX de la table 2 ?

  12. #12
    Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 8
    Points : 2
    Points
    2
    Par défaut
    Parce que les données sont maquillées mais je dois garder les données telles qu'elles sont... I
    ls s'agit d'un historique permettant de faire des recherches à postériori...

    Si je garde l'ID et qu'un même ID possède plusieurs valeurs, il faut bien que je travaille sur une autre donnée pour récupérer le bon ID_Lieu, en loccurence la date et l'heure.

    J'ai finalement trouver la solution via une fonction...

    Merci de votre aide!

  13. #13
    Membre actif
    Profil pro
    Étudiant
    Inscrit en
    Février 2008
    Messages
    224
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2008
    Messages : 224
    Points : 211
    Points
    211
    Par défaut
    Ok.

    Peux-tu quand même nous mettre ta solution ?

  14. #14
    Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 8
    Points : 2
    Points
    2
    Par défaut
    create or replace FUNCTION MAJ_LIB_PAYS
    RETURN VARCHAR2 AS
    begin
    declare
    cursor cur_adresse is select enreg_id_pays,xact_date,xact_time,rowid from qui.adresse;
    v_lib_pays varchar2(2000);
    begin
    for rcur_adresse in cur_adresse loop
    dbms_output.put_line(
    rcur_adresse.enreg_id_pays||'|'||
    rcur_adresse.xact_date ||'|'||
    lpad(to_char(rcur_adresse.xact_time),6,'0')
    );
    select *
    into v_lib_pays
    from (select lib_pays
    from qui.pays
    where id_pays = rcur_adresse.enreg_id_pays
    and modify_date||lpad(to_char(modify_time),6,'0') <= rcur_adresse.xact_date||lpad(to_char(rcur_adresse.xact_time),6,'0')
    order by modify_date desc, modify_time desc)
    where rownum =1;
    update qui.adresse set pays=v_lib_pays where rowid=rcur_adresse.rowid;
    end loop;
    commit;
    end;
    RETURN NULL;
    END;

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

Discussions similaires

  1. [SQL SERVER 2008] Requête sur plusieur Tables
    Par Phoquounet dans le forum Développement
    Réponses: 9
    Dernier message: 03/10/2011, 10h10
  2. ajout de donnee de plusieurs tables via un formview
    Par javalhoussain dans le forum ASP.NET
    Réponses: 0
    Dernier message: 29/03/2011, 02h23
  3. Réponses: 5
    Dernier message: 22/11/2010, 18h20
  4. [MS SQL]faire un UPDATE sur plusieurs tables en meme temps
    Par touille dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 18/07/2007, 09h45
  5. [MS SQL] Remplacer des valeurs dans plusieurs tables
    Par salmoliv dans le forum Langage SQL
    Réponses: 3
    Dernier message: 04/10/2006, 17h31

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