Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2837 connectés 

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  Optimisation de requete PL/SQL

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Optimisation de requete PL/SQL

n°1245030
lapartdomb​re
Posté le 14-11-2005 à 10:51:47  profilanswer
 

Je cherche à faire une requete du type mais je ne vois pas trop comment m'y prendre
 

Code :
  1. DECLARE
  2.    valeurcount INTEGER;
  3.  
  4. BEGIN
  5.   -- copie des données de la table tmp_chantier  vers la table cd
  6.    FOR r IN (
  7.      select ctc.id_ctc,
  8.     c.ct_code,
  9.     c.mo_code,
  10.             c.ct_libelle,
  11.             c.ct_type_local
  12.      from tmp_chantier c, ctc, chantier_directeur cd
  13.      where c.ct_type_local = 'D'
  14.        --and c.et_code = ctc.code_ctc
  15.        --and c.ct_code = cd.code_cd
  16.    )
  17.    LOOP
  18.  
  19.      select count (*) into valeurcount sur les données de la requete si dessus  where
  20.          c.et_code = ctc.code_ctc (1)
  21.      and c.ct_code = cd.code_cd (2);
  22.    
  23.  
  24.      IF valeurcount == 0 THEN
  25.         nouveau test sur les valeur repectant les conditions (1) et (2) avant insert
  26.      ELSE
  27.       insert into ... pour les valeurs ne respectant pas les conditions (1) et (2)
  28.      END IF;
  29.    
  30.    
  31.    
  32. END LOOP;
  33. COMMIT;
  34.      
  35. END;
  36. /

mood
Publicité
Posté le 14-11-2005 à 10:51:47  profilanswer
 

n°1245140
Beegee
Posté le 14-11-2005 à 13:59:41  profilanswer
 

Quelle est la question ?

n°1245191
lapartdomb​re
Posté le 14-11-2005 à 14:30:32  profilanswer
 

je cherche comment faire pour optimiser mon script..éviter de faire de trop de requete et passer sans if

n°1245200
lapartdomb​re
Posté le 14-11-2005 à 14:34:40  profilanswer
 

Beegee a écrit :

Quelle est la question ?


 
En fait j'ai réussi à avancer mais il me reste un problème  
 

Code :
  1. FOR r IN (
  2.      select c.ct_code,
  3.     c.mo_code,
  4.             c.ct_libelle,
  5.             c.ct_type_local
  6.      from tmp_chantier c
  7.      where c.ct_type_local = 'D' -- regle IMP-N1
  8.        and (   
  9.             ( c.et_code in (select code_ctc from ctc where c.et_code = ctc.code_ctc)
  10.               and c.ct_code in (select code_cd from chantier_directeur cd where c.ct_code = cd.code_cd)
  11.             ) -- regle IMP-N2
  12.             or 
  13.             ( c.ct_code in (select code_cd from chantier_directeur cd where c.ct_code = cd.code_cd)
  14.               and c.uo_code = -1
  15.             ) -- regle IMP-N1
  16.             or 
  17.             ( c.et_code in (select code_ctc from ctc where c.et_code = ctc.code_ctc)
  18.               and c.uo_code = -1
  19.             ) -- regle IMP-N1
  20.            )
  21.    )
  22.    LOOP
  23.  
  24.  
  25.    
  26.     insert into chantier_directeur (id_chantier_directeur,
  27.                                     id_ctc,
  28.                                     code_cd,
  29.                                     code_mod_cd,
  30.                                     libelle_cd,
  31.                                     flag_import)
  32.    values(chantier_directeur_seq.nextval,
  33.          r.id_ctc,
  34.           r.ct_code,
  35.           r.mo_code,
  36.           r.ct_libelle,
  37.           1);
  38.    END LOOP;


 
Comment faire dans mon insert pour récupérer mon id_ctc??

n°1245468
Beegee
Posté le 14-11-2005 à 18:05:45  profilanswer
 

Beurk, du PL/SQL pour qqch qui peut s'écrire en SQL directement ... ou comment ralentir un process inutilement !
 

Code :
  1. INSERT INTO chantier_directeur
  2. (id_chantier_directeur, 
  3. id_ctc, 
  4. code_cd, 
  5. code_mod_cd, 
  6. libelle_cd,
  7. flag_import)
  8. SELECT chantier_directeur_seq.nextval,
  9.        ???, -- à toi de savoir d'où vient le champ id_ctc !!!
  10.        c.ct_code,
  11.        c.mo_code,
  12.        c.ct_libelle,
  13.        c.ct_type_local 
  14. FROM tmp_chantier c
  15. WHERE c.ct_type_local = 'D' -- regle IMP-N1
  16. AND ((c.et_code in (select code_ctc from ctc where c.et_code = ctc.code_ctc)
  17.       AND c.ct_code in (select code_cd from chantier_directeur cd where c.ct_code = cd.code_cd)) -- regle IMP-N2
  18.      OR (c.ct_code in (select code_cd from chantier_directeur cd where c.ct_code = cd.code_cd)
  19.          AND c.uo_code = -1) -- regle IMP-N1
  20.      OR (c.et_code in (select code_ctc from ctc where c.et_code = ctc.code_ctc)
  21.          AND c.uo_code = -1) -- regle IMP-N1
  22. );


Message édité par Beegee le 14-11-2005 à 18:06:53
n°1246529
lapartdomb​re
Posté le 16-11-2005 à 09:13:58  profilanswer
 

EN fait je suis passé par du PL SQL car j'ai d'autre controles à faire avant mon insert


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  Optimisation de requete PL/SQL

 

Sujets relatifs
[SQL Server] Comment voir les dernières requêtes ?Système d'utilisateurs - XML ou SQL ?
Requete sql lors d'une impression[bash] recuperer le resultat d'une commande SQL dans une variable bash
simple requete insert... ????utiliser une vue (SQL)
Accent avec SQL ServerRequete VB (numero auto)
Desinstall SQL 2005 CTP SeptembrePL/SQL Utilisation de cursor
Plus de sujets relatifs à : Optimisation de requete PL/SQL


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR