<?xml version="1.0" encoding="ISO-8859-1"?>

<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/">
	<channel>
		<title>Forum du club des développeurs et IT Pro - Blogs - escartefigue</title>
		<link>https://www.developpez.net/forums/blogs/795608-escartefigue/</link>
		<description>Developpez.com, le Club des Développeurs et IT Pro</description>
		<language>fr</language>
		<lastBuildDate>Fri, 01 May 2026 20:28:46 GMT</lastBuildDate>
		<generator>vBulletin</generator>
		<ttl>15</ttl>
		<image>
			<url>https://forum.developpez.be/images/misc/rss.jpg</url>
			<title>Forum du club des développeurs et IT Pro - Blogs - escartefigue</title>
			<link>https://www.developpez.net/forums/blogs/795608-escartefigue/</link>
		</image>
		<item>
			<title>DB2 for Z/OS : créer un calendrier</title>
			<link>https://www.developpez.net/forums/blogs/795608-escartefigue/b10667/db2-for-z-os-creer-calendrier/</link>
			<pubDate>Fri, 31 Jan 2025 14:30:46 GMT</pubDate>
			<description>Créer un calendrier par...</description>
			<content:encoded><![CDATA[<blockquote class="blogcontent restore">Créer un calendrier par requête est un besoin fréquent et assez simple à mettre en œuvre.<br />
<br />
Les fonctions date et chaîne de caractères étant assez différentes d'un dialecte SQL à l'autre en fonction du SGBD-R sous-jacent, voici la variante DB2 for Z/OS, qu'on pourra assez facilement décliner pour tout autre SGBD-R.<br />
<br />
Ici, le calendrier contiendra une ligne par date avec&nbsp;:<br />
<ul><li style="">le N° du jour dans la semaine au format ISO (de 1=lundi à 7=dimanche)&nbsp;;</li><li style="">le libellé du jour, ici j'ai préféré ne pas utiliser la fonction DAYNAME, rarement implémentée sur les sites Z/OS&nbsp;;</li><li style="">le quantième&nbsp;;</li><li style="">le numéro de semaine&nbsp;;</li><li style="">la notion de jour ouvrable O/N applicable en France, hors spécificités régionales.</li></ul><br />
<br />
Pour les jours ouvrables, seuls ceux calculables sont affectés par la requête, les jours variables (Pâques, ascension...) seront à corriger manuellement post requête. <br />
Comme il s'agit ici d'un calendrier global, les particularités régionales (Alsace et Moselle, Guadeloupe, Guyane...) ne sont pas prises en compte.<br />
De la même façon, la notion de jour ouvré étant propre à chaque site, elle n'est pas gérée ici&nbsp;: le cas échéant, il faut créer un calendrier par site.<br />
<br />
La requête (on adaptera la date de début et le nombre de dates à stocker en fonction du besoin)&nbsp;:<br />
<br />
<div class="bbcode_container">
	<table width="100%" border="0" cellspacing="0" cellpadding="0"><tr>
	<td style="border: 0; padding: 0; text-align: left">Code SQL :</td>
	<td style="border: 0; padding: 0; text-align: right"><a href="#" onclick="return ano_selectionnerCode(this);">Sélectionner tout</a> -
	<a href="#" onclick="return ano_etendreCode(this);">Visualiser dans une fenêtre à part</a></td></tr></table>
	<pre class="bbcode_code" style="height:204px;"><table cellspacing="0" cellpadding="0"><tr><td valign="top" width="33"><div style="border: 1px dashed gray; padding-left: 5px; padding-right: 5px; margin-right: 5px; text-align: right; font-family: monospace">1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br />23<br />24<br />25<br />26<br />27<br />28<br />29<br />30<br />31<br />32<br />33<br />34<br />35<br />36<br />37<br />38<br />39<br />40<br />41<br />42<br />43<br />44<br />45<br />46<br />47<br />48<br />49<br />50<br />51<br />52<br />53<br />54<br />55<br />56<br />57<br />58<br />59<br />60<br />61<br />62<br />63<br />64<br />65<br />66<br />67<br />68<br />69<br />70<br />71<br />72<br />73<br /></div></td><td valign="top"><pre style="margin: 0"><span style="color: #808080;">-- creation d'un calendrier &agrave; partir d'une date de d&eacute;but DTDEB                 </span>
<span style="color: #808080;">-- et pour un nombre de jours param&eacute;tr&eacute;                                        </span>
   <span style="color: #0000ff;">with</span> T0<span class="br0">&#40;</span>DTDEB<span class="br0">&#41;</span> <span style="color: #0000ff;">as</span>                                                           
       <span class="br0">&#40;</span><span style="color: #0000ff;">select</span> <span style="color: #FF0000;">'2025-01-01'</span>                                                    
        <span style="color: #0000ff;">from</span> SYSIBM.SYSDUMMY1                                                  
       <span class="br0">&#41;</span>                                                                       
<span style="color: #808080;">-- la fonction DAYNAME est rarement impl&eacute;ment&eacute;e, d'o&ugrave; T1 &quot;en dur&quot;              </span>
      , T1<span class="br0">&#40;</span>T1JNUM, T1JNOM<span class="br0">&#41;</span> <span style="color: #0000ff;">as</span>                                                  
       <span class="br0">&#40;</span><span style="color: #0000ff;">select</span> <span style="color: #cc66cc;">1</span>, <span style="color: #FF0000;">'lundi'</span>    <span style="color: #0000ff;">from</span> SYSIBM.SYSDUMMY1   <span style="color: #0000ff;">union</span> <span style="color: #0000ff;">all</span>                 
        <span style="color: #0000ff;">select</span> <span style="color: #cc66cc;">2</span>, <span style="color: #FF0000;">'mardi'</span>    <span style="color: #0000ff;">from</span> SYSIBM.SYSDUMMY1   <span style="color: #0000ff;">union</span> <span style="color: #0000ff;">all</span>                 
        <span style="color: #0000ff;">select</span> <span style="color: #cc66cc;">3</span>, <span style="color: #FF0000;">'mercredi'</span> <span style="color: #0000ff;">from</span> SYSIBM.SYSDUMMY1   <span style="color: #0000ff;">union</span> <span style="color: #0000ff;">all</span>                 
        <span style="color: #0000ff;">select</span> <span style="color: #cc66cc;">4</span>, <span style="color: #FF0000;">'jeudi'</span>    <span style="color: #0000ff;">from</span> SYSIBM.SYSDUMMY1   <span style="color: #0000ff;">union</span> <span style="color: #0000ff;">all</span>                 
        <span style="color: #0000ff;">select</span> <span style="color: #cc66cc;">5</span>, <span style="color: #FF0000;">'vendredi'</span> <span style="color: #0000ff;">from</span> SYSIBM.SYSDUMMY1   <span style="color: #0000ff;">union</span> <span style="color: #0000ff;">all</span>                 
        <span style="color: #0000ff;">select</span> <span style="color: #cc66cc;">6</span>, <span style="color: #FF0000;">'samedi'</span>   <span style="color: #0000ff;">from</span> SYSIBM.SYSDUMMY1   <span style="color: #0000ff;">union</span> <span style="color: #0000ff;">all</span>                 
        <span style="color: #0000ff;">select</span> <span style="color: #cc66cc;">7</span>, <span style="color: #FF0000;">'dimanche'</span> <span style="color: #0000ff;">from</span> SYSIBM.SYSDUMMY1                             
       <span class="br0">&#41;</span>                                                                       
      , T2<span class="br0">&#40;</span>T2DTE, T2JNUM, T2JNOM, T2QQQ, T2SEM, T2OUV, T2SEQ<span class="br0">&#41;</span> <span style="color: #0000ff;">as</span>               
       <span class="br0">&#40;</span><span style="color: #0000ff;">select</span>  <span style="color: #0000ff;">cast</span><span class="br0">&#40;</span>DTDEB <span style="color: #0000ff;">as</span> <span style="color: #0000ff;">date</span><span class="br0">&#41;</span>                                            
             ,  dayofweek_iso<span class="br0">&#40;</span>DTDEB<span class="br0">&#41;</span>                                           
             ,  T1JNOM                                                         
             ,  days<span class="br0">&#40;</span>DTDEB<span class="br0">&#41;</span>-days<span class="br0">&#40;</span>substr<span class="br0">&#40;</span>DTDEB, 01, 05<span class="br0">&#41;</span> !! <span style="color: #FF0000;">'01-01'</span><span class="br0">&#41;</span> + <span style="color: #cc66cc;">1</span>         
             ,  week_iso<span class="br0">&#40;</span>DTDEB<span class="br0">&#41;</span>                                                
             ,  <span style="color: #0000ff;">case</span> <span style="color: #0000ff;">when</span> dayofweek_iso<span class="br0">&#40;</span>DTDEB<span class="br0">&#41;</span>  = <span style="color: #cc66cc;">7</span>       <span style="color: #0000ff;">then</span> <span style="color: #cc66cc;">0</span>               
                     <span style="color: #0000ff;">when</span> substr<span class="br0">&#40;</span>DTDEB, 06, 05<span class="br0">&#41;</span> = <span style="color: #FF0000;">'01-01'</span> <span style="color: #0000ff;">then</span> <span style="color: #cc66cc;">0</span>               
                     <span style="color: #0000ff;">when</span> substr<span class="br0">&#40;</span>DTDEB, 06, 05<span class="br0">&#41;</span> = <span style="color: #FF0000;">'05-01'</span> <span style="color: #0000ff;">then</span> <span style="color: #cc66cc;">0</span>               
                     <span style="color: #0000ff;">when</span> substr<span class="br0">&#40;</span>DTDEB, 06, 05<span class="br0">&#41;</span> = <span style="color: #FF0000;">'05-08'</span> <span style="color: #0000ff;">then</span> <span style="color: #cc66cc;">0</span>               
                     <span style="color: #0000ff;">when</span> substr<span class="br0">&#40;</span>DTDEB, 06, 05<span class="br0">&#41;</span> = <span style="color: #FF0000;">'07-14'</span> <span style="color: #0000ff;">then</span> <span style="color: #cc66cc;">0</span>               
                     <span style="color: #0000ff;">when</span> substr<span class="br0">&#40;</span>DTDEB, 06, 05<span class="br0">&#41;</span> = <span style="color: #FF0000;">'08-15'</span> <span style="color: #0000ff;">then</span> <span style="color: #cc66cc;">0</span>               
                     <span style="color: #0000ff;">when</span> substr<span class="br0">&#40;</span>DTDEB, 06, 05<span class="br0">&#41;</span> = <span style="color: #FF0000;">'11-01'</span> <span style="color: #0000ff;">then</span> <span style="color: #cc66cc;">0</span>               
                     <span style="color: #0000ff;">when</span> substr<span class="br0">&#40;</span>DTDEB, 06, 05<span class="br0">&#41;</span> = <span style="color: #FF0000;">'11-11'</span> <span style="color: #0000ff;">then</span> <span style="color: #cc66cc;">0</span>               
                     <span style="color: #0000ff;">when</span> substr<span class="br0">&#40;</span>DTDEB, 06, 05<span class="br0">&#41;</span> = <span style="color: #FF0000;">'12-25'</span> <span style="color: #0000ff;">then</span> <span style="color: #cc66cc;">0</span>               
                     <span style="color: #0000ff;">else</span> <span style="color: #cc66cc;">1</span>                                                    
                <span style="color: #0000ff;">end</span>                                                            
             ,  <span style="color: #0000ff;">cast</span><span class="br0">&#40;</span><span style="color: #cc66cc;">1</span> <span style="color: #0000ff;">as</span> <span style="color: #0000ff;">smallint</span><span class="br0">&#41;</span>                                            
        <span style="color: #0000ff;">from</span> T0                                                                
        <span style="color: #0000ff;">inner</span> <span style="color: #0000ff;">join</span> T1                                                          
           <span style="color: #0000ff;">on</span> T1JNUM=DAYOFWEEK_ISO<span class="br0">&#40;</span>DTDEB<span class="br0">&#41;</span>                                      
        <span style="color: #0000ff;">union</span> <span style="color: #0000ff;">all</span>                                                              
        <span style="color: #0000ff;">select</span>  T2DTE + <span style="color: #cc66cc;">1</span> days                                                 
             ,  DAYOFWEEK_ISO<span class="br0">&#40;</span>T2DTE + <span style="color: #cc66cc;">1</span> days<span class="br0">&#41;</span>                                  
             ,  T1JNOM                                                         
             ,  days<span class="br0">&#40;</span>T2DTE + <span style="color: #cc66cc;">1</span> days<span class="br0">&#41;</span>                                           
                - days<span class="br0">&#40;</span>substr<span class="br0">&#40;</span><span style="color: #0000ff;">char</span><span class="br0">&#40;</span>T2DTE<span class="br0">&#41;</span>, 01, 05<span class="br0">&#41;</span> !! <span style="color: #FF0000;">'01-01'</span><span class="br0">&#41;</span> + <span style="color: #cc66cc;">1</span>             
             ,  week_iso<span class="br0">&#40;</span>T2DTE + <span style="color: #cc66cc;">1</span> days<span class="br0">&#41;</span>                                       
             ,  <span style="color: #0000ff;">case</span> <span style="color: #0000ff;">when</span> dayofweek_iso<span class="br0">&#40;</span>T2DTE + <span style="color: #cc66cc;">1</span> days<span class="br0">&#41;</span>  = <span style="color: #cc66cc;">7</span>  <span style="color: #0000ff;">then</span> <span style="color: #cc66cc;">0</span>           
                     <span style="color: #0000ff;">when</span> substr<span class="br0">&#40;</span><span style="color: #0000ff;">char</span><span class="br0">&#40;</span>T2DTE+<span style="color: #cc66cc;">1</span> days<span class="br0">&#41;</span>, 06, 05<span class="br0">&#41;</span> =<span style="color: #FF0000;">'01-01'</span>          
                     <span style="color: #0000ff;">then</span> <span style="color: #cc66cc;">0</span>                                                    
                     <span style="color: #0000ff;">when</span> substr<span class="br0">&#40;</span><span style="color: #0000ff;">char</span><span class="br0">&#40;</span>T2DTE+<span style="color: #cc66cc;">1</span> days<span class="br0">&#41;</span>, 06, 05<span class="br0">&#41;</span> =<span style="color: #FF0000;">'05-01'</span>          
                     <span style="color: #0000ff;">then</span> <span style="color: #cc66cc;">0</span>                                                    
                     <span style="color: #0000ff;">when</span> substr<span class="br0">&#40;</span><span style="color: #0000ff;">char</span><span class="br0">&#40;</span>T2DTE+<span style="color: #cc66cc;">1</span> days<span class="br0">&#41;</span>, 06, 05<span class="br0">&#41;</span> =<span style="color: #FF0000;">'05-08'</span>          
                     <span style="color: #0000ff;">then</span> <span style="color: #cc66cc;">0</span>                                                    
                     <span style="color: #0000ff;">when</span> substr<span class="br0">&#40;</span><span style="color: #0000ff;">char</span><span class="br0">&#40;</span>T2DTE+<span style="color: #cc66cc;">1</span> days<span class="br0">&#41;</span>, 06, 05<span class="br0">&#41;</span> =<span style="color: #FF0000;">'07-14'</span>          
                     <span style="color: #0000ff;">then</span> <span style="color: #cc66cc;">0</span>                                                    
                     <span style="color: #0000ff;">when</span> substr<span class="br0">&#40;</span><span style="color: #0000ff;">char</span><span class="br0">&#40;</span>T2DTE+<span style="color: #cc66cc;">1</span> days<span class="br0">&#41;</span>, 06, 05<span class="br0">&#41;</span> =<span style="color: #FF0000;">'08-15'</span>          
                     <span style="color: #0000ff;">then</span> <span style="color: #cc66cc;">0</span>                                                    
                     <span style="color: #0000ff;">when</span> substr<span class="br0">&#40;</span><span style="color: #0000ff;">char</span><span class="br0">&#40;</span>T2DTE+<span style="color: #cc66cc;">1</span> days<span class="br0">&#41;</span>, 06, 05<span class="br0">&#41;</span> =<span style="color: #FF0000;">'11-01'</span>          
                     <span style="color: #0000ff;">then</span> <span style="color: #cc66cc;">0</span>                                                    
                     <span style="color: #0000ff;">when</span> substr<span class="br0">&#40;</span><span style="color: #0000ff;">char</span><span class="br0">&#40;</span>T2DTE+<span style="color: #cc66cc;">1</span> days<span class="br0">&#41;</span>, 06, 05<span class="br0">&#41;</span> =<span style="color: #FF0000;">'11-11'</span>          
                     <span style="color: #0000ff;">then</span> <span style="color: #cc66cc;">0</span>                                                    
                     <span style="color: #0000ff;">when</span> substr<span class="br0">&#40;</span><span style="color: #0000ff;">char</span><span class="br0">&#40;</span>T2DTE+<span style="color: #cc66cc;">1</span> days<span class="br0">&#41;</span>, 06, 05<span class="br0">&#41;</span> =<span style="color: #FF0000;">'12-25'</span>          
                     <span style="color: #0000ff;">then</span> <span style="color: #cc66cc;">0</span>                                                    
                     <span style="color: #0000ff;">else</span> <span style="color: #cc66cc;">1</span>                                                    
                <span style="color: #0000ff;">end</span>                                                            
             ,  T2SEQ + <span style="color: #cc66cc;">1</span>                                                      
        <span style="color: #0000ff;">from</span> T2                                                                
        <span style="color: #0000ff;">inner</span> <span style="color: #0000ff;">join</span> T1                                                          
           <span style="color: #0000ff;">on</span> T1JNUM=DAYOFWEEK_ISO<span class="br0">&#40;</span>T2DTE + <span style="color: #cc66cc;">1</span> days<span class="br0">&#41;</span>                             
        <span style="color: #0000ff;">where</span>   T2SEQ &lt; <span style="color: #cc66cc;">366</span>                                                    
       <span class="br0">&#41;</span>                                                                       
   <span style="color: #0000ff;">select</span> T2DTE, T2JNUM, T2JNOM, T2QQQ, T2SEM, T2OUV                           
   <span style="color: #0000ff;">from</span> T2                                                                     
   <span style="color: #0000ff;">order</span> <span style="color: #0000ff;">by</span> T2DTE                                                              
   ;</pre></td></tr></table></pre>
</div><br />
Résultat (extrait) :<br />
<br />
<img src="https://www.developpez.net/forums/attachments/p664062d1738333750/webmasters-developpement-web/flash-flex/flash/creation-d-formulaire-sous-flash/titre.png/" border="0" alt="Nom : Sans titre.png
Affichages : 3248
Taille : 41,6 Ko"  style="float: CONFIG" /></blockquote>

]]></content:encoded>
			<dc:creator>escartefigue</dc:creator>
			<guid isPermaLink="true">https://www.developpez.net/forums/blogs/795608-escartefigue/b10667/db2-for-z-os-creer-calendrier/</guid>
		</item>
		<item>
			<title>SQL et logique trivaluée : null vs vide</title>
			<link>https://www.developpez.net/forums/blogs/795608-escartefigue/b10585/sql-logique-trivaluee-null-vs-vide/</link>
			<pubDate>Thu, 29 Feb 2024 15:26:54 GMT</pubDate>
			<description>Il est important de...</description>
			<content:encoded><![CDATA[<blockquote class="blogcontent restore">Il est important de comprendre la différence entre une colonne marquée &quot;<i>Null</i>&quot; et une colonne dont la valeur est vide. <br />
Confondre l'un et l'autre est une source  fréquente d'erreurs.<br />
<br />
<br />
<b>NULL : </b><br />
<ul><li style=""><i>null</i> n'est pas une valeur, mais un <b>marqueur d'absence de valeur</b>&nbsp;;</li><li style=""><i>null</i> est applicable sur tout type de colonnes (caractère, numérique, date...) à l'exception bien entendu de celles ayant une contrainte &quot;<i>not null</i>&quot;&nbsp;<br />
<div style="margin-left:40px">mais<i> null</i> est obtenu en cas de jointure externe (OUTER JOIN) non satisfaite, y compris si la colonne concernée est marquée &quot;not null&quot;&nbsp;;</div></li><li style=""><i>null</i> est à prendre en compte dans les tables de décision avec les opérateurs AND, OR et NOT (voir plus bas)&nbsp;;</li><li style="">comme <i>Null</i> est une absence de valeur, on ne peut pas écrire <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block"><span style="color: #0000ff;">IF</span> MA_COLONNE = <span style="color: #0000ff;">null</span></span>, car <i>null </i>n'est égal à rien, pas même à <i>null </i>! On écrira donc <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block"><span style="color: #0000ff;">IF</span> MA_COLONNE <span style="color: #0000ff;">is</span> <span style="color: #0000ff;">null</span></span>&nbsp;;</li><li style="">pour remplacer une réponse &quot;<i>Null</i>&quot; par une valeur, on peut utiliser au choix la fonction ISNULL() ou COALESCE().</li></ul><br />
<br />
<br />
<b>VIDE :</b><br />
<ul><li style="">vide n'a de sens que pour les types chaînes de caractères (char, varchar, nchar, nvarchar, text)&nbsp;;</li><li style=""><span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block"><span style="color: #0000ff;">IF</span> MA_COLONNE = <span style="color: #FF0000;">''</span></span> est une expression valide puisque vide est une valeur.</li></ul><br />
<br />
<br />
L'exemple suivant, applicable sur tous les SGBD<font color="#FF0000"> <b>à l'exception d'Oracle qui confond allègrement &quot;<i>null</i>&quot; et vide, au mépris des normes SQL et de toute logique :aie: </b></font>, montre bien ces différences entre chaîne vide et marqueur &quot;<i>null</i>&quot; :<br />
<br />
<div class="bbcode_container">
	<table width="100%" border="0" cellspacing="0" cellpadding="0"><tr>
	<td style="border: 0; padding: 0; text-align: left">Code SQL :</td>
	<td style="border: 0; padding: 0; text-align: right"><a href="#" onclick="return ano_selectionnerCode(this);">Sélectionner tout</a> -
	<a href="#" onclick="return ano_etendreCode(this);">Visualiser dans une fenêtre à part</a></td></tr></table>
	<pre class="bbcode_code" style="height:204px;"><table cellspacing="0" cellpadding="0"><tr><td valign="top" width="33"><div style="border: 1px dashed gray; padding-left: 5px; padding-right: 5px; margin-right: 5px; text-align: right; font-family: monospace">1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br />23<br />24<br />25<br />26<br />27<br />28<br />29<br />30<br />31<br /></div></td><td valign="top"><pre style="margin: 0"><span style="color: #808080;">-- cr&eacute;ation d'une table dont toutes les colonnes sont &quot;nullables&quot; </span>
<span style="color: #808080;">-- pour d&eacute;monstration : null &lt;&gt; vide</span>
<span style="color: #0000ff;">create</span> <span style="color: #0000ff;">table</span> T1
      <span class="br0">&#40;</span>  T1INTG  <span style="color: #0000ff;">integer</span>
       , T1CHA1  <span style="color: #0000ff;">char</span><span class="br0">&#40;</span><span style="color: #cc66cc;">4</span><span class="br0">&#41;</span>
       , T1CHA2  <span style="color: #0000ff;">char</span><span class="br0">&#40;</span><span style="color: #cc66cc;">4</span><span class="br0">&#41;</span>  
       , T1DATE  <span style="color: #0000ff;">date</span>
      <span class="br0">&#41;</span>
;
<span style="color: #0000ff;">insert</span> <span style="color: #0000ff;">into</span> T1<span class="br0">&#40;</span>T1INTG, T1CHA1, T1CHA2, T1DATE<span class="br0">&#41;</span>
<span style="color: #0000ff;">values</span> <span class="br0">&#40;</span>0001, <span style="color: #FF0000;">'TOTO'</span>, <span style="color: #FF0000;">'TOTO'</span>, <span style="color: #FF0000;">'2024-02-27'</span><span class="br0">&#41;</span>
     , <span class="br0">&#40;</span>0002,  <span style="color: #0000ff;">null</span>,   <span style="color: #FF0000;">''</span>,     <span style="color: #0000ff;">null</span>       <span class="br0">&#41;</span>
     , <span class="br0">&#40;</span><span style="color: #0000ff;">null</span>, <span style="color: #FF0000;">'TITI'</span>, <span style="color: #FF0000;">'TOTO'</span>, <span style="color: #FF0000;">'2024-02-28'</span><span class="br0">&#41;</span>
;
<span style="color: #808080;">-- insertion d'une valeur vide dans des colonnes de type char : pas de probl&egrave;me</span>
<span style="color: #0000ff;">insert</span> <span style="color: #0000ff;">into</span> T1<span class="br0">&#40;</span>T1INTG, T1CHA1, T1CHA2, T1DATE<span class="br0">&#41;</span>
<span style="color: #0000ff;">values</span> <span class="br0">&#40;</span>0004, <span style="color: #FF0000;">''</span>    , <span style="color: #FF0000;">''</span>,     <span style="color: #FF0000;">'2024-02-29'</span><span class="br0">&#41;</span>
     , <span class="br0">&#40;</span>0005,  <span style="color: #0000ff;">null</span> , <span style="color: #0000ff;">null</span>,   <span style="color: #FF0000;">'2024-02-29'</span><span class="br0">&#41;</span>
;
<span style="color: #0000ff;">select</span> T1INTG
     , T1CHA1
     , T1CHA2  
     , T1DATE 
     , <span style="color: #0000ff;">case</span> <span style="color: #0000ff;">when</span> T1CHA1 = T1CHA2 <span style="color: #0000ff;">then</span> <span style="color: #FF0000;">'&eacute;gal'</span>  
            <span style="color: #0000ff;">else</span> <span style="color: #FF0000;">'diff&eacute;rent'</span>
       <span style="color: #0000ff;">end</span> <span style="color: #0000ff;">as</span> <span style="color: #FF0000;">&quot;CHA1/CHA2&quot;</span>
<span style="color: #0000ff;">from</span> T1
;
<span style="color: #808080;">-- tentative d'insertion d'une valeur vide dans une colonne d'un autre type : KO</span>
<span style="color: #0000ff;">insert</span> <span style="color: #0000ff;">into</span> T1<span class="br0">&#40;</span>T1INTG, T1CHA1, T1CHA2, T1DATE<span class="br0">&#41;</span>
<span style="color: #0000ff;">values</span> <span class="br0">&#40;</span>0005, <span style="color: #FF0000;">'XXXX'</span>, <span style="color: #FF0000;">'YYYY'</span>, <span style="color: #FF0000;">''</span><span class="br0">&#41;</span></pre></td></tr></table></pre>
</div><br />
Résultat (le message d'erreur de la tentative d'insertion d'un &quot;<i>vide</i>&quot; dans une colonne de type non char dépend du SGBD, ici c'est sous MySQL 8.0 :<br />
<img src="https://www.developpez.net/forums/attachments/p651538d1709197594/autres-langages/xml-xsl-soap/deposer-modele-xml/titre.png/" border="0" alt="Nom : Sans titre.png
Affichages : 17906
Taille : 10,1 Ko"  style="float: CONFIG" /><br />
<br />
<br />
Table de décision avec les marqueurs &quot;<i>null</i>&quot; <br />
<br />
<img src="https://www.developpez.net/forums/attachments/p662835d1734344649/autres-langages/xml-xsl-soap/deposer-modele-xml/titre.png/" border="0" alt="Nom : Sans titre.png
Affichages : 2800
Taille : 5,2 Ko"  style="float: CONFIG" /></blockquote>

]]></content:encoded>
			<dc:creator>escartefigue</dc:creator>
			<guid isPermaLink="true">https://www.developpez.net/forums/blogs/795608-escartefigue/b10585/sql-logique-trivaluee-null-vs-vide/</guid>
		</item>
		<item>
			<title><![CDATA[DB2 for Z/OS : analyser l'impact d'un DROP TABLE]]></title>
			<link>https://www.developpez.net/forums/blogs/795608-escartefigue/b10564/db2-for-z-os-analyser-l-impact-d-drop-table/</link>
			<pubDate>Thu, 28 Dec 2023 10:34:09 GMT</pubDate>
			<description>La requête ci-dessous permet...</description>
			<content:encoded><![CDATA[<blockquote class="blogcontent restore">La requête ci-dessous permet d'identifier les impact de la destruction d'une table sur les objets dépendants (table spaces, vues, triggers...)<br />
<br />
<br />
<div class="bbcode_container">
	<table width="100%" border="0" cellspacing="0" cellpadding="0"><tr>
	<td style="border: 0; padding: 0; text-align: left">Code SQL :</td>
	<td style="border: 0; padding: 0; text-align: right"><a href="#" onclick="return ano_selectionnerCode(this);">Sélectionner tout</a> -
	<a href="#" onclick="return ano_etendreCode(this);">Visualiser dans une fenêtre à part</a></td></tr></table>
	<pre class="bbcode_code" style="height:204px;"><table cellspacing="0" cellpadding="0"><tr><td valign="top" width="40"><div style="border: 1px dashed gray; padding-left: 5px; padding-right: 5px; margin-right: 5px; text-align: right; font-family: monospace">1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br />23<br />24<br />25<br />26<br />27<br />28<br />29<br />30<br />31<br />32<br />33<br />34<br />35<br />36<br />37<br />38<br />39<br />40<br />41<br />42<br />43<br />44<br />45<br />46<br />47<br />48<br />49<br />50<br />51<br />52<br />53<br />54<br />55<br />56<br />57<br />58<br />59<br />60<br />61<br />62<br />63<br />64<br />65<br />66<br />67<br />68<br />69<br />70<br />71<br />72<br />73<br />74<br />75<br />76<br />77<br />78<br />79<br />80<br />81<br />82<br />83<br />84<br />85<br />86<br />87<br />88<br />89<br />90<br />91<br />92<br />93<br />94<br />95<br />96<br />97<br />98<br />99<br />100<br />101<br />102<br />103<br />104<br />105<br />106<br />107<br />108<br />109<br />110<br />111<br />112<br />113<br />114<br />115<br />116<br />117<br />118<br />119<br />120<br /></div></td><td valign="top"><pre style="margin: 0">&nbsp;
<span style="color: #808080;">-- analyse d'impact d'un drop de table(s)                                      </span>
   <span style="color: #0000ff;">set</span> current_schema = <span style="color: #FF0000;">'SYSIBM'</span>                                               
   ;                                                                           
<span style="color: #808080;">-- schemas/tables &agrave; analyser                                                   </span>
   <span style="color: #0000ff;">with</span> CT1<span class="br0">&#40;</span>SCH1, TAB1<span class="br0">&#41;</span> <span style="color: #0000ff;">as</span>                                                     
       <span class="br0">&#40;</span><span style="color: #0000ff;">select</span> <span style="color: #FF0000;">'REC1'</span>, <span style="color: #FF0000;">'TR01'</span> <span style="color: #0000ff;">from</span> SYSIBM.SYSDUMMY1   <span style="color: #0000ff;">union</span> <span style="color: #0000ff;">all</span>                
        <span style="color: #0000ff;">select</span> <span style="color: #FF0000;">'REC2'</span>, <span style="color: #FF0000;">'TA60'</span> <span style="color: #0000ff;">from</span> SYSIBM.SYSDUMMY1                   
       <span class="br0">&#41;</span>                                                                       
<span style="color: #808080;">-- 1&deg;) impact table space                                                      </span>
<span style="color: #0000ff;">select</span> C1 <span style="color: #0000ff;">as</span> <span style="color: #FF0000;">&quot;Creator&quot;</span>                                                         
     , C2 <span style="color: #0000ff;">as</span> <span style="color: #FF0000;">&quot;Table&quot;</span>                                                           
     , C3 <span style="color: #0000ff;">as</span> <span style="color: #FF0000;">&quot;Type obj&quot;</span>                                                        
     , C4 <span style="color: #0000ff;">as</span> <span style="color: #FF0000;">&quot;Nom obj&quot;</span>                                                         
     , C5 <span style="color: #0000ff;">as</span> <span style="color: #FF0000;">&quot;Infos&quot;</span>                                                           
<span style="color: #0000ff;">from</span> <span class="br0">&#40;</span>                                                                         
      <span style="color: #0000ff;">select</span> substr<span class="br0">&#40;</span>CREATOR, 01, 08<span class="br0">&#41;</span>   <span style="color: #0000ff;">as</span> C1                                   
           , substr<span class="br0">&#40;</span>NAME, 01, 08<span class="br0">&#41;</span>      <span style="color: #0000ff;">as</span> C2                                   
           , <span style="color: #FF0000;">'Table Space'</span>             <span style="color: #0000ff;">as</span> C3                                   
           , <span style="color: #0000ff;">cast</span><span class="br0">&#40;</span>TSNAME <span style="color: #0000ff;">as</span> <span style="color: #0000ff;">char</span><span class="br0">&#40;</span><span style="color: #cc66cc;">25</span><span class="br0">&#41;</span><span class="br0">&#41;</span>  <span style="color: #0000ff;">as</span> C4                                   
           , <span style="color: #0000ff;">cast</span><span class="br0">&#40;</span>DBNAME <span style="color: #0000ff;">as</span> <span style="color: #0000ff;">char</span><span class="br0">&#40;</span><span style="color: #cc66cc;">10</span><span class="br0">&#41;</span><span class="br0">&#41;</span>  <span style="color: #0000ff;">as</span> C5                                                                                                         
           , 01                        <span style="color: #0000ff;">as</span> C6                                   
      <span style="color: #0000ff;">from</span> SYSTABLES                                                           
      <span style="color: #0000ff;">inner</span> <span style="color: #0000ff;">join</span> CT1                                                           
         <span style="color: #0000ff;">on</span> CREATOR = SCH1                                                     
        <span style="color: #0000ff;">and</span> NAME    = TAB1                                                     
      <span style="color: #0000ff;">where</span> TYPE = <span style="color: #FF0000;">'T'</span>                                                         
<span style="color: #808080;">-- 2&deg;) impact vues                                                             </span>
      <span style="color: #0000ff;">union</span> <span style="color: #0000ff;">all</span>                                                                
      <span style="color: #0000ff;">select</span> substr<span class="br0">&#40;</span>BSCHEMA, 01, 08<span class="br0">&#41;</span>   <span style="color: #0000ff;">as</span> C1                                   
           , substr<span class="br0">&#40;</span>BNAME, 01, 08<span class="br0">&#41;</span>     <span style="color: #0000ff;">as</span> C2                                   
           , <span style="color: #FF0000;">'View       '</span>             <span style="color: #0000ff;">as</span> C3                                   
           , <span style="color: #0000ff;">cast</span><span class="br0">&#40;</span>DNAME <span style="color: #0000ff;">as</span> <span style="color: #0000ff;">char</span><span class="br0">&#40;</span><span style="color: #cc66cc;">25</span><span class="br0">&#41;</span><span class="br0">&#41;</span>   <span style="color: #0000ff;">as</span> C4                                   
           , <span style="color: #0000ff;">cast</span><span class="br0">&#40;</span>DSCHEMA <span style="color: #0000ff;">as</span> <span style="color: #0000ff;">char</span><span class="br0">&#40;</span><span style="color: #cc66cc;">10</span><span class="br0">&#41;</span><span class="br0">&#41;</span> <span style="color: #0000ff;">as</span> C5                                   
           , 02                        <span style="color: #0000ff;">as</span> C6                                   
      <span style="color: #0000ff;">from</span> SYSDEPENDENCIES                                                     
      <span style="color: #0000ff;">inner</span> <span style="color: #0000ff;">join</span> CT1                                                           
         <span style="color: #0000ff;">on</span> BNAME        = TAB1                                                
        <span style="color: #0000ff;">and</span> BSCHEMA      = SCH1                                                
      <span style="color: #0000ff;">where</span> BTYPE = <span style="color: #FF0000;">'T'</span>                                                        
<span style="color: #808080;">-- 3&deg;) impact index                                                            </span>
      <span style="color: #0000ff;">union</span> <span style="color: #0000ff;">all</span>                                                                
      <span style="color: #0000ff;">select</span> substr<span class="br0">&#40;</span>TBCREATOR, 01, 08<span class="br0">&#41;</span>  <span style="color: #0000ff;">as</span> C1                                  
           , substr<span class="br0">&#40;</span>TBNAME, 01, 08<span class="br0">&#41;</span>     <span style="color: #0000ff;">as</span> C2                                  
           , <span style="color: #FF0000;">'Index      '</span>              <span style="color: #0000ff;">as</span> C3                                  
           , <span style="color: #0000ff;">cast</span><span class="br0">&#40;</span>NAME <span style="color: #0000ff;">as</span> <span style="color: #0000ff;">char</span><span class="br0">&#40;</span><span style="color: #cc66cc;">25</span><span class="br0">&#41;</span><span class="br0">&#41;</span>     <span style="color: #0000ff;">as</span> C4                                  
           , <span style="color: #0000ff;">cast</span><span class="br0">&#40;</span><span style="color: #0000ff;">case</span> <span style="color: #0000ff;">when</span> uniquerule = <span style="color: #FF0000;">'P'</span> <span style="color: #0000ff;">and</span> clustering=<span style="color: #FF0000;">'Y'</span>                
                            <span style="color: #0000ff;">then</span> <span style="color: #FF0000;">'PK-Cluster'</span>                                  
                       <span style="color: #0000ff;">when</span> uniquerule = <span style="color: #FF0000;">'P'</span> <span style="color: #0000ff;">and</span> clustering=<span style="color: #FF0000;">'N'</span>                
                            <span style="color: #0000ff;">then</span> <span style="color: #FF0000;">'PK-Non Cls'</span>                                  
                       <span style="color: #0000ff;">when</span> uniquerule&lt;&gt; <span style="color: #FF0000;">'D'</span> <span style="color: #0000ff;">and</span> clustering=<span style="color: #FF0000;">'Y'</span>                
                            <span style="color: #0000ff;">then</span> <span style="color: #FF0000;">'U -Cluster'</span>                                  
                       <span style="color: #0000ff;">when</span> uniquerule&lt;&gt; <span style="color: #FF0000;">'D'</span> <span style="color: #0000ff;">and</span> clustering=<span style="color: #FF0000;">'N'</span>                
                            <span style="color: #0000ff;">then</span> <span style="color: #FF0000;">'U -Non Cls'</span>                                  
                       <span style="color: #0000ff;">when</span> uniquerule = <span style="color: #FF0000;">'D'</span> <span style="color: #0000ff;">and</span> clustering=<span style="color: #FF0000;">'Y'</span>                
                            <span style="color: #0000ff;">then</span> <span style="color: #FF0000;">'Dup-Clust.'</span>                                  
                       <span style="color: #0000ff;">when</span> uniquerule = <span style="color: #FF0000;">'D'</span> <span style="color: #0000ff;">and</span> clustering=<span style="color: #FF0000;">'N'</span>                
                            <span style="color: #0000ff;">then</span> <span style="color: #FF0000;">'Dup-NonCls'</span>                                  
                   <span style="color: #0000ff;">end</span> <span style="color: #0000ff;">as</span> <span style="color: #0000ff;">char</span><span class="br0">&#40;</span><span style="color: #cc66cc;">10</span><span class="br0">&#41;</span><span class="br0">&#41;</span>     <span style="color: #0000ff;">as</span> C5                                  
           , 03                         <span style="color: #0000ff;">as</span> C6                                  
      <span style="color: #0000ff;">from</span> SYSINDEXES                                                          
      <span style="color: #0000ff;">inner</span> <span style="color: #0000ff;">join</span> CT1                                                           
         <span style="color: #0000ff;">on</span> TBNAME       = TAB1                                                
        <span style="color: #0000ff;">and</span> TBCREATOR    = SCH1                                                
