
<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Waanser &#187; curseurs</title>
	<atom:link href="http://www.waanser.com/tag/curseurs/feed" rel="self" type="application/rss+xml" />
	<link>http://www.waanser.com</link>
	<description>Un blog utilisant WordPress</description>
	<lastBuildDate>Wed, 07 Jul 2010 21:54:44 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>les curseurs en pl/sql</title>
		<link>http://www.waanser.com/pl-sql/110-les-curseurs-en-plsql.html</link>
		<comments>http://www.waanser.com/pl-sql/110-les-curseurs-en-plsql.html#comments</comments>
		<pubDate>Mon, 29 Dec 2008 16:46:08 +0000</pubDate>
		<dc:creator>roul</dc:creator>
				<category><![CDATA[PL/SQL]]></category>
		<category><![CDATA[curseurs]]></category>

		<guid isPermaLink="false">http://www.waanser.com/?p=110</guid>
		<description><![CDATA[Un des plus grandes forces du langage pl/sql, c&#8217;est bien les curseurs. En effet il permet de récupérer et de traiter le données de la base d&#8217;oracle ligne par ligne. Les types de curseurs · Le curseur explicite Le curseur explicite est géré pas l&#8217;utilisateur (sur un SELECT). · Le curseur implicite Le curseur implicite [...]]]></description>
			<content:encoded><![CDATA[<p>Un des plus grandes forces du langage pl/sql, c&#8217;est bien les curseurs. En effet il permet de récupérer et de traiter le données de la base d&#8217;oracle ligne par ligne.<br />
<span id="more-110"></span></p>
<h2>Les types de curseurs</h2>
<p><strong>·      Le curseur explicite</strong><br />
 Le curseur explicite est géré pas l&#8217;utilisateur (sur un SELECT).</p>
<p><strong>·      Le curseur implicite</strong><br />
Le curseur implicite est généré et géré par le noyau.</p>
<h2>l&#8217;utilisation du curseur pl/sql</h2>
<p>On peut diviser le vie d&#8217;un curseur en 4 parties</p>
<ul>
<li>déclaration (DECLARE)</li>
<li>ouverture (OPEN)</li>
<li>utilisation (FETCH)</li>
<li>fermeture (CLOSE)</li>
</ul>
<h2>Déclaration d&#8217;un curseur</h2>
<p>CURSOR nom_curseur IS ordre_select</p>
<p>Exemple:</p>
<pre class="brush: sql">
DECLARE
CURSOR cUtilisateur IS SELECT NOM, PRENOM FROM UTILISATEUR;
</pre>
<h2>Ouverture d&#8217;un curseur</h2>
<p>OPEN nom_curseur</p>
<p>L&#8217;ouverture du curseur engendre l&#8217;exécution de la requête.<br />
Il faut savoir aussi que le curseur se place automatiquement à la première ligne du tableau.</p>
<div id="attachment_126" class="wp-caption alignnone" style="width: 279px"><img src="http://media.waanser.com/2008/12/exemple-curseur.png" alt="exemple-curseur-pl-sql" title="exemple-curseur-pl-sql" width="269" height="207" class="size-full wp-image-126" /><p class="wp-caption-text">exemple-curseur-pl-sql</p></div>
<p>Dans cet illustration on voit que le curseur est positionné dans le premier enregistrement qui est &laquo;&nbsp;dupond jean&nbsp;&raquo;.</p>
<p>Voici comment on ouvre un curseur en pl/sql :</p>
<pre class="brush: sql">
DECLARE
CURSOR cUtilisateur IS SELECT NOM, PRENOM FROM UTILISATEUR;
BEGIN
OPEN cUtilisateur;
...
CLOSE cUtilisateur;
END;
/
</pre>
<h2> Fetch </h2>
<p>La commande Fetch permet de lire la ligne en cours (la ligne ou est positionné le curseur).<br />
Après la lecture de la ligne, il positionne automatiquement le curseur à la ligne suivante.<br />
Attention, si le curseur est en fin de tableau, la commande Fetch ne quitte pas automatiquement le tableau,<br />
il reste &laquo;&nbsp;bloqué&nbsp;&raquo; sur le dernier enregistrement.</p>
<p>Voici la syntaxe :</p>
<p>Pour parcourir un tableau il faut ainsi utiliser une boucle sur la commande fetch<br />
 FETCH nom_curseur INTO ligne_tableau;</p>
<p>ligne_tableau doit être une variable dynamique à partir du curseur:<br />
voici la syntaxe :</p>
<p>ligne_tableau nom_curseur%ROWTYPE; </p>
<pre class="brush: sql">
DECLARE
CURSOR cUtilisateur IS SELECT NOM, PRENOM FROM UTILISATEUR;
  lUtilisateur cUtilisateur%ROWTYPE;
BEGIN
OPEN cUtilisateur;
  LOOP
  FETCH cUtilisateur INTO lUtilisateur;
  EXIT WHEN cUtilisateur%NOTFOUND;
   DBMS_OUTPUT.PUT_LINE( lUtilisateur.NAME ) ;
  END LOOP;
CLOSE cUtilisateur;
END;
/
</pre>
<h2>Attributs</h2>
<p>On peux vérifier l&#8217;état d&#8217;un curseur grasse à ces attributs :</p>
<p><strong>%FOUND</strong><br />
vérifie si le fetch renvoi bien une ligne<br />
<strong>%NOTFOUND</strong><br />
vérifie si le fetch ne renvoi aucune une ligne<br />
<strong>%ROWCOUNT</strong><br />
compte le nombre de ligne que le curseur à lu<br />
<strong>%ISOPEN</strong><br />
vérifie si le curseur est ouvert</p>
]]></content:encoded>
			<wfw:commentRss>http://www.waanser.com/pl-sql/110-les-curseurs-en-plsql.html/feed</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
	</channel>
</rss>

