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 et sql serveur


Sujet :

Oracle

  1. #1
    Membre à l'essai
    Inscrit en
    Décembre 2004
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 5
    Par défaut oracle et sql serveur
    bonjour a tous,
    j'ai un PB qui va faire rire les DBA oracle

    j'ai un prog en perl avec DBI natif pour oracle et MSSSQL

    je loade de gros fichiers vers la BDD

    après formatage je fais les requetes suivantes:

    SELECT IDdes from matable where nomdes='toto'
    si enregistrement trouvé
    UPDATE matable set nomdes='toto' where IDdes=3
    sinon
    pourMSSQL:
    INSERT INTO matable (nomdes) values ('toto')
    Select @@identity
    pour oracle
    INSERT into matable (IDdes,nomdes) select S_matable.nextval,'toto' from dual;

    resultat:
    pour 15000 lignes
    mssql le fait en 8s
    oracle en 4mn 5
    merci de votre aide

  2. #2
    Expert éminent
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Par défaut
    Qu'est ce que vous voulez faire exactement ?

    Parce que ceci sera peut-être plus adapté :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    INSERT INTO matable (IDdes,nomdes) 
    (SELECT ROWNUM AS N, 'TOTO'
         FROM DUAL CONNECT BY ROWNUM<=1000);
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT ROWNUM AS N, 'TOTO'
         FROM DUAL CONNECT BY ROWNUM<=1000
    Cette requête permet de générer la liste des 1000 premiers chiffres

  3. #3
    Membre à l'essai
    Inscrit en
    Décembre 2004
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 5
    Par défaut
    en fait je me suis mal exprimé:
    voila le code en perl

    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
     
    if($name_des ne $name_des_save){
    	  $requete="SELECT DES_I_ID from REF_DESTINATAIRE WHERE DES_C_NAME = '$name_des'";
    	  $id_des=SELECT_REQUETE($requete);
    if(!defined($id_des)){
    	if ($type_base eq "ORACLE"){
    	$requete="INSERT INTO REF_DESTINATAIRE (DES_I_ID,DES_C_NAME,DES_C_ZIPCODE,DES_C_PAYS,DES_D_CREATE)  SELECT S_REF_DESTINATAIRE.nextval,'$name_des', '$cod_pos', 
    '$cod_pay', $line_datetime from dual";
    }
    elsif ($type_base eq "SQL_SERVEUR"){
    		 				$requete="INSERT INTO REF_DESTINATAIRE (DES_C_NAME,DES_C_ZIPCODE,DES_C_PAYS,DES_D_CREATE)
    VALUES('$name_des', '$cod_pos', '$cod_pay', '$line_datetime')";
    }
    $id_des=EXEC_REQUETE_INSERT("REF_DESTINATAIRE",$requete,19,$name_des);
    				}
    				$name_des_save=$name_des;
    				$nbr_des_cnt++;
    			}
    ou EXEC_REQUETE_INSERT est une fonction d'execution de requete a laquelle je passe en paramètre la requete a executer et des var pour les messages d'erreur.

    mon pb est que ce script de chargement dure 30 fois plus de temps sous oracle que sous MSSQL.
    ceci dit ils fonctionne pour les deux types de BDD.
    merci a vous

  4. #4
    Expert éminent
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Par défaut
    D'accord mais est-ce que le traitement ligne/ligne ne pourrait pas être fait par un ordre SQL global. Effectivement, 15000 inserts sera extrémement long alors qu'un insert de 15000 lignes peut être rapide... si tu étais plus précis sur le fonctionnement de ton code on pourrait peut-être t'aider

  5. #5
    Membre à l'essai
    Inscrit en
    Décembre 2004
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 5
    Par défaut
    pour simplifier,j'ai un fichier au format:

    index|n° de lettre|destinataire|adresse destinataire
    index|n° de lettre|destinataire|adresse destinataire
    index|n° de lettre|destinataire|adresse destinataire
    index|n° de lettre|destinataire|adresse destinataire

    je dois charger dans une table les destinataires (distinct) avec leur adresse respective et un ID que la base me donne
    puis charger dans une autre table le n° de lettre et l'ID du destiantaire

    exemple

    12|24|TOTO|75000 PARIS
    13|33|TOTO|75000 PARIS
    14|45|TOTO|75000 PARIS
    15|52|TATA|31000 TOULOUSE

    et donc:
    TABLE1
    IDdest|destinataire|adresse
    1|TOTO|75000 PARIS
    2|TATA|31000 TOULOUSE

    TABLE2
    n°de lettre|IdDest
    24|1
    33|1
    45|1
    52|2

    voila
    encore merci

  6. #6
    Expert éminent
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Par défaut
    table 1 :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    INSERT INTO table1
    SELECT ROWNUM N,destinataire, adresse  
    FROM (SELECT MIN(num_index),destinataire, adresse 
                 FROM table0
               GROUP BY destinataire, adresse
               ORDER BY 1
    );
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    INSERT INTO table2
    SELECT table0.num_lettre, table1.N FROM (SELECT ROWNUM N,destinataire, adresse  
    FROM (SELECT MIN(num_index),destinataire, adresse 
                 FROM table0
               GROUP BY destinataire, adresse
               ORDER BY 1
    ) table1, table0
    WHERE table1.destinataire = table0.destinataire
    AND table1.adresse = table0.adresse
    ORDER BY 1
    ou plus implement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    INSERT INTO table2
    SELECT table0.num_lettre, table1.N FROM (SELECT ROWNUM N,destinataire, adresse  
    FROM table1, table0
    WHERE table1.destinataire = table0.destinataire
    AND table1.adresse = table0.adresse
    ORDER BY 1
    si table1 est bien renseignée en 1°

  7. #7
    Membre à l'essai
    Inscrit en
    Décembre 2004
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 5
    Par défaut
    merci beaucoup
    c'est OK

  8. #8
    Membre à l'essai
    Inscrit en
    Décembre 2004
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 5
    Par défaut
    si je peux vous rendre service sur la partie que je connais le mieux a savoir MSSQL (procedures etendues, systemes,DLL plug in...)
    n'hesite pas
    A+

  9. #9
    Expert éminent
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Par défaut
    OK merci

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

Discussions similaires

  1. Réponses: 12
    Dernier message: 20/08/2012, 10h59
  2. Problème de conversion d'une requête Oracle vers SQL serveur
    Par sono77 dans le forum Développement
    Réponses: 1
    Dernier message: 01/02/2012, 14h50
  3. Trigger ORACLE en SQL serveur
    Par PHPkoala dans le forum Développement
    Réponses: 6
    Dernier message: 03/09/2009, 16h47
  4. Communication Oracle vers Sql serveur
    Par bguihal dans le forum Autres
    Réponses: 6
    Dernier message: 06/11/2007, 14h16
  5. Installation d'oracle 9i serveur avec SQL Serveur
    Par ALLFA dans le forum Oracle
    Réponses: 2
    Dernier message: 03/07/2006, 18h32

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