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

DB2 Discussion :

[SQL]Quelle syntaxe pour une double condition


Sujet :

DB2

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre du Club
    Inscrit en
    Février 2006
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 7
    Par défaut [SQL]Quelle syntaxe pour une double condition
    Salut à tous !!

    Voila j'effectue une requete sur une base db2 à partir de php.
    Ma requete en question doit m'afficher la liste des factures et avoirs à partir d'un numero de client.
    Après mes 2jointures J'ai donc 3conditions
    • where *****=******
    • and ****=****
    • and num_cli=******
    • and cod_fact='A' (avoir)
    • or cod_fact='F' (facture)


    Mais ceci ne me donne pas de code d'erreur ni de resultat (ma page se charge en continue et ne s'arrete pas)

    Est ce la bonne syntaxe pour pouvoir avoir mes 2types de factures en sortie.

    Merci de m'eclairer car la je n'ai vraiment plus d'idée

  2. #2
    Membre émérite

    Profil pro
    Inscrit en
    Mai 2005
    Messages
    414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 414
    Par défaut
    déjà tu peux enlever ce "or" particulièrement laid pour DB2 et le modifier en un prédicat sur lequel il pourra utiliser des index

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    and cod_fact in ('A', 'F')
    Et si tu passes ta requete hors PHP, c'est à dire directement sur la base, ca fait quoi?

    Tu as beaucoup de volumétrie dans ces tables?

  3. #3
    Membre du Club
    Inscrit en
    Février 2006
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 7
    Par défaut
    Merci gregory !!

    C cool ca fonctionne !
    Pour répondre à ta question sur le volume de mes tables, pour certaines elles sont assez chargées à telle point que pour certaines requetes j'ai un warning sur le temps d'execution m'indiquant qu'elle a excédée le temps max de 30secondes.

    Ou puis je et comment augmenter ce temps d'execution : !!!!
    Ou puis je trouver une bonne doc sur la syntaxe sql propre à db2 ??

  4. #4
    Membre émérite

    Profil pro
    Inscrit en
    Mai 2005
    Messages
    414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 414
    Par défaut
    Pour augmenter ce temps d'exécution????
    Remettre le 'or' et supprimer les index sur les colonnes appelées dans tes prédicats!!

    Par contre, si c'est diminuer, c'est :
    1/ Faire un explain sur la requete
    2/ Analyser cet explain et trouver les points faibles
    3/ Traiter ces points faibles (Ajout d'index,partitionnement, etc...)

    La meilleure doc sur DB2, tu la trouveras dans les Redbooks
    http://www.redbooks.ibm.com/

    Sinon, tu as la doc en ligne d'IBM
    http://publib.boulder.ibm.com/infocenter/db2luw/v8//index.jsp

  5. #5
    jab
    jab est déconnecté
    Rédacteur
    Avatar de jab
    Homme Profil pro
    SharePoint developpeur
    Inscrit en
    Février 2004
    Messages
    1 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : Belgique

    Informations professionnelles :
    Activité : SharePoint developpeur
    Secteur : Service public

    Informations forums :
    Inscription : Février 2004
    Messages : 1 173
    Par défaut
    Citation Envoyé par gregory.broissard
    Pour augmenter ce temps d'exécution????
    Remettre le 'or' et supprimer les index sur les colonnes appelées dans tes prédicats!!
    Je pense qu'il parle du temp maximum autorisé par la db pour chaque requête.

  6. #6
    Membre du Club
    Inscrit en
    Février 2006
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 7
    Par défaut
    Salut !!

    N'ayant pas accès au paramétrage de la base, aurait il moyen d'augmenter ce temps d'exécution directement dans la requete (paramétrage odbc, php,...) ??

    Désolé si j'ai l'air de me répéter mais je debute sur db2

  7. #7
    jab
    jab est déconnecté
    Rédacteur
    Avatar de jab
    Homme Profil pro
    SharePoint developpeur
    Inscrit en
    Février 2004
    Messages
    1 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : Belgique

    Informations professionnelles :
    Activité : SharePoint developpeur
    Secteur : Service public

    Informations forums :
    Inscription : Février 2004
    Messages : 1 173
    Par défaut
    Je ne suis pas sur que c'est ce que tu cherche mais voici ce que j'ai trouvé dans l'aide IBM:





    QueryTimeoutInterval CLI/ODBC configuration keyword


    Keyword Description: Delay (in seconds) between checks for a query timeout. db2cli.ini Keyword Syntax: QueryTimeoutInterval = 0 | 5 | positive integer Default Setting: 5 seconds Usage Notes: An application can use the SQLSetStmtAttr() function to set the SQL_ATTR_QUERY_TIMEOUT statement attribute. This attribute indicates the number of seconds to wait for an SQL statement to complete executing before attempting to cancel the execution and returning to the application.
    The QueryTimeoutInterval configuration keyword is used to indicate how long the CLI driver should wait between checks to see if the query has completed.
    For instance, suppose SQL_ATTR_QUERY_TIMEOUT is set to 25 seconds (timeout after waiting for 25 seconds), and QueryTimeoutInterval is set to 10 seconds (check the query every 10 seconds). The query will not time out until 30 seconds (the first check AFTER the 25 second limit).
    Note:
    DB2 CLI implements query timeout by starting a thread that periodically queries the status of each executing query. The QueryTimeoutInterval value specifies how long the query timeout thread waits between checks for expired queries. Because this is an asynchronous operation to the queries being executed, it is possible that a given query may not be timed out until SQL_ATTR_QUERY_TIMEOUT + QueryTimeoutInterval seconds. In the example above, the best-case timeout would be at 26 seconds, and the worst-case timeout would be at 35 seconds.
    There may be cases where the SQL_ATTR_QUERY_TIMEOUT is set to a value which is too low, and the query should NOT be timed-out. If the application cannot be modified (that is, a third party ODBC application), then the QueryTimeoutInterval can be set to 0, and the CLI driver will ignore the SQL_ATTR_QUERY_TIMEOUT setting, and therefore wait for SQL statements to complete execution before returning to the application.
    Note:
    7 7 If QueryTimeoutInterval is set to 0, any attempt by the application to set 7 SQL_ATTR_QUERY_TIMEOUT will result in SQLSTATE 01S02 (Option Value Changed).
    (This option is contained in the Common section of the initialization file and therefore applies to all connections to DB2.)
    Alternatively, QueryTimeoutInterval can be set to a value that is larger than the SQL_ATTR_QUERY_TIMEOUT setting, thus preventing timeouts from occurring at the specified interval. For example, if the application sets a 15 second SQL_ATTR_QUERY_TIMEOUT value, but the server requires at least 30 seconds to execute the query, the QueryTimeoutInterval can be set to a value of 30 seconds or so to prevent this query from timing out after 15 seconds.
    Related concepts
    db2cli.ini initialization file
    Related reference
    This topic can be found in: CLI Guide and Reference, Volume 1.

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    96
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 96
    Par défaut
    pour changer la durée max d'execution de ton script php tu peux faire
    set('max_execution_time',99999999999) mais il serait bien plus propre d'optimiser ta requete et surtout de diminuer le plus possible le volume de données retournée parce que les lien odbc entre php et DB2 c'est tout pourrit

  9. #9
    Membre à l'essai
    Inscrit en
    Mai 2006
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 7
    Par défaut
    Je subodore un problème de logique :

    • where *****=******
    • and ****=****
    • and num_cli=******
    • and ( cod_fact='A'
    • or cod_fact='F' )
    avec des parenthèses !
    Sinon, on va sortir TOUTES les factures du système, ce qui peut prendre du temps et explique le time-out.
    La correction apportée avec le IN est plus classe, mais c'est l'occasion de souligner l'importance des parenthèses...

Discussions similaires

  1. Réponses: 6
    Dernier message: 01/03/2012, 18h25
  2. [SharePoint] Quelle maintenance pour une instance SQL ?
    Par Jinroh77 dans le forum Administration
    Réponses: 8
    Dernier message: 06/01/2012, 11h24
  3. [AC-2007] Problème de syntaxe pour une formule SQL en VBA
    Par franckimmo dans le forum IHM
    Réponses: 4
    Dernier message: 12/02/2010, 10h54
  4. [SQL Server] syntaxe pour ajouter une colonne à une table
    Par gloglo dans le forum Langage SQL
    Réponses: 8
    Dernier message: 10/09/2009, 11h43
  5. Réponses: 4
    Dernier message: 08/09/2009, 17h07

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