<span style="color: #808080;">-- 4&deg;) impact alias                                                            </span>
      <span style="color: #0000ff;">union</span> <span style="color: #0000ff;">all</span>                                                                
      <span style="color: #0000ff;">select</span> substr<span class="br0">&#40;</span>SCH1, 01, 08<span class="br0">&#41;</span>       <span style="color: #0000ff;">as</span> C1                                  
           , substr<span class="br0">&#40;</span>TBNAME, 01, 08<span class="br0">&#41;</span>     <span style="color: #0000ff;">as</span> C2                                  
           , <span style="color: #FF0000;">'Alias      '</span>              <span style="color: #0000ff;">as</span> C3                                  
           , <span style="color: #0000ff;">cast</span><span class="br0">&#40;</span>NAME <span style="color: #0000ff;">as</span> <span style="color: #0000ff;">char</span><span class="br0">&#40;</span><span style="color: #cc66cc;">25</span><span class="br0">&#41;</span><span class="br0">&#41;</span>     <span style="color: #0000ff;">as</span> C4                                  
           , <span style="color: #0000ff;">cast</span><span class="br0">&#40;</span>CREATOR <span style="color: #0000ff;">as</span> <span style="color: #0000ff;">char</span><span class="br0">&#40;</span><span style="color: #cc66cc;">10</span><span class="br0">&#41;</span><span class="br0">&#41;</span>  <span style="color: #0000ff;">as</span> C5                                  
           , 04                         <span style="color: #0000ff;">as</span> C6                                  
      <span style="color: #0000ff;">from</span> SYSTABLES                                                           
      <span style="color: #0000ff;">inner</span> <span style="color: #0000ff;">join</span> CT1                                                           
         <span style="color: #0000ff;">on</span> TBNAME       = TAB1                                                
        <span style="color: #0000ff;">and</span> TBCREATOR    = SCH1                                                
      <span style="color: #0000ff;">where</span> TYPE = <span style="color: #FF0000;">'A'</span>                                                         
