<?xml version="1.0" encoding="iso-8859-1" standalone="yes" ?>
<rss version="2.0">
<channel>
<title>Business Intelligence et techniques avec Michel Preti - </title>
<description>Business Intelligence et techniques avec Michel Preti</description>
<link>https://www.michelpreti.com/faq</link>	<item>
		<title><![CDATA[Comment utiliser le resetSequence]]></title>
		<description><![CDATA[<p>
Si par exemple nous avons des ID qui doivent se remettrent occasionnellement à 0 dans un job, nous pouvons utiliser le resetSequence plutôt qu&#39;un compteur. 
</p>
<p>
Problème :  
</p>
<p>
1) Imaginons un tMap avec une colonne incluant une séquence : Numeric.sequence("s1",1,1)/2  
</p>
<p>
2) Cette séquence ne sera jamais remise à zéro à l&#39;intérieur du job, même si le tMap est appelé plusieurs fois (s&#39;il fait partie d&#39;une boucle par exemple).  
</p>
<p>
 
</p>
<p>
Solution : Placer simplement un tJava AVANT (au début de la boucle par exemple).
</p>
<p>
Placer par exemple le code suivant dedans : 
</p>
<p>
 Numeric.resetSequence("s1",1);  
</p>
]]></description>
		<link>https://www.michelpreti.com/faq/index.php?action=artikel&amp;cat=1&amp;id=125&amp;artlang=fr</link>
		<pubDate>Thu, 12 Jun 2014 07:34:00 GMT</pubDate>
	</item>
	<item>
		<title><![CDATA[Procédure pour lancer les stats sur un schéma ou une table]]></title>
		<description><![CDATA[<p>
Voici une procédure pour lancer les stats sur un schéma ou une table (avec ou sans partition). 
</p>
<p>
NB: 
</p>
<p>
Si la variable <strong>pTable </strong>est null, lancement des stats sur le schéma seulement. 
</p>
<p>
Si la variable <strong>pTable </strong>n&#39;est pas null et <strong>pPartition </strong>est null, lancement des stats sur la table complète.
</p>
<p>
Si la variable <strong>pTable </strong>n&#39;est pas null et <strong>pPartition </strong>n&#39;est pas null, lancement des stats sur la partition de la table.
</p>
<p>
 
</p>
<p>
CREATE OR REPLACE PROCEDURE test.prc_lancer_stats(pSchema VARCHAR2, pTable VARCHAR2 DEFAULT NULL, pPartition VARCHAR2 DEFAULT NULL) AS<br />
/*---------------------------------------------------------------------------<br />
NOM DE PROCEDURE :prc_lancer_stats<br />
DESCRIPTION      : Procédure qui permet de lancer les stats sur un schéma, une table ou une partition.<br />
PARAMETRES       : pSchema    : Nom du schéma, 
</p>
<p>
: pTable     : Nom de la table (OPTIONEL)<br />
: pPartition : Nom de la partition (OPTIONEL)<br />
CREATION         : 2014-02-20 : Michel Preti <br />
MODIFICATIONS    : --<br />
----------------------------------------------------------------------------*/<br />
BEGIN<br />
IF pTable IS NULL THEN <br />
-- Enlever un lock possible sur les statistiques du schéma <br />
SYS.DBMS_STATS.UNLOCK_SCHEMA_STATS(pSchema);<br />
-- Effacer les statistiques du schéma <br />
SYS.DBMS_STATS.DELETE_SCHEMA_STATS(pSchema);<br />
-- Lancer les statistiques du schéma <br />
SYS.DBMS_STATS.GATHER_SCHEMA_STATS(OWNNAME =&gt; pSchema, CASCADE =&gt; DBMS_STATS.AUTO_CASCADE, ESTIMATE_PERCENT =&gt; DBMS_STATS.AUTO_SAMPLE_SIZE, DEGREE =&gt; 4);<br />
ELSE <br />
-- Enlever un lock possible sur les statistiques de la table<br />
SYS.DBMS_STATS.UNLOCK_TABLE_STATS(pSchema, pTable);<br />
-- Effacer les statistiques de la table<br />
SYS.DBMS_STATS.DELETE_TABLE_STATS(pSchema, pTable);<br />
-- Lancer les statistiques de la table<br />
SYS.DBMS_STATS.GATHER_TABLE_STATS(OWNNAME =&gt; pSchema, TABNAME =&gt; pTable, PARTNAME =&gt; pPartition, CASCADE =&gt; DBMS_STATS.AUTO_CASCADE, ESTIMATE_PERCENT =&gt; DBMS_STATS.AUTO_SAMPLE_SIZE, DEGREE =&gt; 4);<br />
END IF; <br />
END PRC_LANCERSTATS; 
</p>
]]></description>
		<link>https://www.michelpreti.com/faq/index.php?action=artikel&amp;cat=2&amp;id=124&amp;artlang=fr</link>
		<pubDate>Wed, 30 Apr 2014 14:03:00 GMT</pubDate>
	</item>
	<item>
		<title><![CDATA[Lancer les stats Oracle depuis Talend]]></title>
		<description><![CDATA[<p>
Appel de statistiques sur un schéma Oracle depuis Talend : 
</p>
<p>
Par exemple, vous pourriez placer une variable de contexte: Oracle_Schema (valeur du schéma ex: "TEST") 
</p>
<p>
 
</p>
<p>
Puis, dans un tORacleRow, placer le code suivant :<br />
<br />
"BEGIN <br />
SYS.DBMS_STATS.UNLOCK_SCHEMA_STATS(&#39;" + context.Oracle_Schema + "&#39;); <br />
SYS.DBMS_STATS.DELETE_SCHEMA_STATS(&#39;" + context.Oracle_Schema + "&#39;); <br />
SYS.DBMS_STATS.GATHER_SCHEMA_STATS(OWNNAME =&gt; &#39;" + context.Oracle_Schema + "&#39;, CASCADE =&gt; DBMS_STATS.AUTO_CASCADE, ESTIMATE_PERCENT =&gt; DBMS_STATS.AUTO_SAMPLE_SIZE, DEGREE =&gt; 4); <br />
END; "<br />
</p>
]]></description>
		<link>https://www.michelpreti.com/faq/index.php?action=artikel&amp;cat=1&amp;id=123&amp;artlang=fr</link>
		<pubDate>Wed, 30 Apr 2014 13:07:00 GMT</pubDate>
	</item>
	<item>
		<title><![CDATA[Lancement des stats sur un schéma par procédure]]></title>
		<description><![CDATA[<p>
<u>Voici la procédure :  </u>
</p>
<p>
CREATE OR REPLACE PROCEDURE TEST.LANCER_STATS_SCHEMA(p_schema VARCHAR2)<br />
IS<br />
BEGIN <br />
    SYS.DBMS_STATS.UNLOCK_SCHEMA_STATS(p_schema); <br />
    SYS.DBMS_STATS.DELETE_SCHEMA_STATS(p_schema); <br />
    SYS.DBMS_STATS.GATHER_SCHEMA_STATS(OWNNAME =&gt; p_schema, CASCADE =&gt; DBMS_STATS.AUTO_CASCADE, ESTIMATE_PERCENT =&gt; DBMS_STATS.AUTO_SAMPLE_SIZE, DEGREE =&gt; 4); <br />
END; 
</p>
<p>
 
</p>
<p>
<u>Pour tester :  </u>
</p>
<p>
BEGIN <br />
 TEST.LANCER_STATS_SCHEMA(&#39;VENTE&#39;); <br />
END;<br />
</p>
]]></description>
		<link>https://www.michelpreti.com/faq/index.php?action=artikel&amp;cat=2&amp;id=122&amp;artlang=fr</link>
		<pubDate>Wed, 30 Apr 2014 13:00:00 GMT</pubDate>
	</item>
	<item>
		<title><![CDATA[Génération de chaînes et de nombres aléatoires]]></title>
		<description><![CDATA[<strong>1 - Génération d&#39;un nombre réel aléatoire pour un intervalle</strong><br />
SELECT dbms_random.value (100,200)<br />
FROM dual<br />
<br />
<strong>2 - Génération d&#39;un entier aléatoire pour un intervalle</strong><br />
SELECT trunc(dbms_random.value(0,100))<br />
FROM dual<br />
CONNECT BY level &lt;= 10<br />
<br />
<strong>3 - Génération d&#39;une chaîne de caractères</strong><br />
Format de chaîne possible : <br />
&#39;u&#39; ou &#39;U&#39; chaîne en majuscules.<br />
&#39;l&#39; ou &#39;L&#39; chaîne en minuscules.<br />
&#39;a&#39; ou &#39;A&#39; chaîne en majuscules et minuscules. <br />
&#39;x&#39; ou &#39;X&#39; chaîne en alpha-numérique en majuscules.<br />
&#39;p&#39; ou &#39;P&#39; chaîne de tout type de caractères.<br />
...avec la longueur de la chaîne à générer.<br />
<br />
Exemple de 5 chaînes de 20 caractères; pour chaque format <br />
SELECT dbms_random.string(&#39;U&#39;, 20) FROM dual<br />
UNION ALL<br />
SELECT dbms_random.string(&#39;l&#39;, 20) FROM dual<br />
UNION ALL<br />
SELECT dbms_random.string(&#39;A&#39;, 20) FROM dual<br />
UNION ALL<br />
SELECT dbms_random.string(&#39;X&#39;, 20) FROM dual<br />
UNION ALL<br />
SELECT dbms_random.string(&#39;P&#39;, 20) FROM dual<br />
<br />
<strong>4 - Génération d&#39;une date aléatoire</strong><br />
SELECT TO_DATE(&#39;01/01/14&#39;, &#39;DD/MM/RR&#39;) + TRUNC(dbms_random.value(0,365)) AS rnd<br />
FROM dual<br />
<br />
<strong>5 - Génération de données de tests aléatoires, pour insérer dans une table</strong><br />
Exemple ici avec une table fictive TEST.EMPLOYEE : <br />
<br />
5a--Création de la table<br />
CREATE TABLE TEST.EMPLOYEE ( <br />
idemployee  NUMBER(15), <br />
txnom       VARCHAR2(100), <br />
txprenom    VARCHAR2(100), <br />
dtentree    DATE, <br />
mtsalaire   NUMBER(12,2)); <br />
<br />
5b--Création d&#39;une séquence TEST.SEQ_EMPLOYEE<br />
CREATE SEQUENCE TEST.SEQ_EMPLOYEE INCREMENT BY 1 MAXVALUE 999999999999999 MINVALUE 1 NOCACHE; <br />
<br />
5c--Grant (si nécessaire) : <br />
GRANT SELECT, INSERT ON TEST.EMPLOYEE TO PUBLIC; <br />
GRANT SELECT ON TEST.SEQ_EMPLOYEE TO PUBLIC; <br />
<br />
5d--Insertions de 100 ligne de données aléatoires : <br />
INSERT INTO TEST.EMPLOYEE (idemployee, txnom, txprenom, dtentree, mtsalaire)<br />
SELECT<br />
TEST.SEQ_EMPLOYEE.NEXTVAL, <br />
dbms_random.string(&#39;A&#39;, trunc(dbms_random.value(5, 30))),<br />
dbms_random.string(&#39;A&#39;, trunc(dbms_random.value(5, 30))),<br />
to_date(&#39;01/01/1980&#39;, &#39;DD/MM/YY&#39;) + trunc(dbms_random.value(0, (20*365))),<br />
dbms_random.value(1500, 6500)<br />
FROM dual<br />
CONNECT BY LEVEL &lt; 100;<br />
<br />
5e-- Contrôller ensuite les données :<br />
SELECT * FROM TEST.EMPLOYEE;
]]></description>
		<link>https://www.michelpreti.com/faq/index.php?action=artikel&amp;cat=2&amp;id=121&amp;artlang=fr</link>
		<pubDate>Tue, 29 Apr 2014 08:55:00 GMT</pubDate>
	</item>
</channel>
</rss>