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

Développement SQL Server Discussion :

Requête Oracle exécutée dans SQL Server renvoie des résultats différents


Sujet :

Développement SQL Server

  1. #1
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2018
    Messages
    150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2018
    Messages : 150
    Par défaut Requête Oracle exécutée dans SQL Server renvoie des résultats différents
    Bonjour
    voici une requête exécutée dans Oracle SQL Developer et qui renvoi un jeu de résultats :

    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 ven_cde,ven_date_bl,ven_bl,ven_date_liv,cli_nom,art_code,art_lib1,VEN_CODE_EMB,sum(tra_pds_net_liv) POIDS_LIVRE,
    sum(tra_colis_liv) COLIS_LIVRE,VEN_COMMENT,
    VEN_COM_BL,VEN_COM_BL2,VEN_COM_PREPA,VEN_COM_PREPA2,VEN_REF_CDE,tra_sscc,tra_numpal
     
    from gcvente_det
    inner join gcarticle on ven_art_code=art_code
    inner join gcvente_trans on gcvente_det.ven_lot_seq=gcvente_trans.tra_lot_seq
    inner join gcvente_ent on gcvente_det.ven_numseq = gcvente_ent.ven_numseq
    inner join gcclient on ven_client = cli_code
    left join gcvente_pal on gcvente_trans.tra_seq = gcvente_pal.tra_seq
    where tra_numpal is null
    and ven_date_bl >= '02/11/2020' and ven_date_bl <= '06/11/2020'
    and cli_nom = 'SERVIDIS'
    and art_code like 'A3%'
    and tra_pds_net_liv > 0
    group by ven_cde,ven_date_bl,ven_bl,ven_date_liv,cli_nom,art_code,art_lib1,VEN_CODE_EMB,VEN_COMMENT,VEN_COM_BL,VEN_COM_BL2,VEN_COM_PREPA,VEN_COM_PREPA2,VEN_REF_CDE,tra_sscc,tra_numpal
    order by ven_date_bl;
    Je souhaite faire la même requète depuis SQL Server avec un serveur Lié, mais cette dernière ne renvoi aucune 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 ven_cde,ven_date_bl,ven_bl,ven_date_liv,cli_nom,art_code,art_lib1,VEN_CODE_EMB,sum(tra_pds_net_liv) POIDS_LIVRE,
    sum(tra_colis_liv) COLIS_LIVRE,VEN_COMMENT,
    VEN_COM_BL,VEN_COM_BL2,VEN_COM_PREPA,VEN_COM_PREPA2,VEN_REF_CDE,tra_sscc,tra_numpal
     
    from ERP_CRETS..AG1.GCVENTE_DET
    inner join ERP_CRETS..AG1.GCARTICLE on ven_art_code=art_code
    inner join ERP_CRETS..AG1.GCVENTE_TRANS on gcvente_det.ven_lot_seq=gcvente_trans.tra_lot_seq
    inner join ERP_CRETS..AG1.GCVENTE_ENT on gcvente_det.ven_numseq = gcvente_ent.ven_numseq
    inner join ERP_CRETS..AG1.GCCLIENT on ven_client = cli_code
    left join ERP_CRETS..AG1.GCVENTE_PAL on gcvente_trans.tra_seq = gcvente_pal.tra_seq
    where tra_numpal is null
    and ven_date_bl >= '02/11/2020' and ven_date_bl <= '06/11/2020'
    and cli_nom = 'SERVIDIS'
    and art_code like 'A3%'
    and tra_pds_net_liv > 0
    group by ven_cde,ven_date_bl,ven_bl,ven_date_liv,cli_nom,art_code,art_lib1,VEN_CODE_EMB,VEN_COMMENT,VEN_COM_BL,
    VEN_COM_BL2,VEN_COM_PREPA,VEN_COM_PREPA2,VEN_REF_CDE,tra_sscc,tra_numpal
    order by ven_date_bl;
    Voici le message que j'obtient :

    Msg*7346, Niveau*16, État*2, Ligne*1
    Impossible d'obtenir les données de la ligne à partir du fournisseur OLE DB "OraOLEDB.Oracle" du serveur lié "ERP_CRETS".
    Le fournisseur OLE DB "OraOLEDB.Oracle" du serveur lié "ERP_CRETS" a retourné le message "ORA-01403: aucune donnée trouvée".

  2. #2
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    2 953
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 2 953
    Par défaut
    Il faut faire une conversion explicite de la chaîne en date, sinon la conversion s'appuie sur des paramètres de session et n'est pas consistante d'une exécution à une autre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ven_date_bl >= to_date('02/11/2020','dd/mm/yyyy') and ven_date_bl <= to_date('06/11/2020','dd/mm/yyyy')

  3. #3
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2018
    Messages
    150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2018
    Messages : 150
    Par défaut
    Bonjour et merci pour cette réponse mais dans SQL server "to_date" n'est pas une fonction reconnue

  4. #4
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    2 953
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 2 953
    Par défaut
    Oui mais c'est oracle qui doit exécuter la requête, je ne pense pas que sqlserver la valide en amont (en tout cas je n'en vois pas l'utilité).
    Quel est le message d'erreur ?

    Sinon vous pouvez essayer de voir quels sont les paramètres de session NLS (nls_session_parameters) de la connexion du serveur lié et essayer de les configurer à l'identique de ceux de votre connexion sqldeveloper

  5. #5
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Par défaut
    bonjour,

    Non, telle qu'écrite, c'est bien SQL Server qui interprète dans un premier temps la requête, et émet ensuite une (des) requête(s) à destination d'Oracle pour récupérer les données nécessaires (en appliquant le plus de filtres possible en amont)...
    Mas c'est donc bien SQL qui va interpréter les dates.

    Pour faire exécuter la requête directement par oracle, il faudrait passer par un OPENQUERY (qui soit dit en passant pourrait être plus performant).

    Le plus simple, c'est encore d'utiliser le format ISO pour les dates :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    and ven_date_bl >= '20201102' and ven_date_bl <= '20201106'

Discussions similaires

  1. [PostgreSQL] requête SQL qui renvoie deux résultats différents dans PostgreSQL et dans php
    Par Leehan dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 20/06/2019, 15h20
  2. [AC-2007] Outil import Requêtes et modules dans SQL server
    Par Trady dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 05/12/2012, 10h50
  3. Réponses: 3
    Dernier message: 05/08/2009, 17h03
  4. Réponses: 13
    Dernier message: 29/01/2008, 15h28
  5. Importer des données dans sql server avec DELPHI ???
    Par moutanakid dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 11/08/2004, 17h22

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