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

Sybase Discussion :

Forcer l’échec d'une requête avec condition


Sujet :

Sybase

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Février 2011
    Messages
    67
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suède

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information

    Informations forums :
    Inscription : Février 2011
    Messages : 67
    Points : 39
    Points
    39
    Par défaut Forcer l’échec d'une requête avec condition
    Bonjour,

    Pourriez vous m'aider sur ce sujet s'il vous plait ?

    En effet je souhaite mettre un select avec une condition , dans le premier cas si la condition est satisfaite j'aimerai que la requete échoue et renvoie une erreur syntaxique. Et dans l'autre cas je souhaite qu'elle soit bien executée.

    Le problème c'est qu'en lançant la requete , on fait dèjà une analyse syntaxique et la requete échoue de toute manière quel que soit le cas . Voici un exemple plus concret ( division par zéro )

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT
      CASE WHEN AAAA.XXXX not in (0)
    THEN 1/0
    ELSE 1 END
    FROM
    AAAA
    WHERE   AAAA.XXXX   =  0
    Ce petit bout de code échoue toujours et donne l'erreur suivante :

    10:13:18 : Ligne 1 : Key violation.
    [Sybase][ODBC Driver][Adaptive Server IQ]General error: Data exception - operation resulted in division by zero.
    --
    General SQL error.
    (dfe_ArithmeticExpression.cxx 402)
    Y a t-il un moyen d'avoir cette erreur que dans le cas ou la condition n'est pas vérifiée ?

    Merci d'avance

  2. #2
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 136
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 136
    Points : 38 909
    Points
    38 909
    Billets dans le blog
    9
    Par défaut
    Il faut faire en sorte que la valeur zéro ne soit pas vue, voici un moyen, il y en a plein d'autres :

    SELECT 1/DECIMAL(SUBSTR('11',1,1))-1

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Février 2011
    Messages
    67
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suède

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information

    Informations forums :
    Inscription : Février 2011
    Messages : 67
    Points : 39
    Points
    39
    Par défaut
    Bonjour,

    Merci pour la proposition.

    Alors je viens d'essayer ce que vous venez de dire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SELECT
      AA.XX,
      AA.YY,
      CASE WHEN AA.XX not in (0)
    THEN 1/(convert(decimal(28,8),SUBSTR('11',1,1))-1)
    ELSE 1 END
    FROM
    AA
    J'ai eu toujours la même erreur :

    ***
    10:09:17 : Ligne 1 : Key violation.
    [Sybase][ODBC Driver][Adaptive Server IQ]General error: Data exception - operation resulted in division by zero.
    --
    General SQL error.
    (dfe_ArithmeticExpression.cxx 402)
    ***
    Je suis sous Sybase IQ15

    Auriez vous une solution ?

    Merci d'avance

  4. #4
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 136
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 136
    Points : 38 909
    Points
    38 909
    Billets dans le blog
    9
    Par défaut
    En exécutant la requete directement (sans passer par un package) sur une base DB2, j'arrive non seulement a "cacher" la division par zéro, mais aussi à obtenir un résultat !
    et voici ce que ca donne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    SELECT DECIMAL(SUBSTR('11',1,1))-1,       
           1/DECIMAL(SUBSTR('11',1,1))-1      
    FROM SYSIBM.SYSDUMMY1 ;                   
     
    Résultat :
    1 ROWS RETRIEVED                 
                £1                £2 
                 0      0.0000000000
    Etonnant non

    Je n'ai pas de base SYBASE sous la main pour tenter la meme opération, désolé

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Février 2011
    Messages
    67
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suède

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information

    Informations forums :
    Inscription : Février 2011
    Messages : 67
    Points : 39
    Points
    39
    Par défaut
    Citation Envoyé par escartefigue Voir le message
    En exécutant la requete directement (sans passer par un package) sur une base DB2, j'arrive non seulement a "cacher" la division par zéro, mais aussi à obtenir un résultat !
    et voici ce que ca donne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    SELECT DECIMAL(SUBSTR('11',1,1))-1,       
           1/DECIMAL(SUBSTR('11',1,1))-1      
    FROM SYSIBM.SYSDUMMY1 ;                   
     
    Résultat :
    1 ROWS RETRIEVED                 
                £1                £2 
                 0      0.0000000000
    Etonnant non

    Je n'ai pas de base SYBASE sous la main pour tenter la meme opération, désolé

    Bonjour,

    C'est normal votre résultat, puisqu'il commence par diviser puis soustraire. Il faut mettre les parenthèses ...

  6. #6
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 136
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 136
    Points : 38 909
    Points
    38 909
    Billets dans le blog
    9
    Par défaut
    En effet manque une parenthèse

Discussions similaires

  1. Réponses: 5
    Dernier message: 19/02/2015, 18h23
  2. [LDAP] Impossible de faire une requête avec plus de 1 condition
    Par mower666 dans le forum Bibliothèques et frameworks
    Réponses: 0
    Dernier message: 15/02/2013, 11h24
  3. [AC-2007] Incrémenter dans une requête avec une condition
    Par neiluj26 dans le forum Requêtes et SQL.
    Réponses: 6
    Dernier message: 02/11/2012, 11h38
  4. [PDO] Générer une requête avec une condition IN
    Par comode dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 11/05/2009, 22h17
  5. recuperer une requête avec le composant TIBSQL ??
    Par vbcasimir dans le forum Bases de données
    Réponses: 11
    Dernier message: 31/05/2005, 12h05

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