Précédent   Forum des professionnels en informatique > Bases de données > DB2
DB2 Forum d'entraide technique sur la base de données DB2. Voir aussi -> Rubrique DB2
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 13/04/2006, 03h23   #1
Invité de passage
 
Inscription : février 2006
Messages : 7
Détails du profil
Informations forums :
Inscription : février 2006
Messages : 7
Points : 0
Points : 0
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
Noah est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/04/2006, 07h13   #2
Membre expérimenté
 
Inscription : mai 2005
Messages : 414
Détails du profil
Informations forums :
Inscription : mai 2005
Messages : 414
Points : 589
Points : 589
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 :
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?
gregory.broissard est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/04/2006, 03h59   #3
Invité de passage
 
Inscription : février 2006
Messages : 7
Détails du profil
Informations forums :
Inscription : février 2006
Messages : 7
Points : 0
Points : 0
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 ??
Noah est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/04/2006, 07h21   #4
Membre expérimenté
 
Inscription : mai 2005
Messages : 414
Détails du profil
Informations forums :
Inscription : mai 2005
Messages : 414
Points : 589
Points : 589
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
gregory.broissard est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/04/2006, 11h20   #5
jab
Rédacteur
 
Avatar de jab
 
Homme Jean-Alain Baeyens
SharePoint developpeur
Inscription : février 2004
Messages : 1 172
Détails du profil
Informations personnelles :
Nom : Homme Jean-Alain Baeyens
Âge : 48
Localisation : Belgique

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

Informations forums :
Inscription : février 2004
Messages : 1 172
Points : 3 131
Points : 3 131
Envoyer un message via ICQ à jab Envoyer un message via MSN à jab Envoyer un message via Skype™ à jab
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.
jab est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/04/2006, 16h11   #6
Invité de passage
 
Inscription : février 2006
Messages : 7
Détails du profil
Informations forums :
Inscription : février 2006
Messages : 7
Points : 0
Points : 0
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
Noah est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/04/2006, 19h02   #7
jab
Rédacteur
 
Avatar de jab
 
Homme Jean-Alain Baeyens
SharePoint developpeur
Inscription : février 2004
Messages : 1 172
Détails du profil
Informations personnelles :
Nom : Homme Jean-Alain Baeyens
Âge : 48
Localisation : Belgique

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

Informations forums :
Inscription : février 2004
Messages : 1 172
Points : 3 131
Points : 3 131
Envoyer un message via ICQ à jab Envoyer un message via MSN à jab Envoyer un message via Skype™ à jab
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


Citation:
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 referenceThis topic can be found in: CLI Guide and Reference, Volume 1.
jab est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/04/2006, 15h46   #8
Nouveau Membre du Club
 
Inscription : avril 2005
Messages : 93
Détails du profil
Informations forums :
Inscription : avril 2005
Messages : 93
Points : 33
Points : 33
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
HurtMarley est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/05/2006, 16h07   #9
Invité régulier
 
Inscription : mai 2006
Messages : 7
Détails du profil
Informations forums :
Inscription : mai 2006
Messages : 7
Points : 8
Points : 8
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...
YLN44 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 19h18.


 
 
 
 
Partenaires

Hébergement Web