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 :

jointure externe (complexe) Sur des clés concaténé


Sujet :

SQL Oracle

  1. #1
    Membre habitué Avatar de scofield
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Octobre 2006
    Messages
    179
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Octobre 2006
    Messages : 179
    Points : 181
    Points
    181
    Par défaut jointure externe (complexe) Sur des clés concaténé
    bonjour , DB 9.2 devloper s 10g
    jai un probleme sur une requete:qui utilise des jointure externe sur plusieur tables dont deux contient des clé composé alant jusqu'a 3 attribut par clé.

    les tables :
    CLIENT (num_cli,srevice_cli , nom_cli....)

    COMNDE (num_comd,date_c,num_cli...)

    PIECE (ref_piece,des_piece,qte,seuil...)

    ACHAT_Piec (num_comd pk*fk,des_piece pk*fk,qté_P) -- client piece
    HUILE (code_huile,des_huile,type_hle,qté_h)
    ACHAT_HUILE (num_comd fk*pk,num_huile fk*pk,qte_com)--maint

    PRESTATION (num_prest,des_prest)

    DETAIL_Prest (num_comd pk*fk ,num_prest pk*fk,montant) --pour un client maintenance

    VEH_PREST(n_chass*pk,num_compm fk*pk, des_vehm..) vehicule de la maintennance
    PIECE_PREST(n_chass fk*pk, num_compm fk*pk,num_piece fk*pk,qté_p..)--piece utilisé
    PREST_HUILE(n_chass fk*pk,num_compm fk*pk,num_huile fk*pk, qté_h..)--huile utilisé
    ET VOILA LA REQUETE : probleme : aucuen ligne retourné alors qu'il ya des données
    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
    SELECT s.num_compm,s.n_chass,v.num_prest,t.des_prest prestation,h.des_huil,
    hp.qt_hp,p.des_piec piece,s.qt_pm
    
    FROM PREST_VEH v,COMD_PM c,PRESTATION t,
    PIECE_PREST s,PIECE p,HUILE_PREST hp,HUILE h
    WHERE  v.num_compm =c.NUM_COMPM
    AND   s.N_CHASS =v.N_CHASS
    AND    s.NUM_COMPM=v.NUM_COMPM
    AND   s.NUM_PREST=v.NUM_PREST
    AND   hp.N_CHASS=v.N_CHASS
    AND   hp.NUM_COMPM=v.NUM_COMPM
    AND   hp.NUM_PREST=v.NUM_PREST
    AND  hp.N_CHASS(+)=s.n_chass
    AND   hp.num_compm(+)=s.num_compm
    AND   hp.num_prest(+)=s.NUM_PREST
    AND   v.num_prest=t.NUM_PREST
    AND   s.NUM_PIECE=p.REF_PIEC
    AND   hp.NUM_HL=h.CODE_HUIL
    la jointure externe sur clé concatené ( de 3 attribut) j maitrise pas aparement
    ALORS , une idé ??
    PS: grosso modo t1.cl1(+)=t2.cl1(+) t1.cl2(+)=t2.cl2(+) t1.col3(+)=t2.col3(+)
    ainssi de suite avec les autres>> mais si j f les + des deux coté j'aurais "ORA-01468 un prédicat ne peut référencer qu'une table en jointure externe".

  2. #2
    Membre habitué Avatar de Loyd1974
    Profil pro
    Inscrit en
    Août 2007
    Messages
    176
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 176
    Points : 196
    Points
    196
    Par défaut
    Si tu veux faire un FULL OUTER JOIN, il faut obligatoirement passer par l'écriture de ton ordre SQL en format ANSI, comme montrer dans l'exemple ci-dessous:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    SELECT d.department_id, e.employee_id
      FROM employees e
      FULL OUTER JOIN departments d
        ON e.department_id = d.department_id
     ORDER BY d.department_id;
    Plus de précision ici

  3. #3
    Membre habitué Avatar de scofield
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Octobre 2006
    Messages
    179
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Octobre 2006
    Messages : 179
    Points : 181
    Points
    181
    Par défaut nonon
    ça ne marche pas j'ai tte essayé avec le full j'ai 5000 enregistrement avec
    plein de doublons .je crois que c'est a cause du nombre de clés étrangères en
    tout cas je suis plus que désespéré (anémique) .

    A L'AIIIIIIIIIIIIIIIIIIDE
    J'Ai PLUS QU'UNE SEMAINE ,SINON JE DEVRAI REDOUBLER POUR SOUTENIRE .

    VOICI UN SHEMA pour mieux comprendre + les tables jointes


    PS:
    ce qui est bizarre et que le modérateur doit savoir c'est que j'ai posté une réponse le jour
    même ou le 2eme message a été écrit .
    et le serveur de dev.com la littéralement aspiré, c'est navrant.
    Fichiers attachés Fichiers attachés

  4. #4
    McM
    McM est déconnecté
    Expert éminent

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Points : 7 740
    Points
    7 740
    Billets dans le blog
    4
    Par défaut
    Elle doit faire quoi ta requete ?

    Car la redondance ça n'a jamais été bon :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    AND s.n_chass 		= v.n_chass
    AND s.num_compm 	= v.num_compm
    AND s.num_prest 	= v.num_prest
     
    AND hp.n_chass 		= v.n_chass
    AND hp.num_compm 	= v.num_compm
    AND hp.num_prest 	= v.num_prest
     
    AND hp.n_chass(+) 	= s.n_chass
    AND hp.num_compm(+) 	= s.num_compm
    AND hp.num_prest(+) 	= s.num_prest
    La seconde partie t'oblige à avoir des données dans hp=v.
    Faire un lien entre hp et s (Huile_Prest et Piece_Prest) n'a pas lieu d'être dans ton cas :
    HUILE_PREST (hp) est une sous table de PREST_VEH (v)
    PIECE_PREST (s) est une sous table de PREST_VEH (v)

    Ensuite dans tes selections, Dans le cas de jointures externes, il ne faut pas utiliser des colonnes des sous tables (sauf si c'est ce que tu veux) si tu veux les données de la table principale.

    Je vais modifier ta requete. Mais dis ce que ça doit faire quand même.
    More Code : More Bugs. Less Code : Less Bugs
    Mon Blog PL/Sql : Fichier Zip / Image BMP / Lire sqliteDB / QRCode et Images PNG ou BMP

  5. #5
    McM
    McM est déconnecté
    Expert éminent

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Points : 7 740
    Points
    7 740
    Billets dans le blog
    4
    Par défaut
    Solution 1:
    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
    SELECT v.num_compm, v.n_chass, v.num_prest, t.des_prest prestation, 
    	h.des_huil huile, hp.qt_hp, 
    	p.des_piec piece, pp.qt_pm
     
    FROM 	PREST_VEH v, COMD_PM c, PRESTATION t,
    	HUILE_PREST hp,	HUILE h,
    	PIECE_PREST pp, PIECE p
     
    WHERE c.num_compm 		= v.num_compm
    AND   v.num_prest 		= t.num_prest
     
    AND   pp.n_chass 	(+)	= v.n_chass
    AND   pp.num_compm 	(+)	= v.num_compm
    AND   pp.num_prest 	(+)	= v.num_prest
     
    AND   p.ref_piec	(+)	= pp.num_piece
     
    AND   hp.n_chass 	(+)	= v.n_chass
    AND   hp.num_compm 	(+)	= v.num_compm
    AND   hp.num_prest 	(+)	= v.num_prest
     
    AND   h.code_huil	(+)	= hp.num_hl
    Solution 2 (Moins jolie dans ce cas) :
    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
    SELECT v.num_compm, v.n_chass, v.num_prest, t.des_prest prestation, 
    	(SELECT h.des_huil FROM HUILE h WHERE h.code_huil = hp.num_hl) AS huile, hp.qt_hp, 
    	(SELECT p.des_piec FROM PIECE p WHERE p.ref_piec = pp.num_piece) AS piece, pp.qt_pm
     
    FROM 	PREST_VEH v, COMD_PM c, PRESTATION t,
    	HUILE_PREST hp,	PIECE_PREST pp
     
    WHERE c.num_compm 		= v.num_compm
    AND   v.num_prest 		= t.num_prest
     
    AND   pp.n_chass 	(+)	= v.n_chass
    AND   pp.num_compm 	(+)	= v.num_compm
    AND   pp.num_prest 	(+)	= v.num_prest
     
    AND   hp.n_chass 	(+)	= v.n_chass
    AND   hp.num_compm 	(+)	= v.num_compm
    AND   hp.num_prest 	(+)	= v.num_prest
    More Code : More Bugs. Less Code : Less Bugs
    Mon Blog PL/Sql : Fichier Zip / Image BMP / Lire sqliteDB / QRCode et Images PNG ou BMP

  6. #6
    Membre habitué Avatar de scofield
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Octobre 2006
    Messages
    179
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Octobre 2006
    Messages : 179
    Points : 181
    Points
    181
    Par défaut
    ma requete doi recuperé toute les huiles et les piece utilisés dans une prestation par vehicule (les + c'est pour les prestation san piece ou sans huile *les vides) la table prest_veh est la pour representer la cardinalité 1..n (une demande de prest peut avoir un ou plusieur vehicule a maintenire).
    je teste ca et je reviens .
    le delai c'est pour le 8 (depot) .j'avait carément laissé tombé : j croise les doit

  7. #7
    Membre habitué Avatar de scofield
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Octobre 2006
    Messages
    179
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Octobre 2006
    Messages : 179
    Points : 181
    Points
    181
    Par défaut
    heeeeeeeeeeeeeeeeey HAAAAAAAAAAAAAAAAAAAAA!
    Ca Marche !
    OH LALA .
    On viens de me dire que c'est demain le dernier délai !
    Merci MCM : OH COMBIEN SALUTAIRE EST TON GESTE !
    GOD BLESS YOU MCM.
    AVEC CA JE POURAI ME DEFFENDRE



    PS: si j'ai l temp j'exposerait , un tit souci pour le calcule des facture a terme (soustraction) mais , bon .j'sui deja bien la !

  8. #8
    Membre habitué Avatar de scofield
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Octobre 2006
    Messages
    179
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Octobre 2006
    Messages : 179
    Points : 181
    Points
    181
    Par défaut encore la !
    voila :
    pour afficher le prix des pieces et des huile et de la main d'euvre.je doit rajouter des colone a la requete.
    quoi de plus simple
    MAIS voila :les huiles change de prix de temps a autres!(important pour les bilan)

    bref j'ai du créer une table prix_huile
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    CREATE TABLE PRIX_HUILE (HUILE VARCHAR2(10) , DATE_P DATE NOT NULL, PRIX_HL NUMBER, 
        CONSTRAINT "FK_HUILE_P" FOREIGN KEY(HUILE) 
        REFERENCES HUILE(CODE_HUIL), 
        CONSTRAINT "PK_PRIX_H" PRIMARY KEY(HUILE, DATE_P)
    donc dans la requête je doit récupérer le prix_huile qui a la date (la Plus proche)=< du jour de la maintenance
    table COM_PM

    donc voila la requête de mcm avec montant
    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
    SELECT v.num_compm, v.n_chass, v.num_prest,v.prix_maind, t.des_prest prestation, 
        h.des_huil huile, hp.qt_hp, **[prix huile(select prix huile from.. where date_p =< date_compm)] * hp.qt_hp
        p.des_piec piece, pp.qt_pm,p.prix_p*pp.qt_pm prix_p
     
    FROM     PREST_VEH v, COMD_PM c, PRESTATION t,
        HUILE_PREST hp,    HUILE h,
        PIECE_PREST pp, PIECE p
     
    WHERE c.num_compm         = v.num_compm
    AND   v.num_prest         = t.num_prest
     
    AND   pp.n_chass     (+)    = v.n_chass
    AND   pp.num_compm     (+)    = v.num_compm
    AND   pp.num_prest     (+)    = v.num_prest
     
    AND   p.ref_piec    (+)    = pp.num_piece
     
    AND   hp.n_chass     (+)    = v.n_chass
    AND   hp.num_compm     (+)    = v.num_compm
    AND   hp.num_prest     (+)    = v.num_prest
     
    AND   h.code_huil    (+)    = hp.num_hl
    SI QUELQ'UN PEUT CORRIGER LA PARTIE P_HUILE JE POURAIT FINALISER LA VUE !!

  9. #9
    McM
    McM est déconnecté
    Expert éminent

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Points : 7 740
    Points
    7 740
    Billets dans le blog
    4
    Par défaut
    Soit tu fais une fonction, soit
    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
    SELECT v.num_compm, v.n_chass, v.num_prest,v.prix_maind, t.des_prest prestation, 
        h.des_huil huile, hp.qt_hp, 
    	(SELECT MIN(PRIX_HL) KEEP (DENSE_RANK FIRST ORDER BY pxh.date DESC) 
    	FROM PRIX_HUILE pxh
    	WHERE pxh.huile = h.des_huil
    	AND pxh.date_p <= c.date_compm) * hp.qt_hp AS prix_huile,
        p.des_piec piece, pp.qt_pm,p.prix_p*pp.qt_pm prix_p
     
    FROM     PREST_VEH v, COMD_PM c, PRESTATION t,
        HUILE_PREST hp,    HUILE h,
        PIECE_PREST pp, PIECE p
     
    WHERE c.num_compm         = v.num_compm
    AND   v.num_prest         = t.num_prest
     
    AND   pp.n_chass     (+)    = v.n_chass
    AND   pp.num_compm     (+)    = v.num_compm
    AND   pp.num_prest     (+)    = v.num_prest
     
    AND   p.ref_piec    (+)    = pp.num_piece
     
    AND   hp.n_chass     (+)    = v.n_chass
    AND   hp.num_compm     (+)    = v.num_compm
    AND   hp.num_prest     (+)    = v.num_prest
     
    AND   h.code_huil    (+)    = hp.num_hl
    More Code : More Bugs. Less Code : Less Bugs
    Mon Blog PL/Sql : Fichier Zip / Image BMP / Lire sqliteDB / QRCode et Images PNG ou BMP

  10. #10
    Membre habitué Avatar de scofield
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Octobre 2006
    Messages
    179
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Octobre 2006
    Messages : 179
    Points : 181
    Points
    181
    Par défaut ptit blem
    ORA-00904: "DATE_DEB_CONCEPT" : identificateur non valide
    au faite la verssion db est 9.2i ON DIRAIT QUE CE PARAMETRE N'est pa reconu(en tt cas la colone n'existe dans aucune de mes tables)
    exemple : DE VALEURS
    huile 1 : 10 octobre 2007(5euro)
    huile 1 : 25 octobre " (6 euro)
    huile 1 : 3 novembre " (10euro)
    Mantenance X date:4 novembre 2007
    =>prix huile1 (10 euro)*qt_hl =montant

  11. #11
    McM
    McM est déconnecté
    Expert éminent

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Points : 7 740
    Points
    7 740
    Billets dans le blog
    4
    Par défaut
    Tsss... erreur de copier coller...
    J'ai corrigé.
    More Code : More Bugs. Less Code : Less Bugs
    Mon Blog PL/Sql : Fichier Zip / Image BMP / Lire sqliteDB / QRCode et Images PNG ou BMP

  12. #12
    Membre habitué Avatar de scofield
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Octobre 2006
    Messages
    179
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Octobre 2006
    Messages : 179
    Points : 181
    Points
    181
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT v.num_compm, v.n_chass, v.num_prest,v.prix_maind, t.des_prest prestation,
    *
    a  la 1er execution
    ERREUR à la ligne 1 : 
    ORA-03113: fin de fichier sur canal de communication
    2eme execution:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ORA-03114: pas connecté à ORACLE
    ps: serai ce un probleme de order by de trop ou bien des type date (comparaison) en tt cas j'ai meme essayé avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    to_char(pxh.date_p,'yyyymmdd') <= to_char(c.date_compm,'yyyymmdd')
    kif kif

  13. #13
    Membre habitué Avatar de scofield
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Octobre 2006
    Messages
    179
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Octobre 2006
    Messages : 179
    Points : 181
    Points
    181
    Par défaut
    voici Le fichier ALERT.LOG
    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
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    Mon Nov 05 14:30:49 2007
    ORACLE V9.2.0.1.0 - Production vsnsta=0
    vsnsql=12 vsnxtr=3
    Windows 2000 Version 5.2 , CPU type 586
    Mon Nov 05 14:30:49 2007
    Starting ORACLE instance (normal)
    LICENSE_MAX_SESSION = 0
    LICENSE_SESSIONS_WARNING = 0
    SCN scheme 2
    Using log_archive_dest parameter default value
    LICENSE_MAX_USERS = 0
    SYS auditing is disabled
    Starting up ORACLE RDBMS Version: 9.2.0.1.0.
    System parameters with non-default values:
      processes                = 150
      timed_statistics         = TRUE
      shared_pool_size         = 33554432
      large_pool_size          = 25165824
      java_pool_size           = 25165824
      control_files            = c:\oracle\oradata\koukou\CONTROL01.CTL, c:\oracle\oradata\koukou\CONTROL02.CTL, c:\oracle\oradata\koukou\CONTROL03.CTL
      db_block_size            = 8192
      db_cache_size            = 100663296
      compatible               = 9.2.0.0.0
      db_file_multiblock_read_count= 16
      fast_start_mttr_target   = 300
      undo_management          = AUTO
      undo_tablespace          = UNDOTBS1
      undo_retention           = 10800
      remote_login_passwordfile= EXCLUSIVE
      db_domain                = 
      instance_name            = koukou
      dispatchers              = (PROTOCOL=TCP) (SERVICE=koukouXDB)
      job_queue_processes      = 10
      hash_join_enabled        = TRUE
      background_dump_dest     = c:\oracle\admin\koukou\bdump
      user_dump_dest           = c:\oracle\admin\koukou\udump
      core_dump_dest           = c:\oracle\admin\koukou\cdump
      sort_area_size           = 524288
      db_name                  = koukou
      open_cursors             = 300
      star_transformation_enabled= FALSE
      query_rewrite_enabled    = FALSE
      pga_aggregate_target     = 45088768
      aq_tm_processes          = 1
    PMON started with pid=2
    DBW0 started with pid=3
    LGWR started with pid=4
    CJQ0 started with pid=8
    QMN0 started with pid=9
    Mon Nov 05 14:31:00 2007
    starting up 1 shared server(s) ...
    SMON started with pid=6
    starting up 1 dispatcher(s) for network address '(ADDRESS=(PARTIAL=YES)(PROTOCOL=TCP))'...
    RECO started with pid=7
    CKPT started with pid=5
    Mon Nov 05 14:31:04 2007
    alter database mount exclusive 
    Mon Nov 05 14:31:11 2007
    Successful mount of redo thread 1, with mount id 2073378153.
    Mon Nov 05 14:31:11 2007
    Database mounted in Exclusive Mode.
    Completed: alter database mount exclusive
    Mon Nov 05 14:31:12 2007
    alter database open
    Mon Nov 05 14:31:15 2007
    Beginning crash recovery of 1 threads
    Mon Nov 05 14:31:15 2007
    Started first pass scan
    Mon Nov 05 14:31:16 2007
    Completed first pass scan
     4786 redo blocks read, 175 data blocks need recovery
    Mon Nov 05 14:31:16 2007
    Started recovery at
     Thread 1: logseq 168, block 160650, scn 0.0
    Recovery of Online Redo Log: Thread 1 Group 2 Seq 168 Reading mem 0
      Mem# 0 errs 0: C:\ORACLE\ORADATA\KOUKOU\REDO02.LOG
    Mon Nov 05 14:31:19 2007
    Ended recovery at
     Thread 1: logseq 168, block 165436, scn 0.13488316
     175 data blocks read, 175 data blocks written, 4786 redo blocks read
    Crash recovery completed successfully
    Mon Nov 05 14:31:20 2007
    Thread 1 advanced to log sequence 169
    Thread 1 opened at log sequence 169
      Current log# 3 seq# 169 mem# 0: C:\ORACLE\ORADATA\KOUKOU\REDO03.LOG
    Successful open of redo thread 1.
    Mon Nov 05 14:31:21 2007
    SMON: enabling cache recovery
    Mon Nov 05 14:31:23 2007
    Undo Segment 1 Onlined
    Undo Segment 2 Onlined
    Undo Segment 3 Onlined
    Undo Segment 4 Onlined
    Undo Segment 5 Onlined
    Undo Segment 6 Onlined
    Undo Segment 7 Onlined
    Undo Segment 8 Onlined
    Undo Segment 9 Onlined
    Undo Segment 10 Onlined
    Successfully onlined Undo Tablespace 1.
    Mon Nov 05 14:31:23 2007
    SMON: enabling tx recovery
    Mon Nov 05 14:31:23 2007
    Database Characterset is WE8MSWIN1252
    replication_dependency_tracking turned off (no async multimaster replication found)
    Completed: alter database open
    ps: date de soutenance le 10 nov , ca me laisse que 5 jr pr finir tte les interfaces.

  14. #14
    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
    ce serait pas mal de nous donner la requête qui génére le problème

    T'as pas de compte Metalink ?

  15. #15
    Membre habitué Avatar de scofield
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Octobre 2006
    Messages
    179
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Octobre 2006
    Messages : 179
    Points : 181
    Points
    181
    Par défaut
    Citation Envoyé par McM Voir le message
    Soit tu fais une fonction, soit
    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
    SELECT v.num_compm, v.n_chass, v.num_prest,v.prix_maind, t.des_prest prestation, 
        h.des_huil huile, hp.qt_hp, 
    	(SELECT MIN(PRIX_HL) KEEP (DENSE_RANK FIRST ORDER BY pxh.date DESC) 
    	FROM PRIX_HUILE pxh
    	WHERE pxh.huile = h.des_huil
    	AND pxh.date_p <= c.date_compm) * hp.qt_hp AS prix_huile,
        p.des_piec piece, pp.qt_pm,p.prix_p*pp.qt_pm prix_p
     
    FROM     PREST_VEH v, COMD_PM c, PRESTATION t,
        HUILE_PREST hp,    HUILE h,
        PIECE_PREST pp, PIECE p
     
    WHERE c.num_compm         = v.num_compm
    AND   v.num_prest         = t.num_prest
     
    AND   pp.n_chass     (+)    = v.n_chass
    AND   pp.num_compm     (+)    = v.num_compm
    AND   pp.num_prest     (+)    = v.num_prest
     
    AND   p.ref_piec    (+)    = pp.num_piece
     
    AND   hp.n_chass     (+)    = v.n_chass
    AND   hp.num_compm     (+)    = v.num_compm
    AND   hp.num_prest     (+)    = v.num_prest
     
    AND   h.code_huil    (+)    = hp.num_hl
    PAUVRE DE MOI , non j'en ai pas (de compte meta)

  16. #16
    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
    t'aurait pas des traces dans le répertoire udump ? Tu nous as mis tout le alert.log ? Tu utilises bien SQL*Plus ?

  17. #17
    Membre habitué Avatar de scofield
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Octobre 2006
    Messages
    179
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Octobre 2006
    Messages : 179
    Points : 181
    Points
    181
    Par défaut
    j'ai mit les traces du 5 novembre puisque ce n'est qu'aujourd'huis et apres l'execution de cette requete que j'ai cette eu erreur.
    sinon,je vai metre en piece jointe ok !
    j'utilse sqlplus et TOAD For oracle 9.
    ps: ya queqlque chose dans dense_rank (... qui declenche l'erreur

  18. #18
    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
    comment tu sais ça ?

  19. #19
    Membre habitué Avatar de scofield
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Octobre 2006
    Messages
    179
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Octobre 2006
    Messages : 179
    Points : 181
    Points
    181
    Par défaut
    si j'execute par bloque et de facon incremental tout se passe bien jusqua ce que je rajoute la ligne select(min(prix_hl)...AS prix_huile
    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
    SELECT v.num_compm, v.n_chass, v.num_prest,v.prix_maind, t.des_prest prestation, 
        h.des_huil huile, hp.qt_hp,----**** 
    	(SELECT MIN(PRIX_HL) KEEP (DENSE_RANK FIRST ORDER BY pxh.date DESC) 
    	FROM PRIX_HUILE pxh
    	WHERE pxh.huile = h.des_huil
    	AND pxh.date_p <= c.date_compm) * hp.qt_hp AS prix_huile ---***ICI,
        p.des_piec piece, pp.qt_pm,p.prix_p*pp.qt_pm prix_p
     
    FROM     PREST_VEH v, COMD_PM c, PRESTATION t,
        HUILE_PREST hp,    HUILE h,
        PIECE_PREST pp, PIECE p
     
    WHERE c.num_compm         = v.num_compm
    AND   v.num_prest         = t.num_prest
     
    AND   pp.n_chass     (+)    = v.n_chass
    AND   pp.num_compm     (+)    = v.num_compm
    AND   pp.num_prest     (+)    = v.num_prest
     
    AND   p.ref_piec    (+)    = pp.num_piece
     
    AND   hp.n_chass     (+)    = v.n_chass
    AND   hp.num_compm     (+)    = v.num_compm
    AND   hp.num_prest     (+)    = v.num_prest
     
    AND   h.code_huil    (+)    = hp.num_hl

  20. #20
    McM
    McM est déconnecté
    Expert éminent

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Points : 7 740
    Points
    7 740
    Billets dans le blog
    4
    Par défaut
    J'ai pas trop le temps en ce moment pour tester, mais pour te débloquer, tu crées une fonction qui fait la recherche que tu veux :
    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
    create function f (p_huile in number, p_date in date) return number
    is 
     v_px NUMBER;
    begin
     IF p_huile is null then return NULL; END IF;
     for r in (select prix_hl 
    	from PRIX_HUILE
    	WHERE huile = p_huile
    	AND date_p <= p_date
    	ORDER BY date_p desc)
     LOOP
      v_px := r.prix_hl;
      EXIT;
     END LOOP;
    RETURN v_px;
    et tu appelles cette fonction à la place du (select min keep dense...)
    More Code : More Bugs. Less Code : Less Bugs
    Mon Blog PL/Sql : Fichier Zip / Image BMP / Lire sqliteDB / QRCode et Images PNG ou BMP

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

Discussions similaires

  1. Réponses: 24
    Dernier message: 24/07/2007, 17h48
  2. [MySQL] avis sur des clés secondaires croisées
    Par Giantrick dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 17/05/2007, 09h15
  3. faire une jointure sur des clés différentes
    Par phpaide dans le forum Requêtes
    Réponses: 3
    Dernier message: 13/09/2006, 10h16
  4. [Oracle 9.2.0.7] Comment updater sur des clés de partition ?
    Par le_nullos_des_nullos dans le forum Oracle
    Réponses: 3
    Dernier message: 05/02/2006, 00h26
  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