<?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>Le blog de jsd03 &#187; procédure</title>
	<atom:link href="https://blog.developpez.com/jsd03/ptag/procedure/feed" rel="self" type="application/rss+xml" />
	<link>https://blog.developpez.com/jsd03</link>
	<description></description>
	<lastBuildDate>Mon, 07 Nov 2016 14:34:06 +0000</lastBuildDate>
	<language>fr-FR</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>https://wordpress.org/?v=4.1.42</generator>
	<item>
		<title>Export des procédures/fonctions/package d&#8217;une instance Oracle</title>
		<link>https://blog.developpez.com/jsd03/p11928/bdd/export-des-proceduresfonctionspackage-dune-instance-oracle</link>
		<comments>https://blog.developpez.com/jsd03/p11928/bdd/export-des-proceduresfonctionspackage-dune-instance-oracle#comments</comments>
		<pubDate>Fri, 19 Apr 2013 09:20:58 +0000</pubDate>
		<dc:creator><![CDATA[jsd03]]></dc:creator>
				<category><![CDATA[Base de données]]></category>
		<category><![CDATA[Oracle]]></category>
		<category><![CDATA[PL/SQL]]></category>
		<category><![CDATA[export]]></category>
		<category><![CDATA[fonction]]></category>
		<category><![CDATA[package]]></category>
		<category><![CDATA[procédure]]></category>

		<guid isPermaLink="false">http://blog.developpez.com/jsd03/?p=84</guid>
		<description><![CDATA[Après avoir galéré plusieurs heures afin de pouvoir exporter facilement chaque procédure / package / fonction d&#8217;une instance Oracle dans un fichier il me semblait nécessaire de créer un post sur le sujet. Première chose à savoir : où se &#8230; <a href="https://blog.developpez.com/jsd03/p11928/bdd/export-des-proceduresfonctionspackage-dune-instance-oracle">Lire la suite <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>Après avoir galéré plusieurs heures afin de pouvoir exporter facilement chaque procédure / package / fonction d&rsquo;une instance Oracle dans un fichier il me semblait nécessaire de créer un post sur le sujet.</p>
<p>Première chose à savoir : où se trouve le contenu de ces objets ?<br />
2 réponse à cette question :</p>
<ul>
<li>dans la table <strong>USER_SOURCE</strong> pour le schéma courant</li>
<li>dans la table <strong>DBA_SOURCE</strong> pour le schéma SYSTEM afin d&rsquo;avoir un listing exhaustif de tous les objets</li>
</ul>
<p><span id="more-84"></span></p>
<p>Au regard de ces tables il est donc possible de filtrer sur un schéma et/ou des types d&rsquo;objets en particulier.</p>
<p>Deuxième élément à connaitre : comment concaténer le contenu du résultat du SELECT sur la table USER_SOURCE ou DBA_SOURCE ?<br />
Réponse : utiliser la fonction <strong>DBMS_METADATA.GET_DDL()</strong> qui prend en paramètre le type d&rsquo;objet, le nom de l&rsquo;objet et schéma.</p>
<p>Troisième et dernier élément : comment écrire tout cela dans un fichier ?<br />
Réponse : en utilisant non pas les procédures du package UTL_FILE comme PUT_RAW() (comme j&rsquo;avais tenté de le faire en premier lieu&#8230;) mais en utilisant la procédure <strong>dbms_advisor.create_file()</strong> qui prend en paramètre le contenu à écrire (un CLOB), le dossier cible et le nom du fichier.</p>
<p>A savoir que UTL_FILE.PUT_RAW() ne peut écrire un fichier plus gros que 32766Byte&#8230; d&rsquo;où l&rsquo;utilisation de dbms_advisor.</p>
<p>Un pré-requis également à connaitre : il faut que le compte SYSTEM puisse écrire dans le DIRECTORY cible.</p>
<p>Et voilà donc le résultat :</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:500px;height:300px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>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 /></div></td><td><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">DECLARE<br />
<br />
&nbsp; &nbsp; vContent CLOB;<br />
&nbsp; &nbsp; vFile utl_file.file_type;<br />
&nbsp; &nbsp; vCurrentUser VARCHAR2(30) DEFAULT user;<br />
&nbsp; &nbsp; vDirectoryName VARCHAR2(255) default 'DATA_PUMP_DIR';<br />
&nbsp; &nbsp; vFileName VARCHAR2(1000);<br />
<br />
BEGIN<br />
<br />
&nbsp; &nbsp; FOR C1 IN (<br />
&nbsp; &nbsp; &nbsp; &nbsp; SELECT distinct OWNER, NAME, TYPE<br />
&nbsp; &nbsp; &nbsp; &nbsp; FROM DBA_SOURCE<br />
&nbsp; &nbsp; &nbsp; &nbsp; WHERE OWNER NOT IN ('SYS', 'SYSTEM', 'OUTLN', 'DBSNMP', 'XDB', 'EXFSYS', 'CTXSYS', 'MDSYS', 'ORDSYS', 'OLAPSYS', 'WMSYS', 'SYSMAN', 'ORDPLUGINS')<br />
&nbsp; &nbsp; &nbsp; &nbsp; AND OWNER &nbsp;NOT LIKE 'APEX%'<br />
&nbsp; &nbsp; &nbsp; &nbsp; AND TYPE IN ('PACKAGE', 'FUNCTION', 'PROCEDURE')<br />
&nbsp; &nbsp; ) LOOP<br />
<br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; vCurrentUser := C1.OWNER;<br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; SELECT DBMS_METADATA.GET_DDL(C1.TYPE, C1.NAME, vCurrentUser)<br />
&nbsp; &nbsp; &nbsp; &nbsp; INTO vContent <br />
&nbsp; &nbsp; &nbsp; &nbsp; FROM dual;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; vFileName := vCurrentUser || '.' || C1.TYPE || '.' || C1.NAME || '.sql';<br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; BEGIN<br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; dbms_advisor.create_file(vContent, vDirectoryName, vFileName);<br />
&nbsp; &nbsp; &nbsp;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; EXCEPTION WHEN OTHERS THEN<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; DBMS_OUTPUT.PUT_LINE('Erreur lors de l''écriture dans le fichier ' || vFileName);<br />
&nbsp; &nbsp; &nbsp;<br />
&nbsp; &nbsp; &nbsp; &nbsp; END;<br />
<br />
&nbsp; &nbsp; END LOOP;<br />
<br />
END;</div></td></tr></tbody></table></div>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