<span style="color: #808080;">-- 5&deg;) impact rules &quot;on delete&quot;                                                </span>
      <span style="color: #0000ff;">union</span> <span style="color: #0000ff;">all</span>                                                                
      <span style="color: #0000ff;">select</span> substr<span class="br0">&#40;</span>REFTBCREATOR, 01, 08<span class="br0">&#41;</span> <span style="color: #0000ff;">as</span> C1                                
           , substr<span class="br0">&#40;</span>REFTBNAME, 01, 08<span class="br0">&#41;</span>    <span style="color: #0000ff;">as</span> C2                                
           , <span style="color: #FF0000;">'Rule       '</span>                <span style="color: #0000ff;">as</span> C3                                
           , <span style="color: #0000ff;">cast</span><span class="br0">&#40;</span>RELNAME <span style="color: #0000ff;">as</span> <span style="color: #0000ff;">char</span><span class="br0">&#40;</span><span style="color: #cc66cc;">25</span><span class="br0">&#41;</span><span class="br0">&#41;</span>    <span style="color: #0000ff;">as</span> C4                                
           , <span style="color: #0000ff;">cast</span><span class="br0">&#40;</span>TBNAME <span style="color: #0000ff;">as</span> <span style="color: #0000ff;">char</span><span class="br0">&#40;</span><span style="color: #cc66cc;">10</span><span class="br0">&#41;</span><span class="br0">&#41;</span>     <span style="color: #0000ff;">as</span> C5                                
           , 05                           <span style="color: #0000ff;">as</span> C6                                
      <span style="color: #0000ff;">from</span> SYSRELS                                                             
      <span style="color: #0000ff;">inner</span> <span style="color: #0000ff;">join</span> CT1                                                           
         <span style="color: #0000ff;">on</span> REFTBNAME    = TAB1                                                
        <span style="color: #0000ff;">and</span> REFTBCREATOR = SCH1                                                
