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 :

[Oracle 9.1] Opérations sur tables très proches...


Sujet :

Oracle

  1. #1
    Membre régulier
    Inscrit en
    Juin 2003
    Messages
    156
    Détails du profil
    Informations forums :
    Inscription : Juin 2003
    Messages : 156
    Points : 85
    Points
    85
    Par défaut [Oracle 9.1] Opérations sur tables très proches...
    Bonjour,

    Je vous expose ma problématique...

    J'ai deux tables dont les structures sont par essence très proches. La première est une table Client et la seconde est la table ClientRejet. Cette dernière contient les mêmes champs auxquels sont ajoutés deux champs liés au rejet (date et libellé pour faire simple). Donc je lis dans la table Client et si c'est pas bon, j'insère la ligne dans la table ClientRejet.

    Ma question est la suivante : Comment faire d'une façon élégante si possible l'insertion dans la table de rejet sans avoir à copier champ à champ depuis la table Client ?

    Merci !

    Frédéric

  2. #2
    Membre confirmé

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

    Informations forums :
    Inscription : Juin 2004
    Messages : 487
    Points : 455
    Points
    455
    Par défaut
    tu fais un trigger dans à l'insertion dans ta table client.
    Si les checks que tu définis sur ta nouvelle valeurs sont ok, alors tu insère dans rejet ta ligne

  3. #3
    Expert éminent sénior
    Avatar de SheikYerbouti
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    6 760
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 6 760
    Points : 11 862
    Points
    11 862
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    INSERT INTO TABLE_2
    SELECT a.*, 'Motif', SYSDATE FROM TABLE_1 a

  4. #4
    Membre régulier
    Inscrit en
    Juin 2003
    Messages
    156
    Détails du profil
    Informations forums :
    Inscription : Juin 2003
    Messages : 156
    Points : 85
    Points
    85
    Par défaut
    Merci mais existe-t-il une solution sans trigger ? Cette problématique, je l'ai en fait de très nombreuses fois puisque je développe une reprise de données en fait. J'avais un peu simplifié mon exemple pour faire comprendre ma problématique.

    En fait, j'aurais aimé une solution plus logicielle autour des variables structurées genre record, %rowtype...

    Frédéric

  5. #5
    Membre régulier
    Inscrit en
    Juin 2003
    Messages
    156
    Détails du profil
    Informations forums :
    Inscription : Juin 2003
    Messages : 156
    Points : 85
    Points
    85
    Par défaut
    Citation Envoyé par SheikYerbouti
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    INSERT INTO TABLE_2
    SELECT a.*, 'Motif', SYSDATE FROM TABLE_1 a
    Je vois, cette solution me plait bien...

    Mais en fait là, tu insères toute la table en fait alors que moi je voudrais n'insérer que la ligne que je viens de lire et dont je me suis aperçu de la non validité... Dans mon code, j'ai récupéré cette ligne lue dans une variable %rowtype. Je peux en faire qqc ?

    Merci, je sens qu'on s'approche !

  6. #6
    Expert éminent sénior
    Avatar de SheikYerbouti
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    6 760
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 6 760
    Points : 11 862
    Points
    11 862
    Par défaut
    Il suffit d'ajouter une clause where...

  7. #7
    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
    Moi, ça me paraît très risqué comme solution, car si tes tables évoluent cela ne fonctionnera plus (l'ordre des colonnes dans ta table client devant être systèmatiquement identique à l'ordre de ta table client_rejet).

    Je pencherais plus vers une solution en sql dynamique.
    http://www.developpez.net/forums/viewtopic.php?t=401562

    NB : pourquoi récupères-tu ta ligne dans une variable ? Ne peux-tu pas traiter l'insertion directement ?

  8. #8
    Membre régulier
    Inscrit en
    Juin 2003
    Messages
    156
    Détails du profil
    Informations forums :
    Inscription : Juin 2003
    Messages : 156
    Points : 85
    Points
    85
    Par défaut
    Les tables n'évolueront pas, c'est une reprise de données, donc les programmes ne sont sensés tournés qu'une seule fois...

    Ajouter une clause where ? Oui, cela revient éventuellement à resélectionner la ligne en fait ?

    Pourquoi je récupère dans une variable ? Ca me permet de faire des tests sur les champs que je récupère en une seule fois.

    Fred

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

Discussions similaires

  1. Opérations sur tables jointes
    Par fikou dans le forum VB.NET
    Réponses: 3
    Dernier message: 10/02/2008, 15h19
  2. [Oracle] Plusieurs select max() sur plusieurs tables
    Par Xavier2701 dans le forum Langage SQL
    Réponses: 3
    Dernier message: 14/06/2006, 17h36
  3. [Oracle 9i] Traitement SQL sur une table
    Par Requin15 dans le forum Langage SQL
    Réponses: 11
    Dernier message: 02/06/2006, 09h56
  4. [Oracle 9i] Déclencheur sur table objet
    Par Process Linux dans le forum Oracle
    Réponses: 5
    Dernier message: 28/01/2006, 09h53
  5. Réponses: 2
    Dernier message: 22/04/2005, 16h44

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