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

SQL Oracle Discussion :

Insertion complexe sql oracle


Sujet :

SQL Oracle

  1. #1
    Membre averti
    Inscrit en
    Janvier 2009
    Messages
    56
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 56
    Par défaut Insertion complexe sql oracle
    Bonjour tout le monde,

    je me débrouille pas mal en oracle, mais là j'avoue que je suis bloqué, en fait je cherche à insérer dans ma table des lignes sous condition, cette condition est la suivante :
    Insérer la première (min) ligne valide (flag) mais aussi la première ligne en erreur si il n’y a pas de ligne valide.

    Merci de votre aide (c'est urgent)

  2. #2
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 454
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 454
    Par défaut
    Et les descriptions, les DDL, un petit jeu de données qui pose problème, la version d'Oracle utilisée, à votre avis on peut aussi les deviner ?

  3. #3
    Membre averti
    Inscrit en
    Janvier 2009
    Messages
    56
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 56
    Par défaut
    Excusez moi, voici les détails :
    - oracle 10g,
    - voici la requête dont le select doit répondre à mes conditions citées dans le premier message :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT
    FLG, 
    TRIM(A),
    MIN(B)
    FROM Table X
    GROUP BY A, B, FLG
    je cherche à sélectionner le Min(B) quand le FLG =30, sinon, si le A n'a pas de ligne avec FLG=30 alors dans ce cas là je sélectionnerai la ligne dont le FLG=20.

    Merci beaucoup.

  4. #4
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 454
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 454
    Par défaut
    Ca reste assez opaque comme problème. Pouvez-vous créer un jeu de données initial, ainsi que ce que vous en attendez ?

  5. #5
    Membre averti
    Inscrit en
    Janvier 2009
    Messages
    56
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 56
    Par défaut
    Voici le jeux de données :

    FLG A B
    30 1 5
    30 1 4
    20 1 3
    20 2 3
    20 2 0

    Après le lancement de mon SELECT, je devrais avoir les lignes suivantes :
    30 1 4
    20 2 0

    Merci pour votre aide

  6. #6
    Membre expérimenté Avatar de mongilotti
    Profil pro
    Inscrit en
    Février 2003
    Messages
    314
    Détails du profil
    Informations personnelles :
    Localisation : Tunisie

    Informations forums :
    Inscription : Février 2003
    Messages : 314
    Par défaut
    peut tu nous expliquer un peu ton raisonnement.

  7. #7
    Membre averti
    Inscrit en
    Janvier 2009
    Messages
    56
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 56
    Par défaut
    vous remarquez sur le jeux de données que pour une même valeur de la colonne A je pourais avoir plusieurs lignes , moi ce que je cherche est pour chaque valeur distincte de la colonne A : je dois sélectionner la ligne dont la colonne B est la plus petite dans le cas où pour cette valeur de A contient un FLG =30, sinon je sélectionnerais le min de B pour un FLG = 20.

    Autrement dis, le FLg=30 l'emporte dans ma sélection au min(B) pour la même valeur de la colonne A : exemple :
    30 1 5
    30 1 4
    20 1 3

    le min(B) =3 mais moi je cherche que la ligne : 30 1 4 qui doit être sélectionnée
    car cette ligne contient le FLg=30 et du coups je vais sélectionner le min(B) parmis les ligne dont le FLg=30.

    Merci

  8. #8
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 454
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 454
    Par défaut
    Essayez ainsi :
    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
    WITH MaTable AS
    (
    select 30 as flag, 1 as colA, 5 as colB from dual union all
    select 30        , 1        , 4         from dual union all
    select 20        , 1        , 3         from dual union all
    select 20        , 2        , 3         from dual union all
    select 20        , 2        , 0         from dual
    )
    select flag, colA, colB
    from
    (
    select flag, colA, colB,
           row_number() over(partition by colA order by flag desc, colB asc) as rn
      from MaTable
    )
    where rn = 1;
     
    FLAG	COLA	COLB
    30	1	4
    20	2	0

  9. #9
    Membre averti
    Inscrit en
    Janvier 2009
    Messages
    56
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 56
    Par défaut
    Merci pour votre réponse,

    ça marche bien, sauf que dans mon cas : le FLG contient d'autres valeurs que 30 et 20 et (15, 11, 31 que je n'utilise pas dans ma sélection) !!!!!!
    du coup votre algo va me faire une sélection sur chaque valeur possible de FLG, or moi j'en ai besoin de prendre en cosidération que deux valeur.

    Que faire? existe t-il un coutournement pour votre solution ?
    Merci.

  10. #10
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 454
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 454
    Par défaut
    Il suffit de rajouter un where flg in (20, 30), par exemple.

  11. #11
    Membre averti
    Inscrit en
    Janvier 2009
    Messages
    56
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 56
    Par défaut
    Merci beaucoup à vous, je crois que ça marche, cool,
    merci

  12. #12
    Membre averti
    Inscrit en
    Janvier 2009
    Messages
    56
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 56
    Par défaut
    Salut,

    Déçu de revenir encore sur ce point, en fait le bloc SQL tel qu'il est proposé par Waldar, en l'occurrence le"With" et autres fonctions ne sont pas supportées par mes loockup INFORMATICA.

    Merci de me répondre si'il ya un contournement à mon problème.
    A plus

  13. #13
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 454
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 454
    Par défaut
    Vous n'avez pas besoin du With, c'est juste pour créer un jeu de test.
    Votre requête est, aux noms des colonnes près :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    SELECT flag, colA, colB
    FROM
    (
    SELECT flag, colA, colB,
           row_number() over(partition BY colA ORDER BY flag DESC, colB ASC) AS rn
      FROM <MaTable>
     WHERE flag in (20, 30)
    )
    WHERE rn = 1;

  14. #14
    Membre averti
    Inscrit en
    Janvier 2009
    Messages
    56
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 56
    Par défaut
    Bonjour,

    J'ai supprimé le WITH de ma requête comme vous m'avez conseillé mais l'erreur persiste toujours dans mon lookup INFORMATICA, je pense que c'est à cause de :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    row_number() over(partition BY colA ORDER BY flag DESC, colB ASC) AS rn et where rn=1;
    Quelqu'un peut il me confirmer ça ?

    merci à vous

  15. #15
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 454
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 454
    Par défaut
    Je n'ai plus PowerCenter sous la main actuellement, mais de mémoire les requêtes SQL fonctionnaient bien.

    Vous avez bien renommé les colonnes conformément à votre table ?

  16. #16
    Membre averti
    Inscrit en
    Janvier 2009
    Messages
    56
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 56
    Par défaut
    Bonjour,

    Oui j'ai bien renommé et la requête sous TOAD passe bien, par contre sous INFORMATICA j'ai le message d'erreur suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    TM_6190 ERROR : Could not uniquely determine a relational connection or application connection thas is used as $Source or $ Target for a lookup or stored procedure transformation
    je ne sais plus quoi faire pour intégrer ce mapping dans mon travail.
    merci de votre aide

  17. #17
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 454
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 454
    Par défaut
    On dirait juste un défaut de paramétrage au niveau de la connexion, mais ça fait deux ans que je n'ai plus touché à PowerCenter, ma mémoire de ce genre de détail s'effrite.

  18. #18
    Membre averti
    Inscrit en
    Janvier 2009
    Messages
    56
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 56
    Par défaut
    OK, Merci, je vais continuer à regarder de mon coté.

    Salut

  19. #19
    Membre averti
    Inscrit en
    Janvier 2009
    Messages
    56
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 56
    Par défaut
    WALDAR,

    Je sais ce qui me pose problème, c'est le SELECT d'un SELECT que les lookup n'acceptent pas, car quand je lance ma requête sans le dernier SELECT ( ie sans le WHERE rn = 1) le workflow passe bien !!

    y'a t-il un autre moyen d'intégrer le "WHERE rn = 1" sans passer par un deuxième SELECT ??

    Merci.

  20. #20
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 454
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 454
    Par défaut
    En ajoutant un composant filtre juste après le lookup ?

    Ce ne sera pas parfaitement optimisé mais les résultats seront justes.

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. [SQL Oracle] Requête complexe
    Par lapartdombre dans le forum Langage SQL
    Réponses: 1
    Dernier message: 02/11/2005, 14h31
  2. Generer du xml via SQL(oracle) avec de l'asp
    Par jpg dans le forum XQUERY/SGBD
    Réponses: 6
    Dernier message: 03/08/2004, 12h36
  3. [SQL ORACLE] Soustraction de deux timestamps
    Par platinum07 dans le forum SQL
    Réponses: 34
    Dernier message: 02/07/2004, 10h42
  4. PL/SQL ORACLE (Record Dans un Varchar2)
    Par argoet dans le forum PL/SQL
    Réponses: 24
    Dernier message: 14/05/2004, 16h06
  5. Réponses: 4
    Dernier message: 13/04/2004, 19h12

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