<span style="color: #808080;">-- 6&deg;) impact triggers                                                         </span>
      <span style="color: #0000ff;">union</span> <span style="color: #0000ff;">all</span>                                                                
      <span style="color: #0000ff;">select</span> substr<span class="br0">&#40;</span>TBOWNER, 01, 08<span class="br0">&#41;</span>       <span style="color: #0000ff;">as</span> C1                               
           , substr<span class="br0">&#40;</span>TBNAME, 01, 08<span class="br0">&#41;</span>        <span style="color: #0000ff;">as</span> C2                               
           , <span style="color: #FF0000;">'Trigger    '</span>                 <span style="color: #0000ff;">as</span> C3                               
           , <span style="color: #0000ff;">cast</span><span class="br0">&#40;</span>substr<span class="br0">&#40;</span>NAME, 01, <span style="color: #cc66cc;">25</span><span class="br0">&#41;</span> <span style="color: #0000ff;">as</span> <span style="color: #0000ff;">char</span><span class="br0">&#40;</span><span style="color: #cc66cc;">25</span><span class="br0">&#41;</span><span class="br0">&#41;</span> <span style="color: #0000ff;">as</span> C4                      
           , <span style="color: #0000ff;">cast</span><span class="br0">&#40;</span><span style="color: #0000ff;">case</span> <span style="color: #0000ff;">when</span> TRIGTIME = <span style="color: #FF0000;">'B'</span> <span style="color: #0000ff;">then</span> <span style="color: #FF0000;">'Before  '</span>                     
                       <span style="color: #0000ff;">when</span> TRIGTIME = <span style="color: #FF0000;">'A'</span> <span style="color: #0000ff;">then</span> <span style="color: #FF0000;">'After   '</span>                     
                       <span style="color: #0000ff;">else</span>                     <span style="color: #FF0000;">'Instead '</span>                     
                  <span style="color: #0000ff;">end</span>                                                          
                  !! TRIGEVENT <span style="color: #0000ff;">as</span> <span style="color: #0000ff;">char</span><span class="br0">&#40;</span><span style="color: #cc66cc;">10</span><span class="br0">&#41;</span><span class="br0">&#41;</span>         <span style="color: #0000ff;">as</span> C5                      
           , 06                            <span style="color: #0000ff;">as</span> C6                               
      <span style="color: #0000ff;">from</span> SYSTRIGGERS                                                         
      <span style="color: #0000ff;">inner</span> <span style="color: #0000ff;">join</span> CT1                                                           
         <span style="color: #0000ff;">on</span> TBNAME       = TAB1                                                
        <span style="color: #0000ff;">and</span> TBOWNER      = SCH1                                                
<span style="color: #808080;">-- 7&deg;) impact packages                                                         </span>
      <span style="color: #0000ff;">union</span> <span style="color: #0000ff;">all</span>                                                                
      <span style="color: #0000ff;">select</span> substr<span class="br0">&#40;</span>BQUALIFIER, 01, 08<span class="br0">&#41;</span>    <span style="color: #0000ff;">as</span> C1                               
           , substr<span class="br0">&#40;</span>BNAME, 01, 08<span class="br0">&#41;</span>         <span style="color: #0000ff;">as</span> C2                               
           , <span style="color: #FF0000;">'Package    '</span>                 <span style="color: #0000ff;">as</span> C3                               
           , <span style="color: #0000ff;">cast</span><span class="br0">&#40;</span>DNAME <span style="color: #0000ff;">as</span> <span style="color: #0000ff;">char</span><span class="br0">&#40;</span><span style="color: #cc66cc;">25</span><span class="br0">&#41;</span><span class="br0">&#41;</span>       <span style="color: #0000ff;">as</span> C4                               
           , <span style="color: #0000ff;">cast</span><span class="br0">&#40;</span>DCOLLID <span style="color: #0000ff;">as</span> <span style="color: #0000ff;">char</span><span class="br0">&#40;</span><span style="color: #cc66cc;">10</span><span class="br0">&#41;</span><span class="br0">&#41;</span>     <span style="color: #0000ff;">as</span> C5                               
           , 07                            <span style="color: #0000ff;">as</span> C6                               
      <span style="color: #0000ff;">from</span> SYSPACKDEP                                                          
      <span style="color: #0000ff;">inner</span> <span style="color: #0000ff;">join</span> CT1                                                           
         <span style="color: #0000ff;">on</span> BNAME        = TAB1                                                
        <span style="color: #0000ff;">and</span> BQUALIFIER   = SCH1                                                
     <span class="br0">&#41;</span>                                                                         
<span style="color: #0000ff;">order</span> <span style="color: #0000ff;">by</span> C1, C2, C6                                                            
;</pre></td></tr></table></pre>
</div><br />
<br />
Exemple de résultat :<br />
<br />
<img src="https://www.developpez.net/forums/attachments/p648443d1703759583/c-cpp/outils-c-cpp/cppbuilder/tedit/tab.png/" border="0" alt="Nom : Tab.png
Affichages : 133
Taille : 18,9 Ko"  style="float: CONFIG" /></blockquote>

]]></content:encoded>
			<dc:creator>escartefigue</dc:creator>
			<guid isPermaLink="true">https://www.developpez.net/forums/blogs/795608-escartefigue/b10564/db2-for-z-os-analyser-l-impact-d-drop-table/</guid>
		</item>
		<item>
			<title>DB2 for Z/OS : analyser les index</title>
			<link>https://www.developpez.net/forums/blogs/795608-escartefigue/b10553/db2-for-z-os-analyser-index/</link>
			<pubDate>Wed, 29 Nov 2023 12:44:55 GMT</pubDate>
			<description>Voici une requête permettant...</description>
			<content:encoded><![CDATA[<blockquote class="blogcontent restore">Voici une requête permettant d'extraire du catalogue DB2 les éléments relatifs aux index des tables, l'index primaire est restitué en premier, les index uniques ensuite, puis les index multiples.<br />
<br />
<br />
<div class="bbcode_container">
	<table width="100%" border="0" cellspacing="0" cellpadding="0"><tr>
	<td style="border: 0; padding: 0; text-align: left">Code SQL :</td>
	<td style="border: 0; padding: 0; text-align: right"><a href="#" onclick="return ano_selectionnerCode(this);">Sélectionner tout</a> -
	<a href="#" onclick="return ano_etendreCode(this);">Visualiser dans une fenêtre à part</a></td></tr></table>
	<pre class="bbcode_code" style="height:204px;"><table cellspacing="0" cellpadding="0"><tr><td valign="top" width="33"><div style="border: 1px dashed gray; padding-left: 5px; padding-right: 5px; margin-right: 5px; text-align: right; font-family: monospace">1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br />23<br />24<br />25<br />26<br />27<br />28<br />29<br />30<br />31<br />32<br />33<br />34<br />35<br />36<br />37<br />38<br />39<br />40<br />41<br />42<br />43<br />44<br />45<br /></div></td><td valign="top"><pre style="margin: 0"><span style="color: #808080;">-- Cette requete extrait les informations li&eacute;es aux index d'une table           </span>
<span style="color: #808080;">-- PUD = P (primary) soit unique et not null, U (unique), D (duplicate)         </span>
<span style="color: #808080;">-- Cls = Y (index cluster), N (non cluster)                                     </span>
<span style="color: #808080;">-- Ratio = cluster ratio si c'est un index cluster (&gt;=95%, c'est optimal)       </span>
<span style="color: #808080;">-- Kseq = ordre de la colonne dans l'index                                      </span>
<span style="color: #808080;">-- Col  = nom de la colonne                                                     </span>
<span style="color: #808080;">-- Typ  = type de la colonne                                                    </span>
<span style="color: #808080;">-- Lng  = longueur de la colonne                                                </span>
<span style="color: #808080;">-- Param&ecirc;tres &agrave; modifier en fonction du besoin :                                </span>
<span style="color: #808080;">--   IX.TBCREATOR                                                               </span>
<span style="color: #808080;">--   IX.TBNAME                                                                  </span>
   <span style="color: #0000ff;">set</span> CURRENT SCHEMA = <span style="color: #FF0000;">'SYSIBM'</span>                                                
   ;                                                                            
   <span style="color: #0000ff;">select</span> substr<span class="br0">&#40;</span>IX.TBCREATOR, 01, 04<span class="br0">&#41;</span>  <span style="color: #0000ff;">as</span> <span style="color: #FF0000;">&quot;Schm&quot;</span>                               
        , substr<span class="br0">&#40;</span>IX.TBNAME, 01, 08<span class="br0">&#41;</span>     <span style="color: #0000ff;">as</span> <span style="color: #FF0000;">&quot;Table&quot;</span>                              
        , substr<span class="br0">&#40;</span>IX.NAME  , 01, 08<span class="br0">&#41;</span>     <span style="color: #0000ff;">as</span> <span style="color: #FF0000;">&quot;Index&quot;</span>                              
        , IX.UNIQUERULE                 <span style="color: #0000ff;">as</span> <span style="color: #FF0000;">&quot;PUD&quot;</span>                                
        , IX.CLUSTERING                 <span style="color: #0000ff;">as</span> <span style="color: #FF0000;">&quot;Cls&quot;</span>                                
        , <span style="color: #0000ff;">case</span> <span style="color: #0000ff;">when</span> IX.CLUSTERING = <span style="color: #FF0000;">'Y'</span>                                         
                    <span style="color: #0000ff;">then</span> substr<span class="br0">&#40;</span>digits<span class="br0">&#40;</span>IX.CLUSTERRATIO<span class="br0">&#41;</span>, <span style="color: #cc66cc;">3</span>, <span style="color: #cc66cc;">3</span><span class="br0">&#41;</span>                  
               <span style="color: #0000ff;">else</span> <span style="color: #FF0000;">' - '</span>                                                       
          <span style="color: #0000ff;">end</span>                           <span style="color: #0000ff;">as</span> <span style="color: #FF0000;">&quot;Ratio&quot;</span>                              
        , KY.COLSEQ                     <span style="color: #0000ff;">as</span> <span style="color: #FF0000;">&quot;KSeq&quot;</span>                               
        , substr<span class="br0">&#40;</span>KY.COLNAME, 01, <span style="color: #cc66cc;">30</span><span class="br0">&#41;</span>    <span style="color: #0000ff;">as</span> <span style="color: #FF0000;">&quot;Col&quot;</span>                                
        , KY.ORDERING                   <span style="color: #0000ff;">as</span> <span style="color: #FF0000;">&quot;Ord&quot;</span>                                
        , CO.COLTYPE                    <span style="color: #0000ff;">as</span> <span style="color: #FF0000;">&quot;Typ&quot;</span>                                
        , CO.LENGTH                     <span style="color: #0000ff;">as</span> <span style="color: #FF0000;">&quot;Lng&quot;</span>                                
   <span style="color: #0000ff;">from</span> SYSINDEXES       <span style="color: #0000ff;">as</span> IX                                                  
   <span style="color: #0000ff;">left</span> <span style="color: #0000ff;">join</span> SYSKEYS     <span style="color: #0000ff;">as</span> KY                                                  
     <span style="color: #0000ff;">on</span> KY.IXCREATOR = IX.TBCREATOR                                             
    <span style="color: #0000ff;">and</span> KY.IXNAME    = IX.NAME                                                  
   <span style="color: #0000ff;">left</span> <span style="color: #0000ff;">join</span> SYSCOLUMNS  <span style="color: #0000ff;">as</span> CO                                                  
     <span style="color: #0000ff;">on</span> CO.TBCREATOR = IX.TBCREATOR                                             
    <span style="color: #0000ff;">and</span> CO.TBNAME    = IX.TBNAME                                                
    <span style="color: #0000ff;">and</span> CO.NAME      = KY.COLNAME                                               
   <span style="color: #0000ff;">where</span> IX.TBCREATOR = <span style="color: #FF0000;">'SCH1'</span>                                                  
     <span style="color: #0000ff;">and</span> IX.TBNAME    = <span style="color: #FF0000;">'TABX'</span>                                                  
   <span style="color: #0000ff;">order</span> <span style="color: #0000ff;">by</span> <span style="color: #FF0000;">&quot;Schm&quot;</span>                                                              
          , <span style="color: #FF0000;">&quot;Table&quot;</span>                                                             
          , <span style="color: #0000ff;">case</span> <span style="color: #0000ff;">when</span> <span style="color: #FF0000;">&quot;PUD&quot;</span> = <span style="color: #FF0000;">'P'</span> <span style="color: #0000ff;">then</span> <span style="color: #cc66cc;">0</span>                                        
                 <span style="color: #0000ff;">when</span> <span style="color: #FF0000;">&quot;PUD&quot;</span> = <span style="color: #FF0000;">'U'</span> <span style="color: #0000ff;">then</span> <span style="color: #cc66cc;">1</span>                                        
                 <span style="color: #0000ff;">else</span> <span style="color: #cc66cc;">2</span>                                                         
            <span style="color: #0000ff;">end</span>                                                                 
          , <span style="color: #FF0000;">&quot;Index&quot;</span>                                                             
   ;</pre></td></tr></table></pre>
</div></blockquote>

]]></content:encoded>
			<dc:creator>escartefigue</dc:creator>
			<guid isPermaLink="true">https://www.developpez.net/forums/blogs/795608-escartefigue/b10553/db2-for-z-os-analyser-index/</guid>
		</item>
		<item>
			<title>DB2 for Z/OS : analyser les contraintes CHECK et REFERENCE</title>
			<link>https://www.developpez.net/forums/blogs/795608-escartefigue/b10552/db2-for-z-os-analyser-contraintes-check-reference/</link>
			<pubDate>Wed, 29 Nov 2023 10:49:54 GMT</pubDate>
			<description>Voici des requêtes qui...</description>
			<content:encoded><![CDATA[<blockquote class="blogcontent restore">Voici des requêtes qui permettent d'extraire du catalogue les informations relatives aux contraintes de contenu (CHECK) et de référence à des clefs étrangères (REFERENCE FOREIGN KEY) sur DB2 for Z/OS<br />
Les noms d'objets sont restitués sur 8 caractères, car c'est la longueur maximale la plus souvent utilisée dans le monde Z/OS pour des raisons historiques, à adapter si besoin.<br />
<br />
Contraintes de contenu :<br />
<br />
<div class="bbcode_container">
	<table width="100%" border="0" cellspacing="0" cellpadding="0"><tr>
	<td style="border: 0; padding: 0; text-align: left">Code SQL :</td>
	<td style="border: 0; padding: 0; text-align: right"><a href="#" onclick="return ano_selectionnerCode(this);">Sélectionner tout</a> -
	<a href="#" onclick="return ano_etendreCode(this);">Visualiser dans une fenêtre à part</a></td></tr></table>
	<pre class="bbcode_code" style="height:144px;"><table cellspacing="0" cellpadding="0"><tr><td valign="top" width="26"><div style="border: 1px dashed gray; padding-left: 5px; padding-right: 5px; margin-right: 5px; text-align: right; font-family: monospace">1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br /></div></td><td valign="top"><pre style="margin: 0"><span style="color: #808080;">-- liste des contraintes CHECK                             </span>
   <span style="color: #0000ff;">select</span> substr<span class="br0">&#40;</span>TBOWNER,   01, 08<span class="br0">&#41;</span>  <span style="color: #0000ff;">as</span> <span style="color: #FF0000;">&quot;Schema&quot;</span>           
        , substr<span class="br0">&#40;</span>TBNAME,    01, 08<span class="br0">&#41;</span>  <span style="color: #0000ff;">as</span> <span style="color: #FF0000;">&quot;Table&quot;</span>            
        , substr<span class="br0">&#40;</span>CHECKNAME, 01, <span style="color: #cc66cc;">30</span><span class="br0">&#41;</span>  <span style="color: #0000ff;">as</span> <span style="color: #FF0000;">&quot;Nom&quot;</span>              
        , CHECKCONDITION             <span style="color: #0000ff;">as</span> <span style="color: #FF0000;">&quot;Cond&quot;</span>             
   <span style="color: #0000ff;">from</span>  SYSIBM.SYSCHECKS                                  
   <span style="color: #0000ff;">where</span> TBOWNER = <span style="color: #FF0000;">'SCH1'</span>                                  
   <span style="color: #0000ff;">order</span> <span style="color: #0000ff;">by</span> <span style="color: #cc66cc;">1</span>, <span style="color: #cc66cc;">2</span>, <span style="color: #cc66cc;">3</span>                                        
   ;</pre></td></tr></table></pre>
</div><br />
<br />
Contraintes de référence à des clefs étrangères :<br />
<br />
<div class="bbcode_container">
	<table width="100%" border="0" cellspacing="0" cellpadding="0"><tr>
	<td style="border: 0; padding: 0; text-align: left">Code SQL :</td>
	<td style="border: 0; padding: 0; text-align: right"><a href="#" onclick="return ano_selectionnerCode(this);">Sélectionner tout</a> -
	<a href="#" onclick="return ano_etendreCode(this);">Visualiser dans une fenêtre à part</a></td></tr></table>
	<pre class="bbcode_code" style="height:204px;"><table cellspacing="0" cellpadding="0"><tr><td valign="top" width="33"><div style="border: 1px dashed gray; padding-left: 5px; padding-right: 5px; margin-right: 5px; text-align: right; font-family: monospace">1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br />23<br />24<br />25<br />26<br />27<br />28<br />29<br />30<br />31<br />32<br />33<br />34<br />35<br /></div></td><td valign="top"><pre style="margin: 0"><span style="color: #808080;">-- Cette requete analyse les contraintes d'int&eacute;grit&eacute; entre tables               </span>
   <span style="color: #0000ff;">set</span> current schema = <span style="color: #FF0000;">'SYSIBM'</span>                                  
   ;                                                              
   <span style="color: #0000ff;">with</span> CT1<span class="br0">&#40;</span>SCH1, TAB1<span class="br0">&#41;</span> <span style="color: #0000ff;">as</span>                                        
       <span class="br0">&#40;</span><span style="color: #0000ff;">select</span> <span style="color: #FF0000;">'SCH0'</span>, <span style="color: #FF0000;">'T020'</span> <span style="color: #0000ff;">from</span> SYSIBM.SYSDUMMY1   <span style="color: #0000ff;">union</span> <span style="color: #0000ff;">all</span>   
        <span style="color: #0000ff;">select</span> <span style="color: #FF0000;">'SCH0'</span>, <span style="color: #FF0000;">'T021'</span> <span style="color: #0000ff;">from</span> SYSIBM.SYSDUMMY1               
       <span class="br0">&#41;</span>                                                          
   <span style="color: #0000ff;">select</span> <span style="color: #0000ff;">distinct</span>                                                
          substr<span class="br0">&#40;</span>RL.CREATOR, 01, <span style="color: #cc66cc;">4</span><span class="br0">&#41;</span>     <span style="color: #0000ff;">as</span> <span style="color: #FF0000;">&quot;Schm&quot;</span>                 
        , substr<span class="br0">&#40;</span>RL.REFTBNAME, 01, 08<span class="br0">&#41;</span>  <span style="color: #0000ff;">as</span> <span style="color: #FF0000;">&quot;ParentTb&quot;</span>             
        , substr<span class="br0">&#40;</span>RL.TBNAME, 01, 08<span class="br0">&#41;</span>     <span style="color: #0000ff;">as</span> <span style="color: #FF0000;">&quot;Child Tb&quot;</span>             
        , substr<span class="br0">&#40;</span>RL.RELNAME, 01, <span style="color: #cc66cc;">20</span><span class="br0">&#41;</span>    <span style="color: #0000ff;">as</span> <span style="color: #FF0000;">&quot;Constr&quot;</span>               
        , RL.DELETERULE                 <span style="color: #0000ff;">as</span> <span style="color: #FF0000;">&quot;OnDel&quot;</span>                
        , RL.ENFORCED                   <span style="color: #0000ff;">as</span> <span style="color: #FF0000;">&quot;Enf&quot;</span>                  
        , RL.CHECKEXISTINGDATA          <span style="color: #0000ff;">as</span> <span style="color: #FF0000;">&quot;Chk&quot;</span>                  
        , substr<span class="br0">&#40;</span>KY.COLNAME, 01, 08<span class="br0">&#41;</span>    <span style="color: #0000ff;">as</span> <span style="color: #FF0000;">&quot;ParenCol&quot;</span>             
        , KY.COLNO                      <span style="color: #0000ff;">as</span> <span style="color: #FF0000;">&quot;PColNo&quot;</span>               
        , substr<span class="br0">&#40;</span>FK.COLNAME, 01, 08<span class="br0">&#41;</span>    <span style="color: #0000ff;">as</span> <span style="color: #FF0000;">&quot;ChildCol&quot;</span>             
        , FK.COLNO                      <span style="color: #0000ff;">as</span> <span style="color: #FF0000;">&quot;CColNo&quot;</span>               
   <span style="color: #0000ff;">from</span>  SYSRELS  RL                                              
   <span style="color: #0000ff;">inner</span> <span style="color: #0000ff;">join</span> CT1 CT                                              
      <span style="color: #0000ff;">on</span> <span class="br0">&#40;</span>RL.CREATOR      = CT.SCH1  <span style="color: #0000ff;">and</span>  RL.TBNAME    = CT.TAB1<span class="br0">&#41;</span> 
      <span style="color: #0000ff;">or</span> <span class="br0">&#40;</span>RL.REFTBCREATOR = CT.SCH1  <span style="color: #0000ff;">and</span>  RL.REFTBNAME = CT.TAB1<span class="br0">&#41;</span> 
   <span style="color: #0000ff;">inner</span> <span style="color: #0000ff;">join</span> SYSFOREIGNKEYS FK                                   
      <span style="color: #0000ff;">on</span> FK.CREATOR = RL.CREATOR                                  
     <span style="color: #0000ff;">and</span> FK.RELNAME = RL.RELNAME                                  
   <span style="color: #0000ff;">left</span>  <span style="color: #0000ff;">join</span> SYSKEYS KY                                          
      <span style="color: #0000ff;">on</span> KY.IXCREATOR=CT.SCH1                                     
     <span style="color: #0000ff;">and</span> KY.IXNAME   =RL.IXNAME                                   
     <span style="color: #0000ff;">and</span> KY.COLSEQ   =FK.COLSEQ                                   
   <span style="color: #0000ff;">order</span> <span style="color: #0000ff;">by</span> <span style="color: #FF0000;">&quot;ParentTb&quot;</span>                                            
          , <span style="color: #FF0000;">&quot;Child Tb&quot;</span>                                            
          , <span style="color: #FF0000;">&quot;Constr&quot;</span>                                              
          , <span style="color: #FF0000;">&quot;CColNo&quot;</span>                                              
   ;</pre></td></tr></table></pre>
</div><br />
On rappellera que dans une base de données relationnelle, seules les les contraintes de type REFERENCE permettent de <b>garantir</b> l'intégrité parent/enfant.<br />
Malheureusement, on rencontre un grand nombre de sites dans lesquels aucune contrainte de ce type n'est installée, sous toutes sortes de prétextes, parfois avancés par les DBA eux-mêmes... et tant pis pour l'intégrité !<br />
Jusqu'à aujourd'hui, je n'ai jamais vu de site dépourvu de contrainte REFERENCE et sur lequel aucun orphelin n'existait...</blockquote>

]]></content:encoded>
			<dc:creator>escartefigue</dc:creator>
			<guid isPermaLink="true">https://www.developpez.net/forums/blogs/795608-escartefigue/b10552/db2-for-z-os-analyser-contraintes-check-reference/</guid>
		</item>
		<item>
			<title>DB2 for Z/OS : analyser le besoin de réorganisation</title>
			<link>https://www.developpez.net/forums/blogs/795608-escartefigue/b10551/db2-for-z-os-analyser-besoin-reorganisation/</link>
			<pubDate>Wed, 29 Nov 2023 10:03:57 GMT</pubDate>
			<description>Voici une requête qui permet...</description>
			<content:encoded><![CDATA[<blockquote class="blogcontent restore">Voici une requête qui permet de vérifier le cluster ratio des index cluster sur DB2 for Z/OS, et donc, le besoin éventuel d'exécuter des réorgs.<br />
<br />
Les noms d'objets sont restitués sur 8 caractères, car c'est la longueur maximale la plus souvent utilisée dans le monde Z/OS pour des raisons historiques, à adapter si besoin.<br />
<br />
Si le cluster ratio est fortement dégradé, il faut peut-être augmenter la fréquence des réorgs ou augmenter la valeur du paramètre PCTFREE pour les tables à insertion fréquente et volumineuse.<br />
Peut-être également qu'un événement inhabituel a fortement chargé les TS concernés, auquel cas une surveillance particulière aurait due être mise en place.<br />
<br />
Sur Z/OS, l'essentiel des requêtes est livré dans des packages, il faut donc penser à exécuter les statistiques si elles n'ont pas été activées lors des réorgs, puis à faire un REBIND des packages pour qu'ils reconsidèrent leur chemin d'accès. <br />
<br />
<div class="bbcode_container">
	<table width="100%" border="0" cellspacing="0" cellpadding="0"><tr>
	<td style="border: 0; padding: 0; text-align: left">Code SQL :</td>
	<td style="border: 0; padding: 0; text-align: right"><a href="#" onclick="return ano_selectionnerCode(this);">Sélectionner tout</a> -
	<a href="#" onclick="return ano_etendreCode(this);">Visualiser dans une fenêtre à part</a></td></tr></table>
	<pre class="bbcode_code" style="height:204px;"><table cellspacing="0" cellpadding="0"><tr><td valign="top" width="33"><div style="border: 1px dashed gray; padding-left: 5px; padding-right: 5px; margin-right: 5px; text-align: right; font-family: monospace">1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br />23<br />24<br />25<br />26<br />27<br />28<br />29<br />30<br />31<br />32<br />33<br />34<br />35<br />36<br />37<br />38<br />39<br />40<br />41<br />42<br />43<br />44<br />45<br />46<br />47<br />48<br />49<br />50<br />51<br />52<br />53<br /></div></td><td valign="top"><pre style="margin: 0"><span style="color: #808080;">-- Cette requete analyse la d&eacute;sorganisation des tablespaces en v&eacute;rifiant le     </span>
<span style="color: #808080;">-- cluster ratio des index cluster et restitue le nombre de M&agrave;J depuis la       </span>
<span style="color: #808080;">-- derni&egrave;re r&eacute;org                                                               </span>
<span style="color: #808080;">-- Le ratio est bon si &gt;= 95%                                                   </span>
<span style="color: #808080;">-- Param&ecirc;tres &agrave; modifier en fonction du besoin :                                </span>
<span style="color: #808080;">--    TB.CREATOR et TB.NAME dans le WHERE                                       </span>
   <span style="color: #0000ff;">set</span> current schema = <span style="color: #FF0000;">'SYSIBM'</span>                                                
   ;                                                                            
<span style="color: #808080;">-- analyse du cluster ratio des index cluster (besoin de r&eacute;org ?)               </span>
   <span style="color: #0000ff;">select</span> substr<span class="br0">&#40;</span>TB.CREATOR, 01, 08<span class="br0">&#41;</span>   <span style="color: #0000ff;">as</span> SCHEMA                                
        , substr<span class="br0">&#40;</span>TB.NAME, 01, 08<span class="br0">&#41;</span>      <span style="color: #0000ff;">as</span> <span style="color: #0000ff;">TABLE</span>                                 
        , substr<span class="br0">&#40;</span>IX.NAME, 01, <span style="color: #cc66cc;">10</span><span class="br0">&#41;</span>      <span style="color: #0000ff;">as</span> <span style="color: #0000ff;">INDEX</span>                                 
        , IX.UNIQUERULE                <span style="color: #0000ff;">as</span> UNIQ                                  
        , IX.CLUSTERING                <span style="color: #0000ff;">as</span> CLSG                                  
        , IX.CLUSTERED                 <span style="color: #0000ff;">as</span> CLSD                                  
        , IX.CLUSTERRATIO              <span style="color: #0000ff;">as</span> RATIO                                 
        , TB.CARDF                     <span style="color: #0000ff;">as</span> CARDF                                 
        , TB.NPAGESF                   <span style="color: #0000ff;">as</span> NPAGESF                               
        , subq.RGDAT                   <span style="color: #0000ff;">as</span> REOGDATE                              
        , subq.RGISR                   <span style="color: #0000ff;">as</span> REORGISR                              
        , subq.RGDEL                   <span style="color: #0000ff;">as</span> REORGDEL                              
        , subq.RGUPD                   <span style="color: #0000ff;">as</span> REORGUPD                              
   <span style="color: #0000ff;">from</span>       SYSTABLES      <span style="color: #0000ff;">as</span> TB  <span style="color: #808080;">-- table des tables                         </span>
   <span style="color: #0000ff;">inner</span> <span style="color: #0000ff;">join</span> SYSTABLESPACE  <span style="color: #0000ff;">as</span> TS  <span style="color: #808080;">-- table des tablespaces                    </span>
     <span style="color: #0000ff;">on</span>  TS.DBID = TB.DBID                                                      
     <span style="color: #0000ff;">and</span> TS.NAME = TB.TSNAME                                                    
   <span style="color: #0000ff;">inner</span> <span style="color: #0000ff;">join</span> SYSINDEXES     <span style="color: #0000ff;">as</span> IX  <span style="color: #808080;">-- table des index                          </span>
     <span style="color: #0000ff;">on</span>  IX.TBCREATOR = TB.CREATOR                                              
     <span style="color: #0000ff;">and</span> IX.TBNAME    = TB.NAME                                                 
   <span style="color: #0000ff;">left</span>  <span style="color: #0000ff;">join</span> <span style="color: #808080;">-- nombre d'insert/delete/update depuis la derni&egrave;re r&eacute;org         </span>
        <span class="br0">&#40;</span><span style="color: #0000ff;">select</span> DBID                                                            
              , PSID                                                            
              , <span style="color: #0000ff;">date</span><span class="br0">&#40;</span>REORGLASTTIME<span class="br0">&#41;</span> <span style="color: #0000ff;">as</span> RGDAT                                    
             <span style="color: #808080;">-- les 3 cols sont &quot;nullables&quot; d'o&ugrave; COALESCE + CAST                </span>
              , <span style="color: #0000ff;">sum</span><span class="br0">&#40;</span><span style="color: #0000ff;">cast</span><span class="br0">&#40;</span>coalesce<span class="br0">&#40;</span>REORGINSERTS, <span style="color: #cc66cc;">0</span><span class="br0">&#41;</span> <span style="color: #0000ff;">as</span> bigint<span class="br0">&#41;</span><span class="br0">&#41;</span> <span style="color: #0000ff;">as</span> RGISR         
              , <span style="color: #0000ff;">sum</span><span class="br0">&#40;</span><span style="color: #0000ff;">cast</span><span class="br0">&#40;</span>coalesce<span class="br0">&#40;</span>REORGDELETES, <span style="color: #cc66cc;">0</span><span class="br0">&#41;</span> <span style="color: #0000ff;">as</span> bigint<span class="br0">&#41;</span><span class="br0">&#41;</span> <span style="color: #0000ff;">as</span> RGDEL         
              , <span style="color: #0000ff;">sum</span><span class="br0">&#40;</span><span style="color: #0000ff;">cast</span><span class="br0">&#40;</span>coalesce<span class="br0">&#40;</span>REORGUPDATES, <span style="color: #cc66cc;">0</span><span class="br0">&#41;</span> <span style="color: #0000ff;">as</span> bigint<span class="br0">&#41;</span><span class="br0">&#41;</span> <span style="color: #0000ff;">as</span> RGUPD         
         <span style="color: #0000ff;">from</span> SYSTABLESPACESTATS    <span style="color: #808080;">-- table des RTS (Real Time Statistics)     </span>
         <span style="color: #0000ff;">group</span> <span style="color: #0000ff;">by</span> DBID                                                          
                , PSID                                                          
                , <span style="color: #0000ff;">DATE</span><span class="br0">&#40;</span>REORGLASTTIME<span class="br0">&#41;</span>                                           
        <span class="br0">&#41;</span> subq                                                                  
     <span style="color: #0000ff;">on</span>  subq.DBID = TB.DBID                                                    
     <span style="color: #0000ff;">and</span> subq.PSID = TS.PSID                                                    
   <span style="color: #0000ff;">where</span> IX.CLUSTERING = <span style="color: #FF0000;">'Y'</span>            <span style="color: #808080;">-- index cluster                        </span>
     <span style="color: #0000ff;">and</span> IX.CLUSTERED  = <span style="color: #FF0000;">'N'</span>            <span style="color: #808080;">-- mal organis&eacute;                         </span>
     <span style="color: #0000ff;">and</span> TB.TYPE       = <span style="color: #FF0000;">'T'</span>            <span style="color: #808080;">-- type table                           </span>
     <span style="color: #0000ff;">and</span> <span class="br0">&#40;</span>TB.CARDF = -<span style="color: #cc66cc;">1</span> <span style="color: #0000ff;">or</span> TB.CARDF &gt;<span style="color: #cc66cc;">0</span><span class="br0">&#41;</span> <span style="color: #808080;">-- sauf tables vides                    </span>
   <span style="color: #808080;">-- modifier les schemas et pr&eacute;fixes de tables ci-dessous                     </span>
     <span style="color: #0000ff;">and</span> TB.CREATOR <span style="color: #0000ff;">in</span> <span class="br0">&#40;</span><span style="color: #FF0000;">'SCH1'</span>, <span style="color: #FF0000;">'SCH2'</span><span class="br0">&#41;</span>                                         
     <span style="color: #0000ff;">and</span> TB.NAME <span style="color: #0000ff;">like</span> <span style="color: #FF0000;">'TR%'</span>                                                    
   <span style="color: #0000ff;">order</span> <span style="color: #0000ff;">by</span> TB.NAME                                                             
          , TB.CREATOR</pre></td></tr></table></pre>
</div><br />
Et une autre approche donnant le détail par partition (merci à Bernard59139)<br />
<br />
<div class="bbcode_container">
	<table width="100%" border="0" cellspacing="0" cellpadding="0"><tr>
	<td style="border: 0; padding: 0; text-align: left">Code SQL :</td>
	<td style="border: 0; padding: 0; text-align: right"><a href="#" onclick="return ano_selectionnerCode(this);">Sélectionner tout</a> -
	<a href="#" onclick="return ano_etendreCode(this);">Visualiser dans une fenêtre à part</a></td></tr></table>
	<pre class="bbcode_code" style="height:204px;"><table cellspacing="0" cellpadding="0"><tr><td valign="top" width="33"><div style="border: 1px dashed gray; padding-left: 5px; padding-right: 5px; margin-right: 5px; text-align: right; font-family: monospace">1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br />23<br />24<br />25<br />26<br />27<br />28<br />29<br />30<br />31<br />32<br />33<br />34<br />35<br />36<br /></div></td><td valign="top"><pre style="margin: 0">  <span style="color: #0000ff;">set</span> CURRENT PRECISION = <span style="color: #FF0000;">'D31.2'</span>                                               
  ;                                                                             
  <span style="color: #0000ff;">select</span> substr<span class="br0">&#40;</span>RTS.DBNAME, 01, 08<span class="br0">&#41;</span>                   <span style="color: #0000ff;">as</span> <span style="color: #FF0000;">&quot;DataBase&quot;</span>             
       , substr<span class="br0">&#40;</span>RTS.NAME, 01, 08<span class="br0">&#41;</span>                     <span style="color: #0000ff;">as</span> <span style="color: #FF0000;">&quot;Table Space&quot;</span>          
       , TP.PARTITION                                 <span style="color: #0000ff;">as</span> <span style="color: #FF0000;">&quot;Part&quot;</span>                 
       , TS.TYPE                                      <span style="color: #0000ff;">as</span> <span style="color: #FF0000;">&quot;Type&quot;</span>                 
       , <span style="color: #0000ff;">cast</span> <span class="br0">&#40;</span>RTS.REORGINSERTS/dec<span class="br0">&#40;</span>RTS.TOTALROWS<span class="br0">&#41;</span>*<span style="color: #cc66cc;">100</span> <span style="color: #0000ff;">as</span> dec<span class="br0">&#40;</span><span style="color: #cc66cc;">5</span>,<span style="color: #cc66cc;">2</span><span class="br0">&#41;</span><span class="br0">&#41;</span>             
                                                      <span style="color: #0000ff;">as</span> <span style="color: #FF0000;">&quot;RTSIsr%&quot;</span>              
       , <span style="color: #0000ff;">cast</span> <span class="br0">&#40;</span>RTS.REORGDELETES/dec<span class="br0">&#40;</span>RTS.TOTALROWS<span class="br0">&#41;</span>*<span style="color: #cc66cc;">100</span> <span style="color: #0000ff;">as</span> dec<span class="br0">&#40;</span><span style="color: #cc66cc;">5</span>,<span style="color: #cc66cc;">2</span><span class="br0">&#41;</span><span class="br0">&#41;</span>             
                                                      <span style="color: #0000ff;">as</span> <span style="color: #FF0000;">&quot;RTSDel%&quot;</span>              
       , <span style="color: #0000ff;">cast</span> <span class="br0">&#40;</span>RTS.REORGUNCLUSTINS/dec<span class="br0">&#40;</span>RTS.TOTALROWS<span class="br0">&#41;</span>*<span style="color: #cc66cc;">100</span>                       
                                        <span style="color: #0000ff;">as</span> dec<span class="br0">&#40;</span><span style="color: #cc66cc;">5</span>,<span style="color: #cc66cc;">2</span><span class="br0">&#41;</span><span class="br0">&#41;</span>  <span style="color: #0000ff;">as</span> <span style="color: #FF0000;">&quot;UnClus%&quot;</span>              
       , <span style="color: #0000ff;">cast</span> <span class="br0">&#40;</span> <span class="br0">&#40;</span>RTS.REORGNEARINDREF+RTS.REORGFARINDREF<span class="br0">&#41;</span>                        
               / dec<span class="br0">&#40;</span>RTS.TOTALROWS<span class="br0">&#41;</span>*<span style="color: #cc66cc;">100</span> <span style="color: #0000ff;">as</span> dec<span class="br0">&#40;</span><span style="color: #cc66cc;">5</span>,<span style="color: #cc66cc;">2</span><span class="br0">&#41;</span><span class="br0">&#41;</span>  <span style="color: #0000ff;">as</span> <span style="color: #FF0000;">&quot;Malplace&quot;</span>             
       , <span style="color: #0000ff;">cast</span> <span class="br0">&#40;</span><span style="color: #0000ff;">replace</span><span class="br0">&#40;</span>varchar_format                                           
                <span class="br0">&#40;</span>RTS.REORGMASSDELETE,<span style="color: #FF0000;">'999,999,999,999'</span><span class="br0">&#41;</span>, <span style="color: #FF0000;">','</span>, <span style="color: #FF0000;">' '</span><span class="br0">&#41;</span>              
                <span style="color: #0000ff;">as</span> <span style="color: #0000ff;">char</span><span class="br0">&#40;</span><span style="color: #cc66cc;">16</span><span class="br0">&#41;</span><span class="br0">&#41;</span>                          <span style="color: #0000ff;">as</span> <span style="color: #FF0000;">&quot;MassDel&quot;</span>              
       , <span style="color: #0000ff;">cast</span> <span class="br0">&#40;</span><span style="color: #0000ff;">replace</span><span class="br0">&#40;</span>varchar_format                                           
                <span class="br0">&#40;</span>RTS.TOTALROWS,<span style="color: #FF0000;">'999,999,999,999'</span><span class="br0">&#41;</span>, <span style="color: #FF0000;">','</span>, <span style="color: #FF0000;">' '</span><span class="br0">&#41;</span>                    
                <span style="color: #0000ff;">as</span> <span style="color: #0000ff;">char</span><span class="br0">&#40;</span><span style="color: #cc66cc;">16</span><span class="br0">&#41;</span><span class="br0">&#41;</span>                          <span style="color: #0000ff;">as</span> <span style="color: #FF0000;">&quot;TotalRows&quot;</span>            
       , <span style="color: #0000ff;">cast</span> <span class="br0">&#40;</span><span style="color: #0000ff;">replace</span><span class="br0">&#40;</span>varchar_format                                           
                <span class="br0">&#40;</span>RTS.NPAGES,<span style="color: #FF0000;">'999,999,999,999'</span><span class="br0">&#41;</span>, <span style="color: #FF0000;">','</span>, <span style="color: #FF0000;">' '</span><span class="br0">&#41;</span>                      
                <span style="color: #0000ff;">as</span> <span style="color: #0000ff;">char</span><span class="br0">&#40;</span><span style="color: #cc66cc;">16</span><span class="br0">&#41;</span><span class="br0">&#41;</span>                          <span style="color: #0000ff;">as</span> <span style="color: #FF0000;">&quot;Pages&quot;</span>               
       , RTS.REORGLASTTIME                            <span style="color: #0000ff;">as</span> <span style="color: #FF0000;">&quot;Last R&eacute;org&quot;</span>          
  <span style="color: #0000ff;">from</span>        SYSIBM.SYSTABLESPACESTATS <span style="color: #0000ff;">as</span> RTS                                 
  <span style="color: #0000ff;">inner</span> <span style="color: #0000ff;">join</span>  SYSIBM.SYSTABLESPACE      <span style="color: #0000ff;">as</span> TS                                  
     <span style="color: #0000ff;">on</span> TS.DBNAME = RTS.DBNAME                                                 
    <span style="color: #0000ff;">and</span> TS.NAME   = RTS.NAME                                                   
  <span style="color: #0000ff;">inner</span> <span style="color: #0000ff;">join</span>  SYSIBM.SYSTABLEPART       <span style="color: #0000ff;">as</span> TP                                  
     <span style="color: #0000ff;">on</span> TP.DBNAME    = TS.DBNAME                                               
    <span style="color: #0000ff;">and</span> TP.TSNAME    = TS.NAME                                                 
    <span style="color: #0000ff;">and</span> TP.PARTITION = RTS.PARTITION                                           
  <span style="color: #0000ff;">where</span> RTS.TOTALROWS &gt; <span style="color: #cc66cc;">50</span>                                                     
    <span style="color: #0000ff;">and</span> TS.DBNAME=<span style="color: #FF0000;">'Ma_database'</span>                                                   
  <span style="color: #0000ff;">order</span> <span style="color: #0000ff;">by</span> <span style="color: #cc66cc;">1</span>, <span style="color: #cc66cc;">2</span>, <span style="color: #cc66cc;">3</span>                                                             
  ;</pre></td></tr></table></pre>
</div></blockquote>

]]></content:encoded>
			<dc:creator>escartefigue</dc:creator>
			<guid isPermaLink="true">https://www.developpez.net/forums/blogs/795608-escartefigue/b10551/db2-for-z-os-analyser-besoin-reorganisation/</guid>
		</item>
		<item>
			<title>Quand utiliser SELECT *</title>
			<link>https://www.developpez.net/forums/blogs/795608-escartefigue/b10457/utiliser-select/</link>
			<pubDate>Wed, 19 Apr 2023 14:06:53 GMT</pubDate>
			<description>On trouve très souvent des...</description>
			<content:encoded><![CDATA[<blockquote class="blogcontent restore">On trouve très souvent des traitements dans lesquels les requêtes utilisent des ordres <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block"><span style="color: #0000ff;">SELECT</span> *</span>.<br />
<br />
Or il faut savoir que, avec <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block"><span style="color: #0000ff;">SELECT</span> *</span><ul><li style="">on transporte des colonnes dont on n'a pas besoin, ce qui charge le réseau inutilement et pénalise les performances :<br />
<div style="margin-left:40px">- il est très rare qu'on ait besoin de toutes les colonnes d'une table dans un traitement,<br />
- si la requête utilise des jointures, toutes les colonnes de jointure sont présentes plusieurs fois&nbsp;;</div></li><li style="">les études d'impact sont difficiles puisqu'on ne sait pas quelles sont les colonnes réellement utiles au traitement&nbsp;;</li><li style="">en cas de modification de la table ou de la vue, le traitement plante ou les résultats sont erronés&nbsp;;</li><li style="">les index couvrants, si présents, sont inutilisables.</li></ul><br />
<br />
Et si le <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block"><span style="color: #0000ff;">SELECT</span></span> est utilisé pour réaliser une insertion, en cas d'ajout de colonnes dans la table ou, c'est plus rare, de modification de l'ordre des colonnes, la requête devient invalide !<br />
<br />
Pour ces raisons, certaines entreprises interdisent purement et simplement de coder <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block"><span style="color: #0000ff;">SELECT</span> *</span> dans un livrable !<br />
<br />
Les seuls cas où l'on peut s'autoriser <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block"><span style="color: #0000ff;">SELECT</span> *</span> sont les suivants :<br />
<ul><li style="">requête jetable, exécutée à la volée, mais qui n'a pas vocation à être intégrée dans un livrable&nbsp;;</li><li style="">cas particulier du test d'existence avec <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block"><span class="br0">&#40;</span><span style="color: #0000ff;">NOT</span><span class="br0">&#41;</span> <span style="color: #0000ff;">EXISTS</span></span><div style="margin-left:40px">En effet, dans ce cas, le SELECT ne transporte qu'un booléen (vrai/faux), il n'y a donc pas d'inconvénient à coder <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block"><span style="color: #0000ff;">SELECT</span> *</span>.<br />
Toutefois, le risque subsiste qu'un développeur ne connaissant pas cette particularité copie/colle ce code pour un autre usage, retombant ainsi dans les travers évoqués plus haut. <br />
C'est pourquoi, pour un test d'existence, je préfère coder <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block"><span style="color: #0000ff;">SELECT</span> <span style="color: #cc66cc;">1</span></span> dans la requête corrélée.</div></li></ul></blockquote>

]]></content:encoded>
			<dc:creator>escartefigue</dc:creator>
			<guid isPermaLink="true">https://www.developpez.net/forums/blogs/795608-escartefigue/b10457/utiliser-select/</guid>
		</item>
		<item>
			<title><![CDATA[Renumérotation des identifiants d'une base de données... l'éternelle question]]></title>
			<link>https://www.developpez.net/forums/blogs/795608-escartefigue/b10384/renumerotation-identifiants-d-base-donnees-l-eternelle-question/</link>
			<pubDate>Fri, 30 Sep 2022 12:21:26 GMT</pubDate>
			<description>Voici le genre de questions...</description>
			<content:encoded><![CDATA[<blockquote class="blogcontent restore">Voici le genre de questions très fréquemment posées sur ce forum et ailleurs :<br />
<br />
<div class="bbcode_container">
	<div class="bbcode_quote">
		<div class="quote_container">
			<div class="bbcode_quote_container"></div>
			
				<div class="bbcode_postedby">
					<img src="https://forum.developpez.be/images/misc/quote_icon.png" alt="Citation" /> Envoyé par <strong>un participant</strong>
					
				</div>
				<div class="message">Comment puis-je renuméroter les identifiants de ma table qui présentent des &quot;trous&quot;</div>
			
		</div>
	</div>
</div>ou encore<br />
<br />
<div class="bbcode_container">
	<div class="bbcode_quote">
		<div class="quote_container">
			<div class="bbcode_quote_container"></div>
			
				<div class="bbcode_postedby">
					<img src="https://forum.developpez.be/images/misc/quote_icon.png" alt="Citation" /> Envoyé par <strong>un autre participant</strong>
					
				</div>
				<div class="message">J'aimerais réorganiser les identifiants de ma table .</div>
			
		</div>
	</div>
</div><font size="3"><b>Tout d'abord, un peu de sémantique </b></font><br />
Dans une base de données, la <b>réorganisation </b>est une opération consistant à défragmenter les espaces physiques de stockage des données et des index.<br />
Pour les pages de données, il s'agit de les ranger selon la séquence de rangement définie par l'index cluster<br />
Pour les pages d'index, il s'agit de de les ranger selon l'ordre des colonnes de l'index<br />
<b>Dans les deux cas, l'opération de réorganisation ne modifie aucune valeur de quelque colonne que ce soit dans les tables !</b><br />
<br />
À l'inverse, une renumérotation modifie la valeur d'une colonne<br />
<br />
Il ne faut donc pas confondre réorganisation et renumérotation, ce sont deux opérations bien distinctes<br />
<br />
<br />
<b><font size="3">Ensuite, quel est le rôle d'un identifiant ? </font></b><br />
<br />
Un identifiant au niveau conceptuel (au stade du MCD donc), qui devient clef primaire au niveau SQL, n'a pour fonction que de permettre d'identifier de façon certaine une occurrence d'entité (au niveau conceptuel) et donc une ligne particulière dans une table (au niveau SQL). <br />
Les caractéristiques d'une clef primaire sont d'être unique, stable, non &quot;nullable&quot; et irréductible.<br />
<ul><li style="">Unique : comme son nom l'indique, chaque valeur ne peut exister qu'une seule fois&nbsp;;</li><li style="">Stable : la valeur d'une PK (clef primaire) se propage dans les tables associées au travers des contraintes d'intégrité&nbsp;;</li><li style="">Non &quot;nullable&quot; : la valeur est obligatoire, aucune PK ne peut être marquée &quot;null&quot;&nbsp;;</li><li style="">Irréductible : une sous-partie de la PK ne peut suffire à garantir l'unicité.</li></ul><br />
<br />
<br />
Si l'on changeait la valeur d'un identifiant et donc d'une clef primaire (dite &quot;PK&quot; pour Primary Key), c'est le 2e point, la stabilité, qui pose problème : à cause du phénomène de cascade, l'envie autant compulsive qu'inutile de &quot;boucher les trous&quot;,  peut engendrer des millions, voire des milliards de mises à jour inutiles et mettre à plat la base de données.<br />
<br />
<font size="3"><b>Et tout ça pour quoi ?</b></font><br />
<br />
Une valeur d'identifiant manquante peut être causée par <br />
<ul><li style="">une ligne supprimée par un ordre <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block"><span style="color: #0000ff;">DELETE</span></span>&nbsp;;</li><li style="">une insertion non <i>commitée</i>&nbsp;;</li><li style="">un pas d'incrément différent de 1.</li></ul><br />
<br />
De plus, il faut savoir que <b><font color="#FF0000">la valeur des identifiants n'a pas de sens chronologique</font></b><br />
<ul><li style="">on peut à tout moment forcer la valeur d'un identifiant dans l'ordre INSERT en en communiquant la valeur &nbsp;;</li><li style="">sur certains SGBD, les valeurs d'identifiants sont distribuées par paquet pour éviter de solliciter le moteur à chaque insertion, mais bien entendu, l'utilisation des identifiants dans chaque thread concurrent n'est pas obligatoirement choronologique, ainsi, l'identifiant de valeur 100 a très bien pu être commité (validé) <b>après </b>celui de valeur 120.</li></ul><br />
<br />
Enfin, boucher les trous serait un chantier permanent<br />
Comme expliqué plus haut, il est normal que certaines valeurs d'identifiant soient absentes, si on voulait que ce ne soit pas le cas, il faudrait renuméroter en permanence les ID, plusieurs fois par jour même :aie:<br />
<br />
<br />
<b><font size="3">Vous avez besoin d'un chrono unique et dont les valeurs sont contiguës ?</font></b><br />
utilisez la fonction ROW_NUMBER(), elle est faite pour ça, mais par pitié, <b>ne touchez pas aux identifiants</b>.<br />
<br />
<br />
<b><font size="3">Vous avez besoin de connaître la chronologie d'insertion des lignes dans une table</font></b><br />
ajoutez une colonne d'horodatage fin, type timestamp, <b>mais n'utilisez jamais les identifiants</b></blockquote>

]]></content:encoded>
			<dc:creator>escartefigue</dc:creator>
			<guid isPermaLink="true">https://www.developpez.net/forums/blogs/795608-escartefigue/b10384/renumerotation-identifiants-d-base-donnees-l-eternelle-question/</guid>
		</item>
		<item>
			<title>Combinaisons de jointures INNER et OUTER</title>
			<link>https://www.developpez.net/forums/blogs/795608-escartefigue/b9908/combinaisons-jointures-inner-outer/</link>
			<pubDate>Mon, 23 Nov 2020 16:22:42 GMT</pubDate>
			<description>Voici un autre sujet qui...</description>
			<content:encoded><![CDATA[<blockquote class="blogcontent restore">Voici un autre sujet qui revient de temps à autres, celui des requêtes incluant à la fois des jointures internes et externes.<br />
Pour combiner ces deux types de jointures, il faut appliquer la syntaxe suivante :<br />
<br />
<div class="bbcode_container">
	<table width="100%" border="0" cellspacing="0" cellpadding="0"><tr>
	<td style="border: 0; padding: 0; text-align: left">Code  :</td>
	<td style="border: 0; padding: 0; text-align: right"><a href="#" onclick="return ano_selectionnerCode(this);">Sélectionner tout</a> -
	<a href="#" onclick="return ano_etendreCode(this);">Visualiser dans une fenêtre à part</a></td></tr></table>
	<pre class="bbcode_code" style="height:108px;"><table cellspacing="0" cellpadding="0"><tr><td valign="top" width="26"><div style="border: 1px dashed gray; padding-left: 5px; padding-right: 5px; margin-right: 5px; text-align: right; font-family: monospace">1<br />2<br />3<br />4<br />5<br />6<br /></div></td><td valign="top"><pre style="margin: 0">SELECT [...]
FROM T1
(FULL/LEFT/RIGTH) OUTER JOIN T2
    INNER JOIN T3   
       ON critères de jointure T3/T2
    ON critères de joiture T2/T1</pre></td></tr></table></pre>
</div>Or, on rencontre souvent des requêtes écrites ainsi<br />
<div class="bbcode_container">
	<table width="100%" border="0" cellspacing="0" cellpadding="0"><tr>
	<td style="border: 0; padding: 0; text-align: left">Code  :</td>
	<td style="border: 0; padding: 0; text-align: right"><a href="#" onclick="return ano_selectionnerCode(this);">Sélectionner tout</a> -
	<a href="#" onclick="return ano_etendreCode(this);">Visualiser dans une fenêtre à part</a></td></tr></table>
	<pre class="bbcode_code" style="height:108px;"><table cellspacing="0" cellpadding="0"><tr><td valign="top" width="26"><div style="border: 1px dashed gray; padding-left: 5px; padding-right: 5px; margin-right: 5px; text-align: right; font-family: monospace">1<br />2<br />3<br />4<br />5<br />6<br /></div></td><td valign="top"><pre style="margin: 0">SELECT [...]
FROM T1
(FULL/LEFT/RIGTH) OUTER JOIN T2
    ON critères de joiture T2/T1
INNER JOIN T3   
    ON critères de jointure T3/T2</pre></td></tr></table></pre>
</div>Dans le premier cas, on construit T1 left (T2 inner T3)<br />
Dans le deuxième, on construit (T1 left T2) inner T3<br />
<br />
Pour bien voir la différence, vous pouvez copier-coller le jeu d'essai qui suit dans votre interpréteur SQL :<br />
<br />
<div class="bbcode_container">
	<table width="100%" border="0" cellspacing="0" cellpadding="0"><tr>
	<td style="border: 0; padding: 0; text-align: left">Code  :</td>
	<td style="border: 0; padding: 0; text-align: right"><a href="#" onclick="return ano_selectionnerCode(this);">Sélectionner tout</a> -
	<a href="#" onclick="return ano_etendreCode(this);">Visualiser dans une fenêtre à part</a></td></tr></table>
	<pre class="bbcode_code" style="height:204px;"><table cellspacing="0" cellpadding="0"><tr><td valign="top" width="33"><div style="border: 1px dashed gray; padding-left: 5px; padding-right: 5px; margin-right: 5px; text-align: right; font-family: monospace">1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br />23<br />24<br />25<br />26<br />27<br />28<br />29<br />30<br />31<br />32<br />33<br />34<br /></div></td><td valign="top"><pre style="margin: 0">with CTE1 (id1, ch1, mt1) as                                  
    (select 001, 'ABC', 100.03           
     union all                                                
     select 002, 'DEF', 025.15           
     union all                                                
     select 003, 'IER', 305.22           
     union all                                                
     select 004, 'BGT', 602.00           
     union all                                                
     select 005, 'XAA', 780.15           
     union all                                                
     select 006, 'REE', 018.77           
     union all                                                
     select 007, 'AZE', 051.66       )   
  , CTE2 (id2, dt2, id1) as                               
   (select 001, '2018-01-05', 004    
    union all                                             
    select 004, '2018-01-10', 001    
    union all                                             
    select 002, '2018-01-12', 006    
    union all                                             
    select 005, '2018-01-13', 006    
    union all                                             
    select 006, '2018-01-20', 003   )     
  , CTE3 (id3, mt3, id2) as                                
   (select 001, 800, 001              
    union all                                              
    select 002, 250, 001              
    union all                                              
    select 003, 500, 005              
    union all                                              
    select 004, 200, 006              
    union all                                              
    select 005, 100, 006            )</pre></td></tr></table></pre>
</div>Qu'obtient-on avec la première requête ?<br />
<br />
<div class="bbcode_container">
	<table width="100%" border="0" cellspacing="0" cellpadding="0"><tr>
	<td style="border: 0; padding: 0; text-align: left">Code  :</td>
	<td style="border: 0; padding: 0; text-align: right"><a href="#" onclick="return ano_selectionnerCode(this);">Sélectionner tout</a> -
	<a href="#" onclick="return ano_etendreCode(this);">Visualiser dans une fenêtre à part</a></td></tr></table>
	<pre class="bbcode_code" style="height:168px;"><table cellspacing="0" cellpadding="0"><tr><td valign="top" width="33"><div style="border: 1px dashed gray; padding-left: 5px; padding-right: 5px; margin-right: 5px; text-align: right; font-family: monospace">1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br /></div></td><td valign="top"><pre style="margin: 0">    SELECT T1.ID1           
         , T1.MT1           
         , T1.CH1           
         , T2.ID2           
         , T2.DT2           
         , T3.MT3           
    FROM  CTE1 T1           
    LEFT  JOIN CTE2 T2      
          INNER JOIN CTE3 T3      
             ON T3.ID2 = T2.ID2   
      ON  T2.ID1 = T1.ID1</pre></td></tr></table></pre>
</div>Le résultat est celui attendu, les colonnes marquées &quot;null&quot; confirment la mise en oeuvre d'une jointure externe (OUTER JOIN) :<br />
<br />
<img src="https://www.developpez.net/forums/attachments/p646624d1700062486/forums-redaction/priv-webdesign-gabarit-portail-boutique/commentaires-postnuke-progression-projet/titre.png/" border="0" alt="Nom : Sans titre.png
Affichages : 107
Taille : 12,7 Ko"  style="float: CONFIG" /><br />
<br />
Qu'en est-il avec l'autre syntaxe ?<br />
<div class="bbcode_container">
	<table width="100%" border="0" cellspacing="0" cellpadding="0"><tr>
	<td style="border: 0; padding: 0; text-align: left">Code  :</td>
	<td style="border: 0; padding: 0; text-align: right"><a href="#" onclick="return ano_selectionnerCode(this);">Sélectionner tout</a> -
	<a href="#" onclick="return ano_etendreCode(this);">Visualiser dans une fenêtre à part</a></td></tr></table>
	<pre class="bbcode_code" style="height:180px;"><table cellspacing="0" cellpadding="0"><tr><td valign="top" width="33"><div style="border: 1px dashed gray; padding-left: 5px; padding-right: 5px; margin-right: 5px; text-align: right; font-family: monospace">1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br /></div></td><td valign="top"><pre style="margin: 0">    SELECT T1.ID1           
         , T1.MT1           
         , T1.CH1           
         , T2.ID2           
         , T2.DT2           
         , T3.MT3           
    FROM  CTE1 T1           
    LEFT  JOIN CTE2 T2      
      ON  T2.ID1 = T1.ID1  
    INNER JOIN CTE3 T3      
      ON  T3.ID2 = T2.ID2
    ;</pre></td></tr></table></pre>
</div>Plus de marqueur &quot;null&quot;, ma requête est traitée comme une jointure interne (INNER JOIN) :<br />
<br />
<img src="https://www.developpez.net/forums/attachments/p646625d1700062541/forums-redaction/priv-webdesign-gabarit-portail-boutique/commentaires-postnuke-progression-projet/titre.png/" border="0" alt="Nom : Sans titre.png
Affichages : 105
Taille : 6,4 Ko"  style="float: CONFIG" /><br />
<br />
Notez que l'ajout de parenthèses ne change rien, seul l'ordre des prédicats de jointure compte.</blockquote>

]]></content:encoded>
			<dc:creator>escartefigue</dc:creator>
			<guid isPermaLink="true">https://www.developpez.net/forums/blogs/795608-escartefigue/b9908/combinaisons-jointures-inner-outer/</guid>
		</item>
		<item>
			<title>Selectionner la ligne la plus récente pour un critère</title>
			<link>https://www.developpez.net/forums/blogs/795608-escartefigue/b3239/selectionner-ligne-plus-recente-critere/</link>
			<pubDate>Wed, 14 Jun 2017 13:22:53 GMT</pubDate>
			<description>Le sujet étant archi...</description>
			<content:encoded><![CDATA[<blockquote class="blogcontent restore">Le sujet étant archi récurrent, voici plusieurs méthodes permettant d'identifier la ligne la plus récente ou la plus ancienne pour un critère.<br />
<br />
Tout d'abord, il convient de rappeler que<b> les identifiants techniques attribués par le SGBD (identity column, auto_incrément...) ne doivent en aucun cas être utilisés pour ce besoin</b>. En effet, si ces identifiants sont souvent chronologiques en tout début de vie d'une table, quand il y a eu peu d'insertions, ce n'est rapidement plus le cas, dès que cette table vit un peu. Ne tombez donc pas dans ce piège !<br />
<br />
Donc, dans les exemples ci-dessous, on utilisera une colonne de type timestamp. <br />
<br />
Soit les tables suivantes :<br />
<b>TBB7 :</b><div class="bbcode_container">
	<table width="100%" border="0" cellspacing="0" cellpadding="0"><tr>
	<td style="border: 0; padding: 0; text-align: left">Code  :</td>
	<td style="border: 0; padding: 0; text-align: right"><a href="#" onclick="return ano_selectionnerCode(this);">Sélectionner tout</a> -
	<a href="#" onclick="return ano_etendreCode(this);">Visualiser dans une fenêtre à part</a></td></tr></table>
	<pre class="bbcode_code" style="height:120px;"><table cellspacing="0" cellpadding="0"><tr><td valign="top" width="26"><div style="border: 1px dashed gray; padding-left: 5px; padding-right: 5px; margin-right: 5px; text-align: right; font-family: monospace">1<br />2<br />3<br />4<br />5<br />6<br />7<br /></div></td><td valign="top"><pre style="margin: 0">B7IDEN   B7CPTE     B7JOUR   B7DBCR 
------ ---------- ---------- ------ 
     1 1234567890 2017-01-02      0 
     2 4455667788 2017-01-15      0 
     3 0012005564 2017-06-14      1 
     4 7564534231 2017-01-14      1 
     5 1111122222 2017-01-16      1</pre></td></tr></table></pre>
</div>La PK est B7IDEN<br />
<br />
<b>TBB8 :</b><div class="bbcode_container">
	<table width="100%" border="0" cellspacing="0" cellpadding="0"><tr>
	<td style="border: 0; padding: 0; text-align: left">Code  :</td>
	<td style="border: 0; padding: 0; text-align: right"><a href="#" onclick="return ano_selectionnerCode(this);">Sélectionner tout</a> -
	<a href="#" onclick="return ano_etendreCode(this);">Visualiser dans une fenêtre à part</a></td></tr></table>
	<pre class="bbcode_code" style="height:144px;"><table cellspacing="0" cellpadding="0"><tr><td valign="top" width="26"><div style="border: 1px dashed gray; padding-left: 5px; padding-right: 5px; margin-right: 5px; text-align: right; font-family: monospace">1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br /></div></td><td valign="top"><pre style="margin: 0">B8IDEN B8SEQN      B8MONT                 B8DTHR          
------ ------ ----------------- --------------------------
     1      1           145.280 2017-06-14-14.41.06.079306
     1      2           311.470 2017-06-14-14.41.06.097249
     2      2           -16.800 2017-06-14-14.41.06.098156
     2      1            33.210 2017-06-14-14.41.06.098746
     2      3            -5.100 2017-06-14-14.41.06.099171
     4      2           155.250 2017-06-14-14.41.06.103170
     4      3           800.400 2017-06-14-14.41.06.103651</pre></td></tr></table></pre>
</div>La PK est B8IDEN+B8SEQN<br />
avec une contrainte sur B8IDEN qui fait référence à B7IDEN<br />
<br />
L'éternelle question est : <b><font color="#FF0000">comment rechercher la ligne détail la plus récente pour chaque ligne entête</font></b><br />
<br />
<b>Méthode 1 :</b> utilisation de MAX()<br />
<div class="bbcode_container">
	<table width="100%" border="0" cellspacing="0" cellpadding="0"><tr>
	<td style="border: 0; padding: 0; text-align: left">Code sql :</td>
	<td style="border: 0; padding: 0; text-align: right"><a href="#" onclick="return ano_selectionnerCode(this);">Sélectionner tout</a> -
	<a href="#" onclick="return ano_etendreCode(this);">Visualiser dans une fenêtre à part</a></td></tr></table>
	<pre class="bbcode_code" style="height:192px;"><table cellspacing="0" cellpadding="0"><tr><td valign="top" width="33"><div style="border: 1px dashed gray; padding-left: 5px; padding-right: 5px; margin-right: 5px; text-align: right; font-family: monospace">1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br /></div></td><td valign="top"><pre style="margin: 0">  <span style="color: #0000ff;">SELECT</span> B7IDEN                       
       , B7CPTE                       
       , B8SEQN                       
       , B8MONT                       
       , B8DTHR                       
  <span style="color: #0000ff;">FROM</span> TBB7                           
  <span style="color: #0000ff;">INNER</span> <span style="color: #0000ff;">JOIN</span> TBB8  B8                 
    <span style="color: #0000ff;">ON</span>  B8IDEN = B7IDEN               
  <span style="color: #0000ff;">WHERE</span> B8DTHR =                      
       <span class="br0">&#40;</span><span style="color: #0000ff;">SELECT</span> MAX<span class="br0">&#40;</span>B8DTHR<span class="br0">&#41;</span>            
        <span style="color: #0000ff;">FROM</span> TBB8 S8                  
        <span style="color: #0000ff;">WHERE</span> S8.B8IDEN = B8.B8IDEN<span class="br0">&#41;</span>  
  ;</pre></td></tr></table></pre>
</div><br />
<b>Méthode 2 :</b> utilisation de EXISTS<br />
<div class="bbcode_container">
	<table width="100%" border="0" cellspacing="0" cellpadding="0"><tr>
	<td style="border: 0; padding: 0; text-align: left">Code sql :</td>
	<td style="border: 0; padding: 0; text-align: right"><a href="#" onclick="return ano_selectionnerCode(this);">Sélectionner tout</a> -
	<a href="#" onclick="return ano_etendreCode(this);">Visualiser dans une fenêtre à part</a></td></tr></table>
	<pre class="bbcode_code" style="height:192px;"><table cellspacing="0" cellpadding="0"><tr><td valign="top" width="33"><div style="border: 1px dashed gray; padding-left: 5px; padding-right: 5px; margin-right: 5px; text-align: right; font-family: monospace">1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br /></div></td><td valign="top"><pre style="margin: 0">   <span style="color: #0000ff;">SELECT</span> B7IDEN                        
        , B7CPTE                        
        , B8SEQN                        
        , B8MONT                        
        , B8DTHR                        
   <span style="color: #0000ff;">FROM</span> TBB7                            
   <span style="color: #0000ff;">INNER</span> <span style="color: #0000ff;">JOIN</span> TBB8  B8                  
     <span style="color: #0000ff;">ON</span>  B8IDEN = B7IDEN                
   <span style="color: #0000ff;">WHERE</span> <span style="color: #0000ff;">NOT</span> <span style="color: #0000ff;">EXISTS</span>                     
        <span class="br0">&#40;</span><span style="color: #0000ff;">SELECT</span> <span style="color: #cc66cc;">1</span>                       
         <span style="color: #0000ff;">FROM</span> TBB8 S8                   
         <span style="color: #0000ff;">WHERE</span> S8.B8IDEN = B8.B8IDEN    
           <span style="color: #0000ff;">AND</span> S8.B8DTHR &gt; B8.B8DTHR<span class="br0">&#41;</span>   
   ;</pre></td></tr></table></pre>
</div><br />
<b>Méthode 3 :</b> utilisation de RANK ou DENSE_RANK<br />
<div class="bbcode_container">
	<table width="100%" border="0" cellspacing="0" cellpadding="0"><tr>
	<td style="border: 0; padding: 0; text-align: left">Code sql :</td>
	<td style="border: 0; padding: 0; text-align: right"><a href="#" onclick="return ano_selectionnerCode(this);">Sélectionner tout</a> -
	<a href="#" onclick="return ano_etendreCode(this);">Visualiser dans une fenêtre à part</a></td></tr></table>
	<pre class="bbcode_code" style="height:204px;"><table cellspacing="0" cellpadding="0"><tr><td valign="top" width="33"><div style="border: 1px dashed gray; padding-left: 5px; padding-right: 5px; margin-right: 5px; text-align: right; font-family: monospace">1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br /></div></td><td valign="top"><pre style="margin: 0">   <span style="color: #0000ff;">WITH</span> CTE1 <span class="br0">&#40;</span>RG, C2, C3, C4, C5, C6<span class="br0">&#41;</span> <span style="color: #0000ff;">AS</span>      
       <span class="br0">&#40;</span> <span style="color: #0000ff;">SELECT</span> DENSE_RANK<span class="br0">&#40;</span><span class="br0">&#41;</span>                  
                   OVER <span class="br0">&#40;</span>PARTITION <span style="color: #0000ff;">BY</span> B7IDEN  
                         <span style="color: #0000ff;">ORDER</span> <span style="color: #0000ff;">BY</span> B8DTHR <span style="color: #0000ff;">DESC</span><span class="br0">&#41;</span>
              , B7IDEN                        
              , B7CPTE                        
              , B8SEQN                        
              , B8MONT                        
              , B8DTHR                        
         <span style="color: #0000ff;">FROM</span> TBB7                            
         <span style="color: #0000ff;">INNER</span> <span style="color: #0000ff;">JOIN</span> TBB8                      
           <span style="color: #0000ff;">ON</span>  B8IDEN = B7IDEN <span class="br0">&#41;</span>              
   <span style="color: #0000ff;">SELECT</span> C2, C3, C4, C5, C6                  
   <span style="color: #0000ff;">FROM</span> CTE1                                  
   <span style="color: #0000ff;">WHERE</span> RG=<span style="color: #cc66cc;">1</span>                                 
   ;</pre></td></tr></table></pre>
</div>Cette dernière méthode ne peut pas être utilisée avec MySQL* ou Access qui n'intègrent pas les fonctions OLAP<br />
*MySQL a intégré les fonctions OLAP dans la V8</blockquote>

]]></content:encoded>
			<dc:creator>escartefigue</dc:creator>
			<guid isPermaLink="true">https://www.developpez.net/forums/blogs/795608-escartefigue/b3239/selectionner-ligne-plus-recente-critere/</guid>
		</item>
	</channel>
</rss>
