<?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/"
	xmlns:creativeCommons="http://backend.userland.com/creativeCommonsRssModule"
>

<channel>
	<title>Templarios de San Oracle &#187; Scripts</title>
	<atom:link href="http://www.tsoracle.com/wparchives/category/scripts/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.tsoracle.com</link>
	<description>Diario de un Templario de San Oracle</description>
	<lastBuildDate>Wed, 30 Sep 2009 14:09:14 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.4</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<creativeCommons:license>http://creativecommons.org/licenses/by/3.0/</creativeCommons:license>
		<item>
		<title>Ordenación de resultados en castellano</title>
		<link>http://www.tsoracle.com/wparchives/2009/06/16/ordenacion-de-resultados-en-castellano/</link>
		<comments>http://www.tsoracle.com/wparchives/2009/06/16/ordenacion-de-resultados-en-castellano/#comments</comments>
		<pubDate>Tue, 16 Jun 2009 15:04:13 +0000</pubDate>
		<dc:creator>Sir Ragnar</dc:creator>
				<category><![CDATA[Scripts]]></category>
		<category><![CDATA[NLS_PARAMETER]]></category>

		<guid isPermaLink="false">http://www.tsoracle.com/?p=100</guid>
		<description><![CDATA[Acabo de leer en Oracle Notepad un art&#237;culo muy interesante sobre la ordenaci&#243;n de resultados en castellano. Nunca pens&#233; que la ordenaci&#243;n ser&#237;a as&#237;. Supongo que porque en todas las bases de datos Oracle con las que he trabajado ten&#237;an el par&#225;metro NLS_SORT fijado en espa&#241;ol.
Para comprobar con qu&#233; ordenaci&#243;n por defecto est&#225; configurada nuestra [...]]]></description>
			<content:encoded><![CDATA[<p>Acabo de leer en <a href="http://oraclenotepad.blogspot.com/2009/06/ordenar-resultados-por-el-alfabeto.html" rel="external" title="Ordenar resultados por el alfabeto castellano">Oracle Notepad</a> un art&iacute;culo muy interesante sobre la ordenaci&oacute;n de resultados en castellano. Nunca pens&eacute; que la ordenaci&oacute;n ser&iacute;a as&iacute;. Supongo que porque en todas las bases de datos Oracle con las que he trabajado ten&iacute;an el par&aacute;metro <em>NLS_SORT</em> fijado en espa&ntilde;ol.</p>
<p>Para comprobar con qu&eacute; ordenaci&oacute;n por defecto est&aacute; configurada nuestra base de datos basta con hacer una select de la tabla <em>NLS_PARAMETER</em>:</p>

<div class="wp_syntax"><div class="code"><pre class="sql" style="font-family:monospace;">SQL<span style="color: #66cc66;">&gt;</span> <span style="color: #993333; font-weight: bold;">SELECT</span> <span style="color: #66cc66;">*</span> <span style="color: #993333; font-weight: bold;">FROM</span> NLS_DATABASE_PARAMETERS;
&nbsp;
PARAMETER                      VALUE
<span style="color: #808080; font-style: italic;">------------------------------ ----------------------------------------</span>
NLS_CSMIG_SCHEMA_VERSION       <span style="color: #cc66cc;">5</span>
NLS_LANGUAGE                   SPANISH
NLS_TERRITORY                  SPAIN
NLS_CURRENCY                   ?
NLS_ISO_CURRENCY               SPAIN
NLS_NUMERIC_CHARACTERS         <span style="color: #66cc66;">,.</span>
NLS_CHARACTERSET               WE8ISO8859P15
NLS_CALENDAR                   GREGORIAN
NLS_DATE_FORMAT                DD<span style="color: #66cc66;">/</span>MM<span style="color: #66cc66;">/</span>RR
NLS_DATE_LANGUAGE              SPANISH
NLS_SORT                       SPANISH
NLS_TIME_FORMAT                HH24:MI:SSXFF
NLS_TIMESTAMP_FORMAT           DD<span style="color: #66cc66;">/</span>MM<span style="color: #66cc66;">/</span>RR HH24:MI:SSXFF
NLS_TIME_TZ_FORMAT             HH24:MI:SSXFF TZR
NLS_TIMESTAMP_TZ_FORMAT        DD<span style="color: #66cc66;">/</span>MM<span style="color: #66cc66;">/</span>RR HH24:MI:SSXFF TZR
NLS_DUAL_CURRENCY              ?
NLS_COMP                       <span style="color: #993333; font-weight: bold;">BINARY</span>
NLS_LENGTH_SEMANTICS           BYTE
NLS_NCHAR_CHARACTERSET         AL16UTF16
NLS_NCHAR_CONV_EXCP            FALSE
NLS_RDBMS_VERSION              10<span style="color: #66cc66;">.</span>2<span style="color: #66cc66;">.</span>0<span style="color: #66cc66;">.</span>4<span style="color: #66cc66;">.</span>0</pre></div></div>

]]></content:encoded>
			<wfw:commentRss>http://www.tsoracle.com/wparchives/2009/06/16/ordenacion-de-resultados-en-castellano/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	<creativeCommons:license>http://creativecommons.org/licenses/by/3.0/</creativeCommons:license>
	</item>
		<item>
		<title>Campos null con precisi&#243;n en vistas</title>
		<link>http://www.tsoracle.com/wparchives/2008/01/25/campos-null-con-precisin-en-vistas/</link>
		<comments>http://www.tsoracle.com/wparchives/2008/01/25/campos-null-con-precisin-en-vistas/#comments</comments>
		<pubDate>Fri, 25 Jan 2008 13:38:30 +0000</pubDate>
		<dc:creator>Sir Ragnar</dc:creator>
				<category><![CDATA[Oracle PL/SQL]]></category>
		<category><![CDATA[Scripts]]></category>
		<category><![CDATA[cast]]></category>
		<category><![CDATA[funcion]]></category>
		<category><![CDATA[procedimiento]]></category>
		<category><![CDATA[sql]]></category>

		<guid isPermaLink="false">http://www.tsoracle.com/wparchives/2008/01/25/campos-null-con-precisin-en-vistas/</guid>
		<description><![CDATA[Muchas veces he necesitado crear una vista para sustituir una antigua tabla. En ocasiones he tenido que mantener en la vista una columna que ya no existe pero que debo dejar por alg&#250;n motivo. Lo que hago es definir la columna como &#8220;Funci&#243;n(NULL) AS NOMBRE_COLUMNA&#8221;. Si es VARCHAR2 pongo directamente NULL. Si quiero que sea [...]]]></description>
			<content:encoded><![CDATA[<p>Muchas veces he necesitado crear una vista para sustituir una antigua tabla. En ocasiones he tenido que mantener en la vista una columna que ya no existe pero que debo dejar por alg&uacute;n motivo. Lo que hago es definir la columna como <em>&#8220;Funci&oacute;n(NULL) AS NOMBRE_COLUMNA&#8221;</em>. Si es VARCHAR2 pongo directamente NULL. Si quiero que sea un number <em>TO_NUMBER(NULL)</em> y si es una fecha <em>TO_DATE(NULL)</em>. Por ejemplo:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
</pre></td><td class="code"><pre class="plsql" style="font-family:monospace;"><span style="color: #00F;">CREATE</span> <span style="color: #00F;">OR</span> <span style="color: #000;">REPLACE</span> <span style="color: #00F;">VIEW</span> CAMPOS_NULOS <span style="color: #00F;">AS</span><span style="color: #00F;">&#40;</span>
  <span style="color: #00F;">SELECT</span> <span style="color: #00F;">NULL</span>              <span style="color: #00F;">AS</span> CADENA_VACIA<span style="color: #00F;">,</span>
         <span style="color: #000;">TO_NUMBER</span><span style="color: #00F;">&#40;</span> <span style="color: #00F;">NULL</span> <span style="color: #00F;">&#41;</span> <span style="color: #00F;">AS</span> NUMERO_VACIO<span style="color: #00F;">,</span>
         <span style="color: #000;">TO_DATE</span><span style="color: #00F;">&#40;</span> <span style="color: #00F;">NULL</span> <span style="color: #00F;">&#41;</span>   <span style="color: #00F;">AS</span> FECHA_VACIA
  <span style="color: #00F;">FROM</span> DUAL <span style="color: #00F;">&#41;</span>
<span style="color: #00F;">/</span></pre></td></tr></table></div>

<p>Si hacemos un desc:</p>

<div class="wp_syntax"><div class="code"><pre class="shell" style="font-family:monospace;">SQL&gt; DESC CAMPOS_NULOS
 Nombre        ¿Nulo?   Tipo
 ------------- -------- ----------------------------
 CADENA_VACIA           VARCHAR2
 NUMERO_VACIO           NUMBER
 FECHA_VACIA            DATE</pre></div></div>

<p>El &uacute;nico problema, como puede verse en el ejemplo, es que perd&iacute;a la precisi&oacute;n. <span id="more-93"></span>A ra&iacute;z de una <a href="http://asktom.oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID:22032216531459" title="Ask Tom: Creating Materialized Views" target="_blank">respuesta del semidiox Tom</a> he conocido el milagroso <em>CAST</em>. Se le puede poner precisi&oacute;n y tipo a la columa haciendo un <em>&#8220;CAST( NULL AS TIPO(PRECISION) )&#8221;</em>:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
</pre></td><td class="code"><pre class="plsql" style="font-family:monospace;"><span style="color: #00F;">CREATE</span> <span style="color: #00F;">OR</span> <span style="color: #000;">REPLACE</span> <span style="color: #00F;">VIEW</span> CAMPOS_NULOS <span style="color: #00F;">AS</span><span style="color: #00F;">&#40;</span>
  <span style="color: #00F;">SELECT</span> <span style="color: #000;">CAST</span><span style="color: #00F;">&#40;</span> <span style="color: #00F;">NULL</span> <span style="color: #00F;">AS</span> <span style="color: #00F;">VARCHAR2</span><span style="color: #00F;">&#40;</span><span style="color: #800;">20</span><span style="color: #00F;">&#41;</span> <span style="color: #00F;">&#41;</span> <span style="color: #00F;">AS</span> CADENA_VACIA<span style="color: #00F;">,</span>
         <span style="color: #000;">CAST</span><span style="color: #00F;">&#40;</span> <span style="color: #00F;">NULL</span> <span style="color: #00F;">AS</span> <span style="color: #00F;">NUMBER</span><span style="color: #00F;">&#40;</span><span style="color: #800;">4</span><span style="color: #00F;">&#41;</span> <span style="color: #00F;">&#41;</span>    <span style="color: #00F;">AS</span> NUMERO_VACIO<span style="color: #00F;">,</span>
         <span style="color: #000;">CAST</span><span style="color: #00F;">&#40;</span> <span style="color: #00F;">NULL</span> <span style="color: #00F;">AS</span> <span style="color: #00F;">DATE</span> <span style="color: #00F;">&#41;</span>         <span style="color: #00F;">AS</span> FECHA_VACIA
  <span style="color: #00F;">FROM</span> DUAL <span style="color: #00F;">&#41;</span>
<span style="color: #00F;">/</span></pre></td></tr></table></div>

<p>Y haciendo un desc tenemos que:</p>

<div class="wp_syntax"><div class="code"><pre class="shell" style="font-family:monospace;">SQL&gt; DESC CAMPOS_NULOS
 Nombre        ¿Nulo?   Tipo
 ------------- -------- ----------------------------
 CADENA_VACIA           VARCHAR2(20)
 NUMERO_VACIO           NUMBER(4)
 FECHA_VACIA            DATE</pre></div></div>

<p>En la <a href="http://download.oracle.com/docs/cd/B19306_01/server.102/b14200/functions016.htm" target="_blank" title="CAST Syntax">Documentaci&oacute;n oficial</a> se explica la manera de uso y m&aacute;s ejemplos.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.tsoracle.com/wparchives/2008/01/25/campos-null-con-precisin-en-vistas/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	<creativeCommons:license>http://creativecommons.org/licenses/by/3.0/</creativeCommons:license>
	</item>
		<item>
		<title>Uso de expresiones regulares con Oracle</title>
		<link>http://www.tsoracle.com/wparchives/2007/08/24/uso-de-expresiones-regulares-con-oracle/</link>
		<comments>http://www.tsoracle.com/wparchives/2007/08/24/uso-de-expresiones-regulares-con-oracle/#comments</comments>
		<pubDate>Fri, 24 Aug 2007 15:27:10 +0000</pubDate>
		<dc:creator>Sir Ragnar</dc:creator>
				<category><![CDATA[Oracle PL/SQL]]></category>
		<category><![CDATA[Scripts]]></category>

		<guid isPermaLink="false">http://www.tsoracle.com/wparchives/2007/08/24/uso-de-expresiones-regulares-con-oracle/</guid>
		<description><![CDATA[Muchas veces necesito saber qu&#233; registros de una tabla tienen valores no num&#233;ricos en un campo varchar. Normalmente me hago una funci&#243;n en un paquete y la utilizo en la select que toque:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
FUNCTION esCadenaNumerica&#40; vCadena VARCHAR2 &#41; RETURN VARCHAR2 IS 
  ------------
  -- Variables
  ------------
  nTonta NUMBER;
BEGIN 
  nTonta := [...]]]></description>
			<content:encoded><![CDATA[<p>Muchas veces necesito saber qu&eacute; registros de una tabla tienen valores no num&eacute;ricos en un campo varchar. Normalmente me hago una funci&oacute;n en un paquete y la utilizo en la select que toque:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
</pre></td><td class="code"><pre class="plsql" style="font-family:monospace;"><span style="color: #00F;">FUNCTION</span> esCadenaNumerica<span style="color: #00F;">&#40;</span> vCadena <span style="color: #00F;">VARCHAR2</span> <span style="color: #00F;">&#41;</span> <span style="color: #00F;">RETURN</span> <span style="color: #00F;">VARCHAR2</span> <span style="color: #00F;">IS</span> 
  <span style="color: #080; font-style: italic;">------------</span>
  <span style="color: #080; font-style: italic;">-- Variables</span>
  <span style="color: #080; font-style: italic;">------------</span>
  nTonta <span style="color: #00F;">NUMBER</span><span style="color: #00F;">;</span>
<span style="color: #00F;">BEGIN</span> 
  nTonta <span style="color: #00F;">:=</span> <span style="color: #000;">TO_NUMBER</span><span style="color: #00F;">&#40;</span> vCadena <span style="color: #00F;">&#41;</span><span style="color: #00F;">;</span>
&nbsp;
  <span style="color: #080; font-style: italic;">-- Si llego hasta aquí es que el número es válido.</span>
  <span style="color: #00F;">RETURN</span> <span style="color: #F00;">'TRUE'</span><span style="color: #00F;">;</span>
<span style="color: #00F;">EXCEPTION</span>
  <span style="color: #00F;">WHEN</span> <span style="color: #F00;">VALUE_ERROR</span> <span style="color: #00F;">THEN</span>
    <span style="color: #080; font-style: italic;">-- El número no es válido.</span>
    <span style="color: #00F;">RETURN</span> <span style="color: #F00;">'FALSE'</span><span style="color: #00F;">;</span>
<span style="color: #00F;">END</span><span style="color: #00F;">;</span></pre></td></tr></table></div>

<p><span id="more-67"></span><br />
La funci&oacute;n devuelve un varchar para poder ser usada en una select. Esta select me dar&iacute;a los valores no num&eacute;ricos de una columna:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
</pre></td><td class="code"><pre class="sql" style="font-family:monospace;"><span style="color: #993333; font-weight: bold;">SELECT</span> VVALOR
<span style="color: #993333; font-weight: bold;">FROM</span>   TABLA
<span style="color: #993333; font-weight: bold;">WHERE</span>  NombrePaquete<span style="color: #66cc66;">.</span>esCadenaNumerica<span style="color: #66cc66;">&#40;</span> VVALOR <span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">=</span> <span style="color: #ff0000;">'FALSE'</span></pre></td></tr></table></div>

<p>Por supuesto, la funci&oacute;n podr&iacute;a ser m&aacute;s rica agreg&aacute;ndole par&aacute;metros para una m&aacute;scara de conversi&oacute;n o para pedir tambi&eacute;n la precisi&oacute;n.<br />
El caso es que me ha hecho falta buscar valores no num&eacute;ricos en una tabla en un esquema en el que no tengo permiso para crear ni funciones ni procedimientos. Podr&iacute;a haber optado por hacer un bloque de pl/sql an&oacute;nimo, pero he preferido buscar algo m&aacute;s directo y lo he encontrado. Las <em><a href="http://www.amk.ca/python/howto/regex/" target="_blank" title="Regular Expression HOWTO">expresiones regulares</a></em> est&aacute;n disponibles en la 10g y permiten hacer b&uacute;squedas de una manera parecida al like pero m&aacute;s potente. Es algo bastante m&aacute;s com&uacute;n en el mundo java pero tambi&eacute;n est&aacute; disponible para los <em>plsqleros</em> a trav&eacute;s de la funci&oacute;n <em>REGEXP_LIKE</em>. Est&aacute; bien explicado en este art&iacute;culo que he encontrado: <a href="http://www.databasejournal.com/features/oracle/article.php/3501826" target="_blank" title="Oracle and Regular Expressions">Oracle and Regular Expressions</a>.<br />
Por ejemplo, esta select me saca los valores de una columna que no son n&uacute;meros enteros:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
</pre></td><td class="code"><pre class="sql" style="font-family:monospace;"><span style="color: #993333; font-weight: bold;">SELECT</span> VVALOR
<span style="color: #993333; font-weight: bold;">FROM</span>   TABLA
<span style="color: #993333; font-weight: bold;">WHERE</span>  REGEXP_LIKE<span style="color: #66cc66;">&#40;</span> VVALOR<span style="color: #66cc66;">,</span> <span style="color: #ff0000;">'[^0-9]'</span><span style="color: #66cc66;">&#41;</span>
<span style="color: #66cc66;">/</span></pre></td></tr></table></div>

<p>Además de permitir búsquedas, también se pueden hacer potentes <em>replaces</em> y <em>substrs</em>. Flipante. Este es un enlace en plan tip donde el autor se ha currado unas inserciones y un montón de sentencias de prueba: <a href="http://www.psoug.org/reference/regexp.html" target="_blank" title="Oracle Regular Expressions, version 10.2">Oracle Regular Expressions, versi&oacute;n 10.2</a>. En la wikipedia, como de costumbre, también está bien explicado: <a href="http://es.wikipedia.org/wiki/Expresi%C3%B3n_regular" target="_blank" title="Definici&oacute;n de expresi&oacute;n regular en la Wikipedia">Definici&oacute;n de expresi&oacute;n regular</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.tsoracle.com/wparchives/2007/08/24/uso-de-expresiones-regulares-con-oracle/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	<creativeCommons:license>http://creativecommons.org/licenses/by/3.0/</creativeCommons:license>
	</item>
		<item>
		<title>DDL de FKs que apuntan a una tabla</title>
		<link>http://www.tsoracle.com/wparchives/2007/07/26/ddl-de-fks-que-apuntan-a-una-tabla/</link>
		<comments>http://www.tsoracle.com/wparchives/2007/07/26/ddl-de-fks-que-apuntan-a-una-tabla/#comments</comments>
		<pubDate>Thu, 26 Jul 2007 17:08:32 +0000</pubDate>
		<dc:creator>Sir Ragnar</dc:creator>
				<category><![CDATA[Paquetes de utilidad]]></category>
		<category><![CDATA[Scripts]]></category>

		<guid isPermaLink="false">http://www.tsoracle.com/wparchives/2007/07/26/ddl-de-fks-que-apuntan-a-una-tabla/</guid>
		<description><![CDATA[Uniendo el script que obtiene las tablas que apuntan a una con la utilidad del todopoderoso paquete DMBS_METADATA me he hecho otro script que me obtiene el ddl de las claves for&#225;neas que apuntan a una tabla determinada. No s&#233; si me volver&#225; a hacer falta alg&#250;n d&#237;a pero por si acaso o por si [...]]]></description>
			<content:encoded><![CDATA[<p>Uniendo el script que obtiene las tablas que apuntan a una con la utilidad del todopoderoso paquete <em>DMBS_METADATA</em> me he hecho otro script que me obtiene el ddl de las claves for&aacute;neas que apuntan a una tabla determinada. <span id="more-64"></span>No s&eacute; si me volver&aacute; a hacer falta alg&uacute;n d&iacute;a pero por si acaso o por si a alguien m&aacute;s le interesa, aqu&iacute; est&aacute; el script:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
</pre></td><td class="code"><pre class="plsql" style="font-family:monospace;"><span style="color: #080; font-style: italic;">-- Script para obtener el ddl de la lista de claves foráneas que</span>
<span style="color: #080; font-style: italic;">-- referencian a una tabla</span>
<span style="color: #080; font-style: italic;">-- http://www.tsoracle.com</span>
<span style="color: #080; font-style: italic;">---------------</span>
<span style="color: #080; font-style: italic;">-- Sets varios</span>
<span style="color: #080; font-style: italic;">--------------</span>
<span style="color: #00F;">SET</span> VERIFY OFF
<span style="color: #00F;">SET</span> <span style="color: #00F;">LONG</span> <span style="color: #800;">5000</span>
<span style="color: #080; font-style: italic;">------------</span>
<span style="color: #080; font-style: italic;">-- Parámetros</span>
<span style="color: #080; font-style: italic;">------------</span>
ACCEPT propi PROMPT <span style="color: #F00;">&quot;Propietario (enter para usuario conectado): &quot;</span>
ACCEPT tabla PROMPT <span style="color: #F00;">&quot;Nombre de la tabla: &quot;</span>
BREAK <span style="color: #00F;">ON</span> TABLE_NAME
COLUMN DEFI FORMAT A120
<span style="color: #080; font-style: italic;">------------</span>
<span style="color: #080; font-style: italic;">-- Select</span>
<span style="color: #080; font-style: italic;">------------</span>
PROMPT Tablas que referencian a &amp;&amp;tabla
<span style="color: #00F;">SELECT</span> <span style="color: #00F;">DBMS_METADATA</span><span style="color: #00F;">.</span>get_DDL<span style="color: #00F;">&#40;</span> <span style="color: #F00;">'REF_CONSTRAINT'</span><span style="color: #00F;">,</span> 
                              r<span style="color: #00F;">.</span>CONSTRAINT_NAME<span style="color: #00F;">,</span> 
                              r<span style="color: #00F;">.</span>OWNER <span style="color: #00F;">&#41;</span> 
       DEFI
<span style="color: #00F;">FROM</span>   ALL_CONSTRAINTS T<span style="color: #00F;">,</span> ALL_CONSTRAINTS R
<span style="color: #00F;">WHERE</span>  T<span style="color: #00F;">.</span>OWNER      <span style="color: #00F;">=</span> <span style="color: #000;">NVL</span><span style="color: #00F;">&#40;</span> <span style="color: #000;">UPPER</span><span style="color: #00F;">&#40;</span> <span style="color: #F00;">'&amp;&amp;propi'</span> <span style="color: #00F;">&#41;</span><span style="color: #00F;">,</span> <span style="color: #000;">USER</span> <span style="color: #00F;">&#41;</span>
  <span style="color: #00F;">AND</span>  T<span style="color: #00F;">.</span>TABLE_NAME <span style="color: #00F;">=</span> <span style="color: #000;">UPPER</span><span style="color: #00F;">&#40;</span> <span style="color: #F00;">'&amp;&amp;tabla'</span> <span style="color: #00F;">&#41;</span>
  <span style="color: #00F;">AND</span>  T<span style="color: #00F;">.</span>CONSTRAINT_TYPE <span style="color: #00F;">IN</span> <span style="color: #00F;">&#40;</span> <span style="color: #F00;">'P'</span><span style="color: #00F;">,</span> <span style="color: #F00;">'U'</span> <span style="color: #00F;">&#41;</span> <span style="color: #080; font-style: italic;">-- Que sean pk o uk</span>
  <span style="color: #00F;">AND</span>  R<span style="color: #00F;">.</span>R_OWNER           <span style="color: #00F;">=</span> T<span style="color: #00F;">.</span>OWNER
  <span style="color: #00F;">AND</span>  R<span style="color: #00F;">.</span>R_CONSTRAINT_NAME <span style="color: #00F;">=</span> T<span style="color: #00F;">.</span>CONSTRAINT_NAME
  <span style="color: #00F;">AND</span>  R<span style="color: #00F;">.</span>CONSTRAINT_TYPE   <span style="color: #00F;">=</span> <span style="color: #F00;">'R'</span>         <span style="color: #080; font-style: italic;">-- Que sea una fk</span>
<span style="color: #00F;">ORDER</span> <span style="color: #00F;">BY</span> R<span style="color: #00F;">.</span>TABLE_NAME<span style="color: #00F;">,</span> R<span style="color: #00F;">.</span>CONSTRAINT_NAME
<span style="color: #00F;">/</span>
<span style="color: #080; font-style: italic;">---------------------</span>
<span style="color: #080; font-style: italic;">-- Restauro el verify</span>
<span style="color: #080; font-style: italic;">---------------------</span>
<span style="color: #00F;">SET</span> VERIFY <span style="color: #00F;">ON</span></pre></td></tr></table></div>

<p>S&eacute; que se nota que estoy flipao con el <em>dbms_metadata</em> pero es que no puedo creer que haya podido vivir tanto tiempo sin &eacute;l. La de r&iacute;os de c&oacute;digo que me podr&iacute;a haber ahorrado.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.tsoracle.com/wparchives/2007/07/26/ddl-de-fks-que-apuntan-a-una-tabla/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	<creativeCommons:license>http://creativecommons.org/licenses/by/3.0/</creativeCommons:license>
	</item>
		<item>
		<title>Consulta de tablas que apuntan a una</title>
		<link>http://www.tsoracle.com/wparchives/2007/07/25/consulta-de-tablas-que-apuntan-a-una/</link>
		<comments>http://www.tsoracle.com/wparchives/2007/07/25/consulta-de-tablas-que-apuntan-a-una/#comments</comments>
		<pubDate>Wed, 25 Jul 2007 14:10:06 +0000</pubDate>
		<dc:creator>Sir Ragnar</dc:creator>
				<category><![CDATA[Scripts]]></category>

		<guid isPermaLink="false">http://www.tsoracle.com/wparchives/2007/07/25/consulta-de-tablas-que-apuntan-a-una/</guid>
		<description><![CDATA[Este es un script para obtener un listado con las claves for&#225;neas que apuntan a la tabla que le pasan como par&#225;metro. Es &#250;til si tenemos la buena costumbre de nombrar las claves con alg&#250;n sufijo o prefijo que nos indiquen el tipo. Si no, ser&#237;a necesario agregar m&#225;s columnas a la select. Tambi&#233;n podr&#237;a [...]]]></description>
			<content:encoded><![CDATA[<p>Este es un script para obtener un listado con las claves for&aacute;neas que apuntan a la tabla que le pasan como par&aacute;metro. Es &uacute;til si tenemos la buena costumbre de nombrar las claves con alg&uacute;n sufijo o prefijo que nos indiquen el tipo. Si no, ser&iacute;a necesario agregar m&aacute;s columnas a la select.<span id="more-63"></span> Tambi&eacute;n podr&iacute;a interesar agregar una columna con el nombre del propietario de la clave for&aacute;nea.</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
</pre></td><td class="code"><pre class="plsql" style="font-family:monospace;"><span style="color: #080; font-style: italic;">-- Script para obtener la lista de claves foráneas que </span>
<span style="color: #080; font-style: italic;">-- referencian a una tabla</span>
<span style="color: #080; font-style: italic;">-- http://www.tsoracle.com</span>
<span style="color: #080; font-style: italic;">---------------</span>
<span style="color: #080; font-style: italic;">-- Sets varios</span>
<span style="color: #080; font-style: italic;">--------------</span>
<span style="color: #00F;">SET</span> VERIFY OFF
<span style="color: #080; font-style: italic;">------------</span>
<span style="color: #080; font-style: italic;">-- Parámetros</span>
<span style="color: #080; font-style: italic;">------------</span>
ACCEPT propi PROMPT <span style="color: #F00;">&quot;Propietario (enter para usuario conectado): &quot;</span>
ACCEPT tabla PROMPT <span style="color: #F00;">&quot;Nombre de la tabla: &quot;</span>
BREAK <span style="color: #00F;">ON</span> TABLE_NAME
<span style="color: #080; font-style: italic;">------------</span>
<span style="color: #080; font-style: italic;">-- Select</span>
<span style="color: #080; font-style: italic;">------------</span>
PROMPT Tablas que referencian a &amp;&amp;tabla
<span style="color: #00F;">SELECT</span> R<span style="color: #00F;">.</span>TABLE_NAME<span style="color: #00F;">,</span> R<span style="color: #00F;">.</span>CONSTRAINT_NAME<span style="color: #00F;">,</span>
       T<span style="color: #00F;">.</span>CONSTRAINT_NAME <span style="color: #00F;">AS</span> CLAVE_REFERENCIADA
<span style="color: #00F;">FROM</span>   ALL_CONSTRAINTS T<span style="color: #00F;">,</span> ALL_CONSTRAINTS R
<span style="color: #00F;">WHERE</span>  T<span style="color: #00F;">.</span>OWNER      <span style="color: #00F;">=</span> <span style="color: #000;">NVL</span><span style="color: #00F;">&#40;</span> <span style="color: #000;">UPPER</span><span style="color: #00F;">&#40;</span> <span style="color: #F00;">'&amp;&amp;propi'</span> <span style="color: #00F;">&#41;</span><span style="color: #00F;">,</span> <span style="color: #000;">USER</span> <span style="color: #00F;">&#41;</span> <span style="color: #080; font-style: italic;">-- El valor por defecto es el usuario conectado</span>
  <span style="color: #00F;">AND</span>  T<span style="color: #00F;">.</span>TABLE_NAME <span style="color: #00F;">=</span> <span style="color: #000;">UPPER</span><span style="color: #00F;">&#40;</span> <span style="color: #F00;">'&amp;&amp;tabla'</span> <span style="color: #00F;">&#41;</span>
  <span style="color: #00F;">AND</span>  T<span style="color: #00F;">.</span>CONSTRAINT_TYPE <span style="color: #00F;">IN</span> <span style="color: #00F;">&#40;</span> <span style="color: #F00;">'P'</span><span style="color: #00F;">,</span> <span style="color: #F00;">'U'</span> <span style="color: #00F;">&#41;</span> <span style="color: #080; font-style: italic;">-- Que sean pk o uk</span>
  <span style="color: #00F;">AND</span>  R<span style="color: #00F;">.</span>R_OWNER           <span style="color: #00F;">=</span> T<span style="color: #00F;">.</span>OWNER
  <span style="color: #00F;">AND</span>  R<span style="color: #00F;">.</span>R_CONSTRAINT_NAME <span style="color: #00F;">=</span> T<span style="color: #00F;">.</span>CONSTRAINT_NAME
  <span style="color: #00F;">AND</span>  R<span style="color: #00F;">.</span>CONSTRAINT_TYPE   <span style="color: #00F;">=</span> <span style="color: #F00;">'R'</span>         <span style="color: #080; font-style: italic;">-- Que sea una fk</span>
<span style="color: #00F;">ORDER</span> <span style="color: #00F;">BY</span> R<span style="color: #00F;">.</span>TABLE_NAME<span style="color: #00F;">,</span> R<span style="color: #00F;">.</span>CONSTRAINT_NAME
<span style="color: #00F;">/</span>
<span style="color: #080; font-style: italic;">---------------------</span>
<span style="color: #080; font-style: italic;">-- Restauro el verify</span>
<span style="color: #080; font-style: italic;">---------------------</span>
<span style="color: #00F;">SET</span> VERIFY <span style="color: #00F;">ON</span></pre></td></tr></table></div>

]]></content:encoded>
			<wfw:commentRss>http://www.tsoracle.com/wparchives/2007/07/25/consulta-de-tablas-que-apuntan-a-una/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	<creativeCommons:license>http://creativecommons.org/licenses/by/3.0/</creativeCommons:license>
	</item>
		<item>
		<title>Obtener ddl de permisos</title>
		<link>http://www.tsoracle.com/wparchives/2007/07/24/obtener-ddl-de-permisos/</link>
		<comments>http://www.tsoracle.com/wparchives/2007/07/24/obtener-ddl-de-permisos/#comments</comments>
		<pubDate>Tue, 24 Jul 2007 14:04:53 +0000</pubDate>
		<dc:creator>Sir Ragnar</dc:creator>
				<category><![CDATA[Paquetes de utilidad]]></category>
		<category><![CDATA[Scripts]]></category>

		<guid isPermaLink="false">http://www.tsoracle.com/wparchives/2007/07/24/obtener-ddl-de-permisos/</guid>
		<description><![CDATA[Otra funci&#243;n interesante del paquete DBMS_METADATA es get_Granted_DDL. Tal como su nombre sugiere, te devuelve el c&#243;digo ddl de los permisos que tenga el usuario que le pasas como par&#225;metro. En este caso le pasar&#237;amos dos par&#225;metros, el primero de los cuales es el tipo(a elegir entre AUDIT, DEFAULT_ROLE, OBJECT_GRANT, PROXY, ROLE_GRANT, SYSTEM_GRANT y TABLESPACE_QUOTA), [...]]]></description>
			<content:encoded><![CDATA[<p>Otra funci&oacute;n interesante del paquete <em>DBMS_METADATA</em> es <a href="http://download-west.oracle.com/docs/cd/B10501_01/appdev.920/a96612/d_metad2.htm#1031407" target="_blank" title="Funci&oacute;n DBMS_METADATA.get_Granted_DDL">get_Granted_DDL</a>. Tal como su nombre sugiere, te devuelve el c&oacute;digo ddl de los permisos que tenga el usuario que le pasas como par&aacute;metro. <span id="more-62"></span>En este caso le pasar&iacute;amos dos par&aacute;metros, el primero de los cuales es el tipo(a elegir entre <a href="http://download-west.oracle.com/docs/cd/B10501_01/appdev.920/a96612/d_metad2.htm#1031407" title="Lista de posibles valores para el primer par&aacute;metro de la funci&oacute;n get_granted_ddl" target="_blank">AUDIT, DEFAULT_ROLE, OBJECT_GRANT, PROXY, ROLE_GRANT, SYSTEM_GRANT y TABLESPACE_QUOTA</a>), el segundo es el usuario. Los otros par&aacute;metros pueden tomar los valores por defecto. Por ejemplo, la siguiente select nos dar&iacute;a el ddl de creaci&oacute;n de permisos de sistema para el viejo <em>Scott</em></p>

<div class="wp_syntax"><div class="code"><pre class="plsql" style="font-family:monospace;"><span style="color: #00F;">SET</span> <span style="color: #00F;">LONG</span> <span style="color: #800;">5000</span>
<span style="color: #00F;">SELECT</span> <span style="color: #00F;">DBMS_METADATA</span><span style="color: #00F;">.</span>GET_GRANTED_DDL<span style="color: #00F;">&#40;</span> <span style="color: #F00;">'SYSTEM_GRANT'</span><span style="color: #00F;">,</span> <span style="color: #F00;">'SCOTT'</span> <span style="color: #00F;">&#41;</span>
<span style="color: #00F;">FROM</span>   DUAL
<span style="color: #00F;">/</span></pre></div></div>

<p>Esta nos dar&iacute;a la de los objetos a los que tiene privilegios directamente, sin pasar por un rol:</p>

<div class="wp_syntax"><div class="code"><pre class="plsql" style="font-family:monospace;"><span style="color: #00F;">SET</span> <span style="color: #00F;">LONG</span> <span style="color: #800;">5000</span>
<span style="color: #00F;">SELECT</span> <span style="color: #00F;">DBMS_METADATA</span><span style="color: #00F;">.</span>GET_GRANTED_DDL<span style="color: #00F;">&#40;</span> <span style="color: #F00;">'OBJECT_GRANT'</span><span style="color: #00F;">,</span> <span style="color: #000;">USER</span> <span style="color: #00F;">&#41;</span> <span style="color: #00F;">AS</span> CPRIVILEGIO
<span style="color: #00F;">FROM</span>   DUAL
<span style="color: #00F;">/</span></pre></div></div>

<p>Para los otros posibles valores para el tipo, no he conseguido hacerlo funcionar. No s&eacute; si es que me faltan privilegios o que estoy haciendo algo mal (o las dos cosas a la vez).</p>
]]></content:encoded>
			<wfw:commentRss>http://www.tsoracle.com/wparchives/2007/07/24/obtener-ddl-de-permisos/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	<creativeCommons:license>http://creativecommons.org/licenses/by/3.0/</creativeCommons:license>
	</item>
		<item>
		<title>Script de descripción de tablas mejorado</title>
		<link>http://www.tsoracle.com/wparchives/2007/07/21/script-de-descripcion-de-tablas-mejorado/</link>
		<comments>http://www.tsoracle.com/wparchives/2007/07/21/script-de-descripcion-de-tablas-mejorado/#comments</comments>
		<pubDate>Fri, 20 Jul 2007 23:41:35 +0000</pubDate>
		<dc:creator>Sir Ragnar</dc:creator>
				<category><![CDATA[Scripts]]></category>

		<guid isPermaLink="false">http://www.tsoracle.com/wparchives/2007/07/21/script-de-descripcion-de-tablas-mejorado/</guid>
		<description><![CDATA[He introducido una mejora en el script que utilizo para describir tablas en el plus. En principio, tal como dije, me describe tablas del esquema en el que estoy. Esto lo hice as&#237; porque paso de estar todo el rato metiendo el nombre del usuario cuando, el 99,99% de los desc que hago son siempre [...]]]></description>
			<content:encoded><![CDATA[<p>He introducido una mejora en el <a href="http://www.tsoracle.com/wparchives/2004/05/09/descripcin-de-tablas/" target="_blank" title="Descripci&oacute;n de tablas">script</a> que utilizo para describir tablas en el plus. En principio, tal como dije, me describe tablas del esquema en el que estoy. Esto lo hice as&iacute; porque paso de estar todo el rato metiendo el nombre del usuario cuando, el 99,99% de los <em>desc</em> que hago son siempre de tablas o vistas del usuario con el que estoy conectado. Bueno, lo que he hecho es que el script se de cuenta de si lo que he escrito es un sin&oacute;nimo.<span id="more-59"></span> Y entonces da el cambiazo y describe en realidad la tabla a la que apunta el sin&oacute;nimo, aunque sea de otro esquema.</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
</pre></td><td class="code"><pre class="plsql" style="font-family:monospace;"><span style="color: #080; font-style: italic;">-- Script mejorado para obtener la descripción de una tabla o de </span>
<span style="color: #080; font-style: italic;">-- un sinónimo que apunte a una tabla.</span>
<span style="color: #080; font-style: italic;">-- http://www.tsoracle.com</span>
<span style="color: #080; font-style: italic;">--------------</span>
<span style="color: #080; font-style: italic;">-- Sección Set</span>
<span style="color: #080; font-style: italic;">--------------</span>
<span style="color: #00F;">SET</span> LINES  <span style="color: #800;">120</span>
<span style="color: #00F;">SET</span> HEADING <span style="color: #00F;">ON</span>
<span style="color: #00F;">SET</span> VERIFY OFF
<span style="color: #080; font-style: italic;">-------------------------</span>
<span style="color: #080; font-style: italic;">-- Definición de columnas</span>
<span style="color: #080; font-style: italic;">-------------------------</span>
COLUMN CLAVE_PRIMARIA FORMAT A1 
COLUMN COLUMN_NAME    FORMAT A20 
COLUMN TIPO           FORMAT A15 
COLUMN DEFECTO        FORMAT A15 
COLUMN COMENTARIO     FORMAT A43 
COLUMN COMMENTS       FORMAT A69 
COLUMN TABLA_FORANEA  FORMAT A40 
<span style="color: #080; font-style: italic;">-------------</span>
<span style="color: #080; font-style: italic;">-- Parámetros</span>
<span style="color: #080; font-style: italic;">-------------</span>
ACCEPT tabla PROMPT <span style="color: #F00;">&quot;Escribe el nombre de la tabla: &quot;</span>
PROMPT <span style="color: #00F;">.</span>
<span style="color: #080; font-style: italic;">----------------------------------</span>
<span style="color: #080; font-style: italic;">-- Ver si es un sinónimo de tabla</span>
<span style="color: #080; font-style: italic;">---------------------------------</span>
var owner <span style="color: #00F;">VARCHAR2</span><span style="color: #00F;">&#40;</span><span style="color: #800;">30</span><span style="color: #00F;">&#41;</span>
var tabla <span style="color: #00F;">VARCHAR2</span><span style="color: #00F;">&#40;</span><span style="color: #800;">30</span><span style="color: #00F;">&#41;</span>
<span style="color: #00F;">DECLARE</span>
&nbsp;
<span style="color: #00F;">BEGIN</span>
  <span style="color: #080; font-style: italic;">-- Veo si es un sinónimo lo que me están pidiendo</span>
  <span style="color: #00F;">SELECT</span> TABLE_OWNER<span style="color: #00F;">,</span> TABLE_NAME
  <span style="color: #00F;">INTO</span>   <span style="color: #00F;">:</span>owner<span style="color: #00F;">,</span>      <span style="color: #00F;">:</span>tabla
  <span style="color: #00F;">FROM</span>   USER_SYNONYMS
  <span style="color: #00F;">WHERE</span>  SYNONYM_NAME <span style="color: #00F;">=</span> <span style="color: #000;">UPPER</span><span style="color: #00F;">&#40;</span> <span style="color: #F00;">'&amp;&amp;tabla'</span> <span style="color: #00F;">&#41;</span><span style="color: #00F;">;</span>
<span style="color: #00F;">EXCEPTION</span> 
  <span style="color: #00F;">WHEN</span> <span style="color: #F00;">NO_DATA_FOUND</span> <span style="color: #00F;">THEN</span> 
    <span style="color: #080; font-style: italic;">-- No es un sinónimo</span>
    <span style="color: #00F;">:</span>owner <span style="color: #00F;">:=</span> <span style="color: #000;">USER</span><span style="color: #00F;">;</span>
    <span style="color: #00F;">:</span>tabla <span style="color: #00F;">:=</span> <span style="color: #000;">UPPER</span><span style="color: #00F;">&#40;</span> <span style="color: #F00;">'&amp;&amp;tabla'</span> <span style="color: #00F;">&#41;</span><span style="color: #00F;">;</span>
<span style="color: #00F;">END</span><span style="color: #00F;">;</span>
<span style="color: #00F;">/</span>
<span style="color: #080; font-style: italic;">----------</span>
<span style="color: #080; font-style: italic;">-- Selects</span>
<span style="color: #080; font-style: italic;">----------</span>
<span style="color: #00F;">SELECT</span> <span style="color: #000;">DECODE</span><span style="color: #00F;">&#40;</span> OWNER<span style="color: #00F;">,</span> <span style="color: #000;">USER</span><span style="color: #00F;">,</span> <span style="color: #00F;">NULL</span><span style="color: #00F;">,</span> OWNER <span style="color: #00F;">||</span> <span style="color: #F00;">'.'</span> <span style="color: #00F;">&#41;</span> <span style="color: #00F;">||</span>
       TABLE_NAME <span style="color: #00F;">AS</span> TABLE_NAME<span style="color: #00F;">,</span> COMMENTS
<span style="color: #00F;">FROM</span>   ALL_TAB_COMMENTS
<span style="color: #00F;">WHERE</span>  OWNER      <span style="color: #00F;">=</span> <span style="color: #00F;">:</span>owner
  <span style="color: #00F;">AND</span>  TABLE_NAME <span style="color: #00F;">=</span> <span style="color: #00F;">:</span>tabla
<span style="color: #00F;">/</span>
<span style="color: #00F;">SELECT</span> P<span style="color: #00F;">.</span>PK CLAVE_PRIMARIA<span style="color: #00F;">,</span>
       M<span style="color: #00F;">.</span>COLUMN_NAME<span style="color: #00F;">,</span> 
       M<span style="color: #00F;">.</span>DATA_TYPE <span style="color: #00F;">||</span> <span style="color: #000;">DECODE</span><span style="color: #00F;">&#40;</span> M<span style="color: #00F;">.</span>DATA_TYPE<span style="color: #00F;">,</span> 
                              <span style="color: #080; font-style: italic;">/*************************************/</span>
                              <span style="color: #F00;">'DATE'</span><span style="color: #00F;">,</span> <span style="color: #00F;">NULL</span><span style="color: #00F;">,</span> <span style="color: #080; font-style: italic;">-- Poner aquí los tipos</span>
                              <span style="color: #F00;">'LONG'</span><span style="color: #00F;">,</span> <span style="color: #00F;">NULL</span><span style="color: #00F;">,</span> <span style="color: #080; font-style: italic;">-- de varible para los </span>
                              <span style="color: #F00;">'BLOB'</span><span style="color: #00F;">,</span> <span style="color: #00F;">NULL</span><span style="color: #00F;">,</span> <span style="color: #080; font-style: italic;">-- que no queramos ver</span>
                              <span style="color: #F00;">'CLOB'</span><span style="color: #00F;">,</span> <span style="color: #00F;">NULL</span><span style="color: #00F;">,</span> <span style="color: #080; font-style: italic;">-- la precisión</span>
                              <span style="color: #080; font-style: italic;">/*************************************/</span>
                              <span style="color: #F00;">'('</span> <span style="color: #00F;">||</span> <span style="color: #000;">TO_CHAR</span><span style="color: #00F;">&#40;</span> <span style="color: #000;">NVL</span><span style="color: #00F;">&#40;</span> M<span style="color: #00F;">.</span>DATA_PRECISION<span style="color: #00F;">,</span> 
                                                   M<span style="color: #00F;">.</span>DATA_LENGTH<span style="color: #00F;">&#41;</span><span style="color: #00F;">&#41;</span><span style="color: #00F;">||</span>
                              <span style="color: #000;">DECODE</span><span style="color: #00F;">&#40;</span> M<span style="color: #00F;">.</span>DATA_SCALE<span style="color: #00F;">,</span> <span style="color: #00F;">NULL</span><span style="color: #00F;">,</span> <span style="color: #00F;">NULL</span><span style="color: #00F;">,</span> 
                                      <span style="color: #F00;">','</span> <span style="color: #00F;">||</span>
                                      <span style="color: #000;">TO_CHAR</span><span style="color: #00F;">&#40;</span> M<span style="color: #00F;">.</span>DATA_SCALE <span style="color: #00F;">&#41;</span> <span style="color: #00F;">&#41;</span> <span style="color: #00F;">||</span>
                              <span style="color: #F00;">')'</span> <span style="color: #00F;">&#41;</span> TIPO<span style="color: #00F;">,</span>
       M<span style="color: #00F;">.</span>NULLABLE<span style="color: #00F;">,</span>
       M<span style="color: #00F;">.</span>DATA_DEFAULT DEFECTO<span style="color: #00F;">,</span>
       C<span style="color: #00F;">.</span>COMMENTS COMENTARIO
<span style="color: #00F;">FROM</span>   <span style="color: #00F;">&#40;</span> <span style="color: #00F;">SELECT</span> N<span style="color: #00F;">.</span>TABLE_NAME<span style="color: #00F;">,</span> L<span style="color: #00F;">.</span>COLUMN_NAME<span style="color: #00F;">,</span> <span style="color: #F00;">'*'</span> PK
         <span style="color: #00F;">FROM</span>   ALL_CONS_COLUMNS L<span style="color: #00F;">,</span> ALL_CONSTRAINTS N
         <span style="color: #00F;">WHERE</span>  L<span style="color: #00F;">.</span>CONSTRAINT_NAME <span style="color: #00F;">=</span> N<span style="color: #00F;">.</span>CONSTRAINT_NAME
           <span style="color: #00F;">AND</span>  L<span style="color: #00F;">.</span>OWNER      <span style="color: #00F;">=</span> <span style="color: #00F;">:</span>owner
           <span style="color: #00F;">AND</span>  N<span style="color: #00F;">.</span>OWNER      <span style="color: #00F;">=</span> <span style="color: #00F;">:</span>owner
           <span style="color: #00F;">AND</span>  N<span style="color: #00F;">.</span>TABLE_NAME <span style="color: #00F;">=</span> <span style="color: #00F;">:</span>tabla
           <span style="color: #00F;">AND</span>  N<span style="color: #00F;">.</span>CONSTRAINT_TYPE <span style="color: #00F;">=</span> <span style="color: #F00;">'P'</span> <span style="color: #00F;">&#41;</span> P<span style="color: #00F;">,</span> <span style="color: #080; font-style: italic;">-- Clave primaria</span>
       ALL_TAB_COLUMNS M<span style="color: #00F;">,</span> ALL_COL_COMMENTS C
<span style="color: #00F;">WHERE</span>  M<span style="color: #00F;">.</span>TABLE_NAME  <span style="color: #00F;">=</span> C<span style="color: #00F;">.</span>TABLE_NAME
  <span style="color: #00F;">AND</span>  M<span style="color: #00F;">.</span>COLUMN_NAME <span style="color: #00F;">=</span> C<span style="color: #00F;">.</span>COLUMN_NAME
  <span style="color: #00F;">AND</span>  M<span style="color: #00F;">.</span>OWNER       <span style="color: #00F;">=</span> C<span style="color: #00F;">.</span>OWNER
  <span style="color: #00F;">AND</span>  M<span style="color: #00F;">.</span>TABLE_NAME  <span style="color: #00F;">=</span> P<span style="color: #00F;">.</span>TABLE_NAME  <span style="color: #00F;">&#40;</span><span style="color: #00F;">+</span><span style="color: #00F;">&#41;</span>
  <span style="color: #00F;">AND</span>  M<span style="color: #00F;">.</span>COLUMN_NAME <span style="color: #00F;">=</span> P<span style="color: #00F;">.</span>COLUMN_NAME <span style="color: #00F;">&#40;</span><span style="color: #00F;">+</span><span style="color: #00F;">&#41;</span>
  <span style="color: #00F;">AND</span>  M<span style="color: #00F;">.</span>TABLE_NAME  <span style="color: #00F;">=</span> <span style="color: #00F;">:</span>tabla
  <span style="color: #00F;">AND</span>  M<span style="color: #00F;">.</span>OWNER       <span style="color: #00F;">=</span> <span style="color: #00F;">:</span>owner
<span style="color: #00F;">ORDER</span> <span style="color: #00F;">BY</span> M<span style="color: #00F;">.</span>COLUMN_ID
<span style="color: #00F;">/</span>
PROMPT CLAVES <span style="color: #00F;">FOR</span>ÁNEAS<span style="color: #00F;">:</span>
BREAK <span style="color: #00F;">ON</span> TABLA_FORANEA
<span style="color: #00F;">SELECT</span> <span style="color: #000;">DECODE</span><span style="color: #00F;">&#40;</span> B<span style="color: #00F;">.</span>OWNER<span style="color: #00F;">,</span> <span style="color: #00F;">:</span>owner<span style="color: #00F;">,</span> <span style="color: #00F;">NULL</span><span style="color: #00F;">,</span> B<span style="color: #00F;">.</span>OWNER <span style="color: #00F;">||</span> <span style="color: #F00;">'.'</span> <span style="color: #00F;">&#41;</span> <span style="color: #00F;">||</span>
       B<span style="color: #00F;">.</span>TABLE_NAME TABLA_FORANEA<span style="color: #00F;">,</span> 
       C<span style="color: #00F;">.</span>COLUMN_NAME
<span style="color: #00F;">FROM</span>   ALL_CONS_COLUMNS C<span style="color: #00F;">,</span> ALL_CONSTRAINTS A<span style="color: #00F;">,</span> ALL_CONSTRAINTS B
<span style="color: #00F;">WHERE</span>  A<span style="color: #00F;">.</span>R_CONSTRAINT_NAME <span style="color: #00F;">=</span> B<span style="color: #00F;">.</span>CONSTRAINT_NAME
  <span style="color: #00F;">AND</span>  A<span style="color: #00F;">.</span>CONSTRAINT_NAME   <span style="color: #00F;">=</span> C<span style="color: #00F;">.</span>CONSTRAINT_NAME
  <span style="color: #00F;">AND</span>  A<span style="color: #00F;">.</span>OWNER             <span style="color: #00F;">=</span> C<span style="color: #00F;">.</span>OWNER
  <span style="color: #00F;">AND</span>  A<span style="color: #00F;">.</span>TABLE_NAME        <span style="color: #00F;">=</span> <span style="color: #00F;">:</span>tabla
  <span style="color: #00F;">AND</span>  A<span style="color: #00F;">.</span>OWNER             <span style="color: #00F;">=</span> <span style="color: #00F;">:</span>owner
  <span style="color: #00F;">AND</span>  A<span style="color: #00F;">.</span>CONSTRAINT_TYPE   <span style="color: #00F;">=</span> <span style="color: #F00;">'R'</span>
<span style="color: #00F;">ORDER</span> <span style="color: #00F;">BY</span> B<span style="color: #00F;">.</span>TABLE_NAME<span style="color: #00F;">,</span> C<span style="color: #00F;">.</span>POSITION
<span style="color: #00F;">/</span>
<span style="color: #00F;">SET</span> VERIFY <span style="color: #00F;">ON</span></pre></td></tr></table></div>

]]></content:encoded>
			<wfw:commentRss>http://www.tsoracle.com/wparchives/2007/07/21/script-de-descripcion-de-tablas-mejorado/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	<creativeCommons:license>http://creativecommons.org/licenses/by/3.0/</creativeCommons:license>
	</item>
		<item>
		<title>Sentencias COMMENT para una tabla o vista</title>
		<link>http://www.tsoracle.com/wparchives/2007/07/20/sentencias-comment-para-una-tabla-o-vista/</link>
		<comments>http://www.tsoracle.com/wparchives/2007/07/20/sentencias-comment-para-una-tabla-o-vista/#comments</comments>
		<pubDate>Thu, 19 Jul 2007 23:38:05 +0000</pubDate>
		<dc:creator>Sir Ragnar</dc:creator>
				<category><![CDATA[Scripts]]></category>

		<guid isPermaLink="false">http://www.tsoracle.com/wparchives/2007/07/20/sentencias-comment-para-una-tabla-o-vista/</guid>
		<description><![CDATA[Cuando creo una vista, me gusta ponerle comentarios a ella y tambi&#233;n a sus columnas. Normalmente es un rollo porque tengo que copy-pastearme las columnas y luego ir haciendo el comment on column. Lo peor del copy-paste es que es muy f&#225;cil cometer errores inadvertidamente (y cambiarle los comentarios a otra tabla o cosas por [...]]]></description>
			<content:encoded><![CDATA[<p>Cuando creo una vista, me gusta ponerle comentarios a ella y tambi&eacute;n a sus columnas. Normalmente es un rollo porque tengo que copy-pastearme las columnas y luego ir haciendo el <em>comment on column</em>. Lo peor del copy-paste es que es muy f&aacute;cil cometer errores inadvertidamente (y cambiarle los comentarios a otra tabla o cosas por el estilo). Por esto y por ganduler&iacute;a inform&aacute;tica, me he hecho un script para ahorrame trabajo y errores.<span id="more-58"></span> El script me genera las sentencias <em>comment</em> y ya s&oacute;lo me queda ir llenando los comentarios.</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
</pre></td><td class="code"><pre class="plsql" style="font-family:monospace;"><span style="color: #080; font-style: italic;">-- Script para obtener la lista de create comments</span>
<span style="color: #080; font-style: italic;">-- http://www.tsoracle.com</span>
<span style="color: #080; font-style: italic;">--------------</span>
<span style="color: #080; font-style: italic;">-- Sets varios</span>
<span style="color: #080; font-style: italic;">--------------</span>
<span style="color: #00F;">SET</span> LINES <span style="color: #800;">120</span>
<span style="color: #00F;">SET</span> PAGES <span style="color: #800;">1000</span>
<span style="color: #00F;">SET</span> HEADING OFF
<span style="color: #00F;">SET</span> VERIFY OFF
&nbsp;
<span style="color: #080; font-style: italic;">---------------------</span>
<span style="color: #080; font-style: italic;">-- Valores de entrada</span>
<span style="color: #080; font-style: italic;">---------------------</span>
ACCEPT PROPIETARIO PROMPT <span style="color: #F00;">&quot;Propietario del esquema: &quot;</span>
ACCEPT TABLAOVISTA PROMPT <span style="color: #F00;">&quot;Nombre de la tabla o vista: &quot;</span>
&nbsp;
<span style="color: #080; font-style: italic;">--------------------------------------</span>
<span style="color: #080; font-style: italic;">-- Selects para la obtención de datos</span>
<span style="color: #080; font-style: italic;">-------------------------------------</span>
<span style="color: #080; font-style: italic;">-- Comentario para la tabla o vista</span>
<span style="color: #00F;">SELECT</span> <span style="color: #F00;">'COMMENT ON TABLE &amp;&amp;PROPIETARIO..&amp;&amp;TABLAOVISTA '</span> <span style="color: #00F;">||</span>
       <span style="color: #F00;">' IS '</span><span style="color: #F00;">''</span><span style="color: #F00;">''</span> <span style="color: #00F;">||</span> <span style="color: #000;">CHR</span><span style="color: #00F;">&#40;</span><span style="color: #800;">10</span><span style="color: #00F;">&#41;</span> <span style="color: #00F;">||</span>
       <span style="color: #F00;">'/'</span>
<span style="color: #00F;">FROM</span> DUAL
<span style="color: #00F;">/</span>
<span style="color: #080; font-style: italic;">-- Comentario para las columnas de la tabla o vista</span>
<span style="color: #00F;">SELECT</span> <span style="color: #F00;">'COMMENT ON COLUMN '</span> <span style="color: #00F;">||</span> 
       OWNER       <span style="color: #00F;">||</span> <span style="color: #F00;">'.'</span> <span style="color: #00F;">||</span>
       TABLE_NAME  <span style="color: #00F;">||</span> <span style="color: #F00;">'.'</span> <span style="color: #00F;">||</span>
       COLUMN_NAME <span style="color: #00F;">||</span> 
       <span style="color: #F00;">' IS '</span><span style="color: #F00;">''</span><span style="color: #F00;">''</span>    <span style="color: #00F;">||</span> <span style="color: #000;">CHR</span><span style="color: #00F;">&#40;</span><span style="color: #800;">10</span><span style="color: #00F;">&#41;</span> <span style="color: #00F;">||</span>
       <span style="color: #F00;">'/'</span>
<span style="color: #00F;">FROM</span>   ALL_TAB_COLS
<span style="color: #00F;">WHERE</span>  OWNER      <span style="color: #00F;">=</span> <span style="color: #000;">UPPER</span><span style="color: #00F;">&#40;</span> <span style="color: #F00;">'&amp;&amp;PROPIETARIO'</span> <span style="color: #00F;">&#41;</span>
  <span style="color: #00F;">AND</span>  TABLE_NAME <span style="color: #00F;">=</span> <span style="color: #000;">UPPER</span><span style="color: #00F;">&#40;</span> <span style="color: #F00;">'&amp;&amp;TABLAOVISTA'</span> <span style="color: #00F;">&#41;</span>
<span style="color: #00F;">ORDER</span> <span style="color: #00F;">BY</span> COLUMN_ID
<span style="color: #00F;">/</span>
<span style="color: #080; font-style: italic;">----------------------------</span>
<span style="color: #080; font-style: italic;">-- Restauro heading y verify</span>
<span style="color: #080; font-style: italic;">----------------------------</span>
<span style="color: #00F;">SET</span> VERIFY <span style="color: #00F;">ON</span> 
<span style="color: #00F;">SET</span> HEADING <span style="color: #00F;">ON</span></pre></td></tr></table></div>

]]></content:encoded>
			<wfw:commentRss>http://www.tsoracle.com/wparchives/2007/07/20/sentencias-comment-para-una-tabla-o-vista/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	<creativeCommons:license>http://creativecommons.org/licenses/by/3.0/</creativeCommons:license>
	</item>
		<item>
		<title>Diferencias entre columnas</title>
		<link>http://www.tsoracle.com/wparchives/2007/07/09/diferencias-entre-columnas/</link>
		<comments>http://www.tsoracle.com/wparchives/2007/07/09/diferencias-entre-columnas/#comments</comments>
		<pubDate>Mon, 09 Jul 2007 10:39:56 +0000</pubDate>
		<dc:creator>Sir Ragnar</dc:creator>
				<category><![CDATA[Scripts]]></category>

		<guid isPermaLink="false">http://www.tsoracle.com/wparchives/52</guid>
		<description><![CDATA[Me he visto obligado a sustituir algunas tablas de un esquema por vistas sobre otro. La idea es hacer una refactorizaci&#243;n, por lo que necesito asegurarme de que las nuevas vistas tengan las mismas columnas que las antiguas tablas. Para eso me he hecho un script que se encarga de compararme nombres y tipos de [...]]]></description>
			<content:encoded><![CDATA[<p>Me he visto obligado a sustituir algunas tablas de un esquema por vistas sobre otro. La idea es hacer una refactorizaci&oacute;n, por lo que necesito asegurarme de que las nuevas vistas tengan las mismas columnas que las antiguas tablas. <span id="more-52"></span>Para eso me he hecho un script que se encarga de compararme nombres y tipos de variable. Como utiliza la vista <em>ALL_TAB_COLS</em> sirve para comparar indistintamente vistas y tablas. Por si a alguien le resulta de utilidad, ah&iacute; va:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
</pre></td><td class="code"><pre class="plsql" style="font-family:monospace;"><span style="color: #080; font-style: italic;">-- Script para comparar columnas de dos vistas o tablas.</span>
<span style="color: #080; font-style: italic;">-- http://www.tsoracle.com</span>
<span style="color: #080; font-style: italic;">--------------</span>
<span style="color: #080; font-style: italic;">-- Sets varios</span>
<span style="color: #080; font-style: italic;">--------------</span>
<span style="color: #00F;">SET</span> SERVEROUTPUT <span style="color: #00F;">ON</span> 
<span style="color: #00F;">SET</span> VERIFY OFF
<span style="color: #080; font-style: italic;">---------------------</span>
<span style="color: #080; font-style: italic;">-- Valores de entrada</span>
<span style="color: #080; font-style: italic;">---------------------</span>
ACCEPT PROPIETARIO1 PROMPT <span style="color: #F00;">&quot;Propietario del esquema 1: &quot;</span>
ACCEPT TABLAOVISTA1 PROMPT <span style="color: #F00;">&quot;Nombre de la tabla o vista 1: &quot;</span>
ACCEPT PROPIETARIO2 PROMPT <span style="color: #F00;">&quot;Propietario del esquema 2: &quot;</span>
ACCEPT TABLAOVISTA2 PROMPT <span style="color: #F00;">&quot;Nombre de la tabla o vista 2: &quot;</span>
<span style="color: #00F;">DECLARE</span>
&nbsp;
  <span style="color: #080; font-style: italic;">--------------------</span>
  <span style="color: #080; font-style: italic;">-- Tipos de Variable</span>
  <span style="color: #080; font-style: italic;">--------------------</span>
  <span style="color: #080; font-style: italic;">-- Tipo para diferencias unitarias</span>
  <span style="color: #00F;">TYPE</span> tDiferencia <span style="color: #00F;">IS</span> <span style="color: #00F;">RECORD</span> <span style="color: #00F;">&#40;</span>
    vColumna ALL_TAB_COLS<span style="color: #00F;">.</span>COLUMN_NAME<span style="color: #00F;">%</span><span style="color: #00F;">TYPE</span><span style="color: #00F;">,</span>
    vValorA  <span style="color: #00F;">VARCHAR2</span><span style="color: #00F;">&#40;</span><span style="color: #800;">200</span><span style="color: #00F;">&#41;</span><span style="color: #00F;">,</span>
    vValorB  <span style="color: #00F;">VARCHAR2</span><span style="color: #00F;">&#40;</span><span style="color: #800;">200</span><span style="color: #00F;">&#41;</span> <span style="color: #00F;">&#41;</span><span style="color: #00F;">;</span>
&nbsp;
  <span style="color: #080; font-style: italic;">-- Tipo para conjuntos de diferencias</span>
  <span style="color: #00F;">TYPE</span> tDiferencias <span style="color: #00F;">IS</span> <span style="color: #00F;">TABLE</span> <span style="color: #00F;">OF</span> tDiferencia <span style="color: #00F;">INDEX</span> <span style="color: #00F;">BY</span> <span style="color: #00F;">BINARY_INTEGER</span><span style="color: #00F;">;</span>
&nbsp;
  <span style="color: #080; font-style: italic;">-------------</span>
  <span style="color: #080; font-style: italic;">-- Constantes</span>
  <span style="color: #080; font-style: italic;">-------------</span>
  VOWNER1 <span style="color: #00F;">CONSTANT</span> ALL_TAB_COLS<span style="color: #00F;">.</span>OWNER<span style="color: #00F;">%</span><span style="color: #00F;">TYPE</span>      <span style="color: #00F;">:=</span> <span style="color: #000;">UPPER</span><span style="color: #00F;">&#40;</span> 
                                                     <span style="color: #000;">SUBSTR</span><span style="color: #00F;">&#40;</span> <span style="color: #F00;">'&amp;&amp;PROPIETARIO1'</span><span style="color: #00F;">,</span>
                                                             <span style="color: #800;">1</span><span style="color: #00F;">,</span> <span style="color: #800;">30</span> <span style="color: #00F;">&#41;</span> <span style="color: #00F;">&#41;</span><span style="color: #00F;">;</span>
  VTABLA1 <span style="color: #00F;">CONSTANT</span> ALL_TAB_COLS<span style="color: #00F;">.</span>TABLE_NAME<span style="color: #00F;">%</span><span style="color: #00F;">TYPE</span> <span style="color: #00F;">:=</span> <span style="color: #000;">UPPER</span><span style="color: #00F;">&#40;</span> 
                                                     <span style="color: #000;">SUBSTR</span><span style="color: #00F;">&#40;</span> <span style="color: #F00;">'&amp;&amp;TABLAOVISTA1'</span><span style="color: #00F;">,</span>
                                                             <span style="color: #800;">1</span><span style="color: #00F;">,</span> <span style="color: #800;">30</span> <span style="color: #00F;">&#41;</span> <span style="color: #00F;">&#41;</span><span style="color: #00F;">;</span>
&nbsp;
  VOWNER2 <span style="color: #00F;">CONSTANT</span> ALL_TAB_COLS<span style="color: #00F;">.</span>OWNER<span style="color: #00F;">%</span><span style="color: #00F;">TYPE</span>      <span style="color: #00F;">:=</span> <span style="color: #000;">UPPER</span><span style="color: #00F;">&#40;</span> 
                                                     <span style="color: #000;">SUBSTR</span><span style="color: #00F;">&#40;</span> <span style="color: #F00;">'&amp;&amp;PROPIETARIO2'</span><span style="color: #00F;">,</span>
                                                             <span style="color: #800;">1</span><span style="color: #00F;">,</span> <span style="color: #800;">30</span> <span style="color: #00F;">&#41;</span> <span style="color: #00F;">&#41;</span><span style="color: #00F;">;</span>
  VTABLA2 <span style="color: #00F;">CONSTANT</span> ALL_TAB_COLS<span style="color: #00F;">.</span>TABLE_NAME<span style="color: #00F;">%</span><span style="color: #00F;">TYPE</span> <span style="color: #00F;">:=</span> <span style="color: #000;">UPPER</span><span style="color: #00F;">&#40;</span> 
                                                     <span style="color: #000;">SUBSTR</span><span style="color: #00F;">&#40;</span> <span style="color: #F00;">'&amp;&amp;TABLAOVISTA2'</span><span style="color: #00F;">,</span>
                                                             <span style="color: #800;">1</span><span style="color: #00F;">,</span> <span style="color: #800;">30</span> <span style="color: #00F;">&#41;</span> <span style="color: #00F;">&#41;</span><span style="color: #00F;">;</span>
  VNULL  <span style="color: #00F;">CONSTANT</span> <span style="color: #00F;">VARCHAR2</span><span style="color: #00F;">&#40;</span><span style="color: #800;">30</span><span style="color: #00F;">&#41;</span> <span style="color: #00F;">:=</span> <span style="color: #F00;">'SIN VALOR'</span><span style="color: #00F;">;</span>
  <span style="color: #080; font-style: italic;">------------</span>
  <span style="color: #080; font-style: italic;">-- Variables</span>
  <span style="color: #080; font-style: italic;">------------</span>
  <span style="color: #080; font-style: italic;">-- Variables para llenar las diferencias entre columnas</span>
  plDistintoTipo     tDiferencias<span style="color: #00F;">;</span>
  plDistintaLongitud tDiferencias<span style="color: #00F;">;</span>
  plDistintoNulable  tDiferencias<span style="color: #00F;">;</span>
&nbsp;
  <span style="color: #080; font-style: italic;">-- Variable boleana que me indica si existen las dos tablas/vistas</span>
  bExistenAmbas <span style="color: #00F;">BOOLEAN</span><span style="color: #00F;">;</span>
&nbsp;
  <span style="color: #080; font-style: italic;">-----------</span>
  <span style="color: #080; font-style: italic;">-- Cursores</span>
  <span style="color: #080; font-style: italic;">-----------</span>
  <span style="color: #00F;">CURSOR</span> cColumnasDistintoTipo <span style="color: #00F;">IS</span>
    <span style="color: #00F;">SELECT</span> A<span style="color: #00F;">.</span>COLUMN_NAME VCOLUMNA<span style="color: #00F;">,</span> <span style="color: #080; font-style: italic;">-- Columna de la discordia</span>
&nbsp;
           <span style="color: #080; font-style: italic;">-- Datos de la columna de la tabla 1</span>
           <span style="color: #000;">NVL</span><span style="color: #00F;">&#40;</span> A<span style="color: #00F;">.</span>DATA_TYPE<span style="color: #00F;">,</span> VNULL <span style="color: #00F;">&#41;</span> DATA_TYPE1<span style="color: #00F;">,</span> 
           <span style="color: #000;">TO_CHAR</span><span style="color: #00F;">&#40;</span> A<span style="color: #00F;">.</span>DATA_LENGTH <span style="color: #00F;">&#41;</span>  DATA_LENGTH1<span style="color: #00F;">,</span>
           <span style="color: #000;">NVL</span><span style="color: #00F;">&#40;</span> A<span style="color: #00F;">.</span>NULLABLE<span style="color: #00F;">,</span>  VNULL <span style="color: #00F;">&#41;</span> NULLABLE1<span style="color: #00F;">,</span>
&nbsp;
           <span style="color: #080; font-style: italic;">-- Datos de la columna de la tabla 2</span>
           <span style="color: #000;">NVL</span><span style="color: #00F;">&#40;</span> B<span style="color: #00F;">.</span>DATA_TYPE<span style="color: #00F;">,</span> VNULL <span style="color: #00F;">&#41;</span> DATA_TYPE2<span style="color: #00F;">,</span> 
           <span style="color: #000;">TO_CHAR</span><span style="color: #00F;">&#40;</span> B<span style="color: #00F;">.</span>DATA_LENGTH <span style="color: #00F;">&#41;</span>  DATA_LENGTH2<span style="color: #00F;">,</span>
           <span style="color: #000;">NVL</span><span style="color: #00F;">&#40;</span> B<span style="color: #00F;">.</span>NULLABLE<span style="color: #00F;">,</span>  VNULL <span style="color: #00F;">&#41;</span> NULLABLE2
&nbsp;
    <span style="color: #00F;">FROM</span>   ALL_TAB_COLS A<span style="color: #00F;">,</span> ALL_TAB_COLS B
    <span style="color: #00F;">WHERE</span>  A<span style="color: #00F;">.</span>COLUMN_NAME <span style="color: #00F;">=</span> B<span style="color: #00F;">.</span>COLUMN_NAME
      <span style="color: #00F;">AND</span>  A<span style="color: #00F;">.</span>OWNER       <span style="color: #00F;">=</span> VOWNER1
      <span style="color: #00F;">AND</span>  A<span style="color: #00F;">.</span>TABLE_NAME  <span style="color: #00F;">=</span> VTABLA1
      <span style="color: #00F;">AND</span>  B<span style="color: #00F;">.</span>OWNER       <span style="color: #00F;">=</span> VOWNER2
      <span style="color: #00F;">AND</span>  B<span style="color: #00F;">.</span>TABLE_NAME  <span style="color: #00F;">=</span> VTABLA2
      <span style="color: #00F;">AND</span>  <span style="color: #00F;">&#40;</span> <span style="color: #000;">NVL</span><span style="color: #00F;">&#40;</span> A<span style="color: #00F;">.</span>DATA_TYPE<span style="color: #00F;">,</span> VNULL <span style="color: #00F;">&#41;</span>  <span style="color: #00F;">!=</span> <span style="color: #000;">NVL</span><span style="color: #00F;">&#40;</span> B<span style="color: #00F;">.</span>DATA_TYPE<span style="color: #00F;">,</span> VNULL <span style="color: #00F;">&#41;</span> <span style="color: #00F;">OR</span>
             A<span style="color: #00F;">.</span>DATA_LENGTH              <span style="color: #00F;">!=</span> B<span style="color: #00F;">.</span>DATA_LENGTH             <span style="color: #00F;">OR</span>
             <span style="color: #000;">NVL</span><span style="color: #00F;">&#40;</span> A<span style="color: #00F;">.</span>NULLABLE<span style="color: #00F;">,</span>  VNULL <span style="color: #00F;">&#41;</span>  <span style="color: #00F;">!=</span> <span style="color: #000;">NVL</span><span style="color: #00F;">&#40;</span> B<span style="color: #00F;">.</span>NULLABLE<span style="color: #00F;">,</span>  VNULL <span style="color: #00F;">&#41;</span> 
            <span style="color: #00F;">&#41;</span>
    <span style="color: #00F;">ORDER</span> <span style="color: #00F;">BY</span> A<span style="color: #00F;">.</span>COLUMN_ID<span style="color: #00F;">;</span>
&nbsp;
  <span style="color: #080; font-style: italic;">-----------------------------</span>
  <span style="color: #080; font-style: italic;">-- Funciones y procedimientos</span>
  <span style="color: #080; font-style: italic;">-----------------------------</span>
  <span style="color: #080; font-style: italic;">-- Di -------------------------------------------------------------</span>
  <span style="color: #00F;">PROCEDURE</span> Di<span style="color: #00F;">&#40;</span> cadena <span style="color: #00F;">VARCHAR2</span> <span style="color: #00F;">&#41;</span> <span style="color: #00F;">IS</span>
    <span style="color: #080; font-style: italic;">-- Procedimiento que hace un dbms_output.put_line cortando</span>
    <span style="color: #080; font-style: italic;">-- la cadena de entrada a 255 para evitar que de un error</span>
    <span style="color: #080; font-style: italic;">-- de línea demasiado larga.</span>
  <span style="color: #00F;">BEGIN</span>
    <span style="color: #00F;">DBMS_OUTPUT</span><span style="color: #00F;">.</span>PUT_LINE<span style="color: #00F;">&#40;</span> <span style="color: #000;">SUBSTR</span><span style="color: #00F;">&#40;</span> cadena<span style="color: #00F;">,</span> <span style="color: #800;">1</span><span style="color: #00F;">,</span> <span style="color: #800;">255</span> <span style="color: #00F;">&#41;</span> <span style="color: #00F;">&#41;</span><span style="color: #00F;">;</span>
  <span style="color: #00F;">END</span> Di<span style="color: #00F;">;</span>
&nbsp;
  <span style="color: #080; font-style: italic;">-- diSeparador ----------------------------------------------------</span>
  <span style="color: #00F;">PROCEDURE</span> diSeparador <span style="color: #00F;">IS</span>
    <span style="color: #080; font-style: italic;">-- Procedimiento que escribe unas líneas que hacen las veces</span>
    <span style="color: #080; font-style: italic;">-- de separador de sección.</span>
  <span style="color: #00F;">BEGIN</span>
    Di<span style="color: #00F;">&#40;</span><span style="color: #F00;">'.'</span><span style="color: #00F;">&#41;</span><span style="color: #00F;">;</span>
    Di<span style="color: #00F;">&#40;</span><span style="color: #F00;">'===================================================='</span> <span style="color: #00F;">&#41;</span><span style="color: #00F;">;</span>
  <span style="color: #00F;">END</span><span style="color: #00F;">;</span>
&nbsp;
  <span style="color: #080; font-style: italic;">-- diDiferencia ---------------------------------------------------</span>
  <span style="color: #00F;">PROCEDURE</span> diDiferencia<span style="color: #00F;">&#40;</span> rDif tDiferencia <span style="color: #00F;">&#41;</span> <span style="color: #00F;">IS</span> 
    <span style="color: #080; font-style: italic;">-- Procedimiento que escribe por pantalla una diferencia</span>
  <span style="color: #00F;">BEGIN</span>
    Di<span style="color: #00F;">&#40;</span> rDif<span style="color: #00F;">.</span>vColumna <span style="color: #00F;">||</span> <span style="color: #F00;">'. En '</span> <span style="color: #00F;">||</span> VTABLA1 <span style="color: #00F;">||</span> <span style="color: #F00;">': '</span> <span style="color: #00F;">||</span> rDif<span style="color: #00F;">.</span>vValorA <span style="color: #00F;">||</span> <span style="color: #F00;">', '</span> 
                                 <span style="color: #00F;">||</span> VTABLA2 <span style="color: #00F;">||</span> <span style="color: #F00;">': '</span> <span style="color: #00F;">||</span> rDif<span style="color: #00F;">.</span>vValorB <span style="color: #00F;">&#41;</span><span style="color: #00F;">;</span>
  <span style="color: #00F;">END</span> diDiferencia<span style="color: #00F;">;</span>
&nbsp;
  <span style="color: #080; font-style: italic;">-- diDiferencias -----------------------------------------------------------</span>
  <span style="color: #00F;">PROCEDURE</span> diDiferencias<span style="color: #00F;">&#40;</span> vDescri <span style="color: #00F;">VARCHAR2</span><span style="color: #00F;">,</span> plDif tDiferencias <span style="color: #00F;">&#41;</span> <span style="color: #00F;">IS</span> 
    <span style="color: #080; font-style: italic;">-- Procedimiento que escribe en pantalla la lista de diferencias</span>
  <span style="color: #00F;">BEGIN</span>
    diSeparador<span style="color: #00F;">&#40;</span><span style="color: #00F;">&#41;</span><span style="color: #00F;">;</span>
    di<span style="color: #00F;">&#40;</span> vDescri <span style="color: #00F;">&#41;</span><span style="color: #00F;">;</span>
&nbsp;
    <span style="color: #00F;">IF</span> plDif<span style="color: #00F;">.</span><span style="color: #000;">LAST</span> <span style="color: #00F;">IS</span> <span style="color: #00F;">NOT</span> <span style="color: #00F;">NULL</span> <span style="color: #00F;">THEN</span> 
      <span style="color: #00F;">FOR</span> nInd <span style="color: #00F;">IN</span> plDif<span style="color: #00F;">.</span><span style="color: #000;">FIRST</span><span style="color: #00F;">..</span>plDif<span style="color: #00F;">.</span><span style="color: #000;">LAST</span> <span style="color: #00F;">LOOP</span> 
        diDiferencia<span style="color: #00F;">&#40;</span> plDif<span style="color: #00F;">&#40;</span> nInd <span style="color: #00F;">&#41;</span> <span style="color: #00F;">&#41;</span><span style="color: #00F;">;</span>
      <span style="color: #00F;">END</span> <span style="color: #00F;">LOOP</span><span style="color: #00F;">;</span>
&nbsp;
    <span style="color: #00F;">ELSE</span> 
      Di<span style="color: #00F;">&#40;</span> <span style="color: #F00;">'No ha diferencias'</span> <span style="color: #00F;">&#41;</span><span style="color: #00F;">;</span>
    <span style="color: #00F;">END</span> <span style="color: #00F;">IF</span><span style="color: #00F;">;</span>
  <span style="color: #00F;">END</span> diDiferencias<span style="color: #00F;">;</span>
&nbsp;
  <span style="color: #080; font-style: italic;">-- agregaDiferencia -----------------------------------------------</span>
  <span style="color: #00F;">PROCEDURE</span> agregaDiferencia<span style="color: #00F;">&#40;</span> rDif tDiferencia<span style="color: #00F;">,</span> plDif <span style="color: #00F;">IN</span> <span style="color: #00F;">OUT</span> tDiferencias <span style="color: #00F;">&#41;</span> <span style="color: #00F;">IS</span> 
    <span style="color: #080; font-style: italic;">-- Procedimiento que agrega una diferencia a una lista de diferencias.</span>
    <span style="color: #080; font-style: italic;">------------</span>
    <span style="color: #080; font-style: italic;">-- Variables</span>
    <span style="color: #080; font-style: italic;">------------</span>
    <span style="color: #080; font-style: italic;">-- Para el siguiente índice de la tabla</span>
    nIndSiguiente <span style="color: #00F;">BINARY_INTEGER</span><span style="color: #00F;">;</span>
  <span style="color: #00F;">BEGIN</span>
    <span style="color: #00F;">IF</span> plDif<span style="color: #00F;">.</span><span style="color: #000;">LAST</span> <span style="color: #00F;">IS</span> <span style="color: #00F;">NULL</span> <span style="color: #00F;">THEN</span> 
      <span style="color: #080; font-style: italic;">-- La lista está vacía, me están pidiendo que agrege el primer elemento</span>
      nIndSiguiente <span style="color: #00F;">:=</span> <span style="color: #800;">1</span><span style="color: #00F;">;</span>
    <span style="color: #00F;">ELSE</span> 
      nIndSiguiente <span style="color: #00F;">:=</span> plDif<span style="color: #00F;">.</span><span style="color: #000;">LAST</span> <span style="color: #00F;">+</span> <span style="color: #800;">1</span><span style="color: #00F;">;</span>
    <span style="color: #00F;">END</span> <span style="color: #00F;">IF</span><span style="color: #00F;">;</span>
&nbsp;
    plDif<span style="color: #00F;">&#40;</span> nIndSiguiente <span style="color: #00F;">&#41;</span> <span style="color: #00F;">:=</span> rDif<span style="color: #00F;">;</span>
  <span style="color: #00F;">END</span> agregaDiferencia<span style="color: #00F;">;</span>
&nbsp;
  <span style="color: #080; font-style: italic;">-- agregaDifSiExiste ----------------------------------------------</span>
  <span style="color: #00F;">PROCEDURE</span> agregaDifSiExiste<span style="color: #00F;">&#40;</span> vColumna        ALL_TAB_COLS<span style="color: #00F;">.</span>COLUMN_NAME<span style="color: #00F;">%</span><span style="color: #00F;">TYPE</span><span style="color: #00F;">,</span>
                               vValorA         <span style="color: #00F;">VARCHAR2</span><span style="color: #00F;">,</span>
                               vValorB         <span style="color: #00F;">VARCHAR2</span><span style="color: #00F;">,</span>
                               plDif    <span style="color: #00F;">IN</span> <span style="color: #00F;">OUT</span> tDiferencias
                             <span style="color: #00F;">&#41;</span>
  <span style="color: #00F;">IS</span> 
    <span style="color: #080; font-style: italic;">-- Procedimiento que agrega una diferencia si los valores son distintos</span>
    <span style="color: #080; font-style: italic;">------------</span>
    <span style="color: #080; font-style: italic;">-- Variables</span>
    <span style="color: #080; font-style: italic;">------------</span>
    <span style="color: #080; font-style: italic;">-- Variable de diferencia auxiliar</span>
    rDifAux tDiferencia<span style="color: #00F;">;</span>
  <span style="color: #00F;">BEGIN</span>
    <span style="color: #00F;">IF</span> vValorA <span style="color: #00F;">!=</span> vValorB <span style="color: #00F;">THEN</span> 
      rDifAux<span style="color: #00F;">.</span>vColumna <span style="color: #00F;">:=</span> vColumna<span style="color: #00F;">;</span>
      rDifAux<span style="color: #00F;">.</span>vValorA  <span style="color: #00F;">:=</span> vValorA<span style="color: #00F;">;</span>
      rDifAux<span style="color: #00F;">.</span>vValorB  <span style="color: #00F;">:=</span> vValorB<span style="color: #00F;">;</span>
&nbsp;
      agregaDiferencia<span style="color: #00F;">&#40;</span> rDifAux<span style="color: #00F;">,</span> plDif <span style="color: #00F;">&#41;</span><span style="color: #00F;">;</span>
    <span style="color: #00F;">END</span> <span style="color: #00F;">IF</span><span style="color: #00F;">;</span>    
&nbsp;
  <span style="color: #00F;">END</span> agregaDifSiExiste<span style="color: #00F;">;</span>
&nbsp;
  <span style="color: #080; font-style: italic;">-- diColumnasQueNoEstan -------------------------------------------</span>
  <span style="color: #00F;">PROCEDURE</span> diColumnasQueNoEstan<span style="color: #00F;">&#40;</span>
              vOwnerA ALL_TAB_COLS<span style="color: #00F;">.</span>OWNER<span style="color: #00F;">%</span><span style="color: #00F;">TYPE</span><span style="color: #00F;">,</span>
              vTablaA ALL_TAB_COLS<span style="color: #00F;">.</span>TABLE_NAME<span style="color: #00F;">%</span><span style="color: #00F;">TYPE</span><span style="color: #00F;">,</span>
              vOwnerB ALL_TAB_COLS<span style="color: #00F;">.</span>OWNER<span style="color: #00F;">%</span><span style="color: #00F;">TYPE</span><span style="color: #00F;">,</span>
              vTablaB ALL_TAB_COLS<span style="color: #00F;">.</span>TABLE_NAME<span style="color: #00F;">%</span><span style="color: #00F;">TYPE</span> <span style="color: #00F;">&#41;</span>
  <span style="color: #00F;">IS</span>
    <span style="color: #080; font-style: italic;">-- Procedimiento que saca por pantalla la relación de columnas</span>
    <span style="color: #080; font-style: italic;">-- de la tabla o vista A que no están en la tabla o vista b</span>
&nbsp;
    <span style="color: #080; font-style: italic;">-----------</span>
    <span style="color: #080; font-style: italic;">-- Cursores</span>
    <span style="color: #080; font-style: italic;">-----------</span>
    <span style="color: #080; font-style: italic;">-- Cursor que saca las columnas de la tabla o vista A</span>
    <span style="color: #080; font-style: italic;">-- que no están en la tabla o vista B</span>
    <span style="color: #00F;">CURSOR</span> cNoColumnas  <span style="color: #00F;">IS</span>
      <span style="color: #00F;">SELECT</span> A<span style="color: #00F;">.</span>COLUMN_NAME
      <span style="color: #00F;">FROM</span>   ALL_TAB_COLS A
      <span style="color: #00F;">WHERE</span>  A<span style="color: #00F;">.</span>OWNER      <span style="color: #00F;">=</span> vOwnerA
        <span style="color: #00F;">AND</span>  A<span style="color: #00F;">.</span>TABLE_NAME <span style="color: #00F;">=</span> vTablaA
        <span style="color: #00F;">AND</span>  <span style="color: #00F;">NOT</span> <span style="color: #00F;">EXISTS</span><span style="color: #00F;">&#40;</span>
              <span style="color: #00F;">SELECT</span> <span style="color: #F00;">'X'</span>
              <span style="color: #00F;">FROM</span>   ALL_TAB_COLS B
              <span style="color: #00F;">WHERE</span>  B<span style="color: #00F;">.</span>OWNER       <span style="color: #00F;">=</span> vOwnerB
                <span style="color: #00F;">AND</span>  B<span style="color: #00F;">.</span>TABLE_NAME  <span style="color: #00F;">=</span> vTablaB
                <span style="color: #00F;">AND</span>  B<span style="color: #00F;">.</span>COLUMN_NAME <span style="color: #00F;">=</span> A<span style="color: #00F;">.</span>COLUMN_NAME <span style="color: #00F;">&#41;</span>
      <span style="color: #00F;">ORDER</span> <span style="color: #00F;">BY</span> A<span style="color: #00F;">.</span>COLUMN_ID<span style="color: #00F;">;</span>
  <span style="color: #00F;">BEGIN</span>
    diSeparador<span style="color: #00F;">&#40;</span><span style="color: #00F;">&#41;</span><span style="color: #00F;">;</span>
&nbsp;
    Di<span style="color: #00F;">&#40;</span> <span style="color: #F00;">'Columnas de '</span>      <span style="color: #00F;">||</span> vOwnerA <span style="color: #00F;">||</span> <span style="color: #F00;">'.'</span> <span style="color: #00F;">||</span> vTablaA <span style="color: #00F;">||</span>
        <span style="color: #F00;">' que no están en '</span> <span style="color: #00F;">||</span> vOwnerB <span style="color: #00F;">||</span> <span style="color: #F00;">'.'</span> <span style="color: #00F;">||</span> vTablaB <span style="color: #00F;">||</span>
        <span style="color: #F00;">':'</span><span style="color: #00F;">&#41;</span><span style="color: #00F;">;</span>
&nbsp;
    <span style="color: #00F;">FOR</span> rCol <span style="color: #00F;">IN</span> cNoColumnas <span style="color: #00F;">LOOP</span>
      Di<span style="color: #00F;">&#40;</span> rCol<span style="color: #00F;">.</span>COLUMN_NAME <span style="color: #00F;">&#41;</span><span style="color: #00F;">;</span>
    <span style="color: #00F;">END</span> <span style="color: #00F;">LOOP</span><span style="color: #00F;">;</span>
  <span style="color: #00F;">END</span> diColumnasQueNoEstan<span style="color: #00F;">;</span>
&nbsp;
  <span style="color: #080; font-style: italic;">-- existeTablaOVista ---------------------------------------------------------</span>
  <span style="color: #00F;">FUNCTION</span> existeTablaOVista<span style="color: #00F;">&#40;</span> vPropietario <span style="color: #00F;">VARCHAR2</span><span style="color: #00F;">,</span>
                              vTabla       <span style="color: #00F;">VARCHAR2</span> <span style="color: #00F;">&#41;</span> 
  <span style="color: #00F;">RETURN</span> <span style="color: #00F;">BOOLEAN</span> <span style="color: #00F;">IS</span> 
    <span style="color: #080; font-style: italic;">-- Función que comprueba se existe una tabla o vista con el propietario</span>
    <span style="color: #080; font-style: italic;">-- y nombre que le pasan como parámetro.</span>
    <span style="color: #080; font-style: italic;">------------</span>
    <span style="color: #080; font-style: italic;">-- Variables</span>
    <span style="color: #080; font-style: italic;">------------</span>
    vAux <span style="color: #00F;">VARCHAR2</span><span style="color: #00F;">&#40;</span><span style="color: #800;">1</span><span style="color: #00F;">&#41;</span><span style="color: #00F;">;</span>
  <span style="color: #00F;">BEGIN</span>
    <span style="color: #00F;">SELECT</span> <span style="color: #F00;">'X'</span>
    <span style="color: #00F;">INTO</span>   vAux
    <span style="color: #00F;">FROM</span>   ALL_OBJECTS 
    <span style="color: #00F;">WHERE</span>  OWNER       <span style="color: #00F;">=</span> vPropietario
      <span style="color: #00F;">AND</span>  OBJECT_NAME <span style="color: #00F;">=</span> vTabla 
      <span style="color: #00F;">AND</span>  OBJECT_TYPE <span style="color: #00F;">IN</span> <span style="color: #00F;">&#40;</span> <span style="color: #F00;">'TABLE'</span><span style="color: #00F;">,</span> <span style="color: #F00;">'VIEW'</span> <span style="color: #00F;">&#41;</span><span style="color: #00F;">;</span>
&nbsp;
    <span style="color: #080; font-style: italic;">-- Si llego hasta aquí es que existe.</span>
    <span style="color: #00F;">RETURN</span> <span style="color: #00F;">TRUE</span><span style="color: #00F;">;</span>
  <span style="color: #00F;">EXCEPTION</span> 
    <span style="color: #00F;">WHEN</span> <span style="color: #F00;">NO_DATA_FOUND</span> <span style="color: #00F;">THEN</span> 
      <span style="color: #00F;">RETURN</span> <span style="color: #00F;">FALSE</span><span style="color: #00F;">;</span>
  <span style="color: #00F;">END</span> existeTablaOVista<span style="color: #00F;">;</span>
&nbsp;
<span style="color: #00F;">BEGIN</span>
  <span style="color: #080; font-style: italic;">-- Amplío el buffer del dbms_output para que no se quede pequeño</span>
  <span style="color: #00F;">DBMS_OUTPUT</span><span style="color: #00F;">.</span>DISABLE<span style="color: #00F;">;</span>
  <span style="color: #00F;">DBMS_OUTPUT</span><span style="color: #00F;">.</span>ENABLE<span style="color: #00F;">&#40;</span><span style="color: #800;">10000000</span><span style="color: #00F;">&#41;</span><span style="color: #00F;">;</span>
&nbsp;
  <span style="color: #00F;">IF</span> existeTablaOVista<span style="color: #00F;">&#40;</span> VOWNER1<span style="color: #00F;">,</span> VTABLA1 <span style="color: #00F;">&#41;</span> <span style="color: #00F;">THEN</span>  
    <span style="color: #00F;">IF</span> existeTablaOVista<span style="color: #00F;">&#40;</span> VOWNER2<span style="color: #00F;">,</span> VTABLA2 <span style="color: #00F;">&#41;</span> <span style="color: #00F;">THEN</span> 
      bExistenAmbas <span style="color: #00F;">:=</span> <span style="color: #00F;">TRUE</span><span style="color: #00F;">;</span>
    <span style="color: #00F;">ELSE</span> 
      diSeparador<span style="color: #00F;">&#40;</span><span style="color: #00F;">&#41;</span><span style="color: #00F;">;</span>
      di<span style="color: #00F;">&#40;</span> <span style="color: #F00;">'No existe la tabla o vista '</span> <span style="color: #00F;">||</span> VOWNER2 <span style="color: #00F;">||</span> <span style="color: #F00;">'.'</span> <span style="color: #00F;">||</span> VTABLA2 <span style="color: #00F;">&#41;</span><span style="color: #00F;">;</span>
      bExistenAmbas <span style="color: #00F;">:=</span> <span style="color: #00F;">FALSE</span><span style="color: #00F;">;</span>
    <span style="color: #00F;">END</span> <span style="color: #00F;">IF</span><span style="color: #00F;">;</span>
  <span style="color: #00F;">ELSE</span> 
    diSeparador<span style="color: #00F;">&#40;</span><span style="color: #00F;">&#41;</span><span style="color: #00F;">;</span>
    di<span style="color: #00F;">&#40;</span> <span style="color: #F00;">'No existe la tabla o vista '</span> <span style="color: #00F;">||</span> VOWNER1 <span style="color: #00F;">||</span> <span style="color: #F00;">'.'</span> <span style="color: #00F;">||</span> VTABLA1 <span style="color: #00F;">&#41;</span><span style="color: #00F;">;</span>
    bExistenAmbas <span style="color: #00F;">:=</span> <span style="color: #00F;">FALSE</span><span style="color: #00F;">;</span>
  <span style="color: #00F;">END</span> <span style="color: #00F;">IF</span><span style="color: #00F;">;</span>
&nbsp;
  <span style="color: #080; font-style: italic;">-- Sólo continúo si existen ambas tablas:</span>
  <span style="color: #00F;">IF</span> bExistenAmbas <span style="color: #00F;">THEN</span>
&nbsp;
    <span style="color: #080; font-style: italic;">-- Columnas de la tabla 1 que no están en la tabla 2</span>
    diColumnasQueNoEstan<span style="color: #00F;">&#40;</span> VOWNER1<span style="color: #00F;">,</span> VTABLA1<span style="color: #00F;">,</span> VOWNER2<span style="color: #00F;">,</span> VTABLA2 <span style="color: #00F;">&#41;</span><span style="color: #00F;">;</span>
&nbsp;
    <span style="color: #080; font-style: italic;">-- Columnas de la tabla 2 que no están en la tabla 1</span>
    diColumnasQueNoEstan<span style="color: #00F;">&#40;</span> VOWNER2<span style="color: #00F;">,</span> VTABLA2<span style="color: #00F;">,</span> VOWNER1<span style="color: #00F;">,</span> VTABLA1 <span style="color: #00F;">&#41;</span><span style="color: #00F;">;</span>
&nbsp;
    <span style="color: #080; font-style: italic;">-- Ahora recopilo las diferencias en las columnas que sí están en las dos</span>
    <span style="color: #080; font-style: italic;">-- tablas o vistas.</span>
    <span style="color: #00F;">FOR</span> rDife <span style="color: #00F;">IN</span> cColumnasDistintoTipo <span style="color: #00F;">LOOP</span> 
      agregaDifSiExiste<span style="color: #00F;">&#40;</span> rDife<span style="color: #00F;">.</span>VCOLUMNA<span style="color: #00F;">,</span> rDife<span style="color: #00F;">.</span>DATA_TYPE1<span style="color: #00F;">,</span> rDife<span style="color: #00F;">.</span>DATA_TYPE2<span style="color: #00F;">,</span> 
                         plDistintoTipo <span style="color: #00F;">&#41;</span><span style="color: #00F;">;</span>
&nbsp;
      agregaDifSiExiste<span style="color: #00F;">&#40;</span> rDife<span style="color: #00F;">.</span>VCOLUMNA<span style="color: #00F;">,</span> rDife<span style="color: #00F;">.</span>DATA_LENGTH1<span style="color: #00F;">,</span> rDife<span style="color: #00F;">.</span>DATA_LENGTH2<span style="color: #00F;">,</span> 
                         plDistintaLongitud <span style="color: #00F;">&#41;</span><span style="color: #00F;">;</span>
&nbsp;
      agregaDifSiExiste<span style="color: #00F;">&#40;</span> rDife<span style="color: #00F;">.</span>VCOLUMNA<span style="color: #00F;">,</span> rDife<span style="color: #00F;">.</span>NULLABLE1<span style="color: #00F;">,</span> rDife<span style="color: #00F;">.</span>NULLABLE2<span style="color: #00F;">,</span> 
                         plDistintoNulable <span style="color: #00F;">&#41;</span><span style="color: #00F;">;</span>
    <span style="color: #00F;">END</span> <span style="color: #00F;">LOOP</span><span style="color: #00F;">;</span>
&nbsp;
    <span style="color: #080; font-style: italic;">-- Pinto la lista de diferencias por cada tipo</span>
    diDiferencias<span style="color: #00F;">&#40;</span> <span style="color: #F00;">'Diferencias de tipo:'</span><span style="color: #00F;">,</span>     plDistintoTipo <span style="color: #00F;">&#41;</span><span style="color: #00F;">;</span>
    diDiferencias<span style="color: #00F;">&#40;</span> <span style="color: #F00;">'Diferencias de longitud:'</span><span style="color: #00F;">,</span> plDistintaLongitud <span style="color: #00F;">&#41;</span><span style="color: #00F;">;</span>
    diDiferencias<span style="color: #00F;">&#40;</span> <span style="color: #F00;">'Diferencias de nulable:'</span><span style="color: #00F;">,</span>  plDistintoNulable <span style="color: #00F;">&#41;</span><span style="color: #00F;">;</span>
  <span style="color: #00F;">END</span> <span style="color: #00F;">IF</span><span style="color: #00F;">;</span>
<span style="color: #00F;">END</span><span style="color: #00F;">;</span>
<span style="color: #00F;">/</span>
<span style="color: #00F;">SET</span> VERIFY <span style="color: #00F;">ON</span></pre></td></tr></table></div>

]]></content:encoded>
			<wfw:commentRss>http://www.tsoracle.com/wparchives/2007/07/09/diferencias-entre-columnas/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	<creativeCommons:license>http://creativecommons.org/licenses/by/3.0/</creativeCommons:license>
	</item>
		<item>
		<title>Algunos tips de SQL</title>
		<link>http://www.tsoracle.com/wparchives/2007/07/05/algunos-tips-de-sql/</link>
		<comments>http://www.tsoracle.com/wparchives/2007/07/05/algunos-tips-de-sql/#comments</comments>
		<pubDate>Thu, 05 Jul 2007 11:53:34 +0000</pubDate>
		<dc:creator>Sir Ragnar</dc:creator>
				<category><![CDATA[Scripts]]></category>
		<category><![CDATA[Tunning oracle]]></category>

		<guid isPermaLink="false">http://www.tsoracle.com/wparchives/50</guid>
		<description><![CDATA[Estaba navegando por estos mundos de Oracle buscando alg&#250;n consejo sobre la forma m&#225;s eficiente de montar una union y me he topado con este interesante documento sobre tips de sql. Creo que todos los que trabajamos con consultas SQL en Oracle deber&#237;amos conocerlos: SQL Tuning Tips.
Especialmente curioso me ha parecido el primero de ellos [...]]]></description>
			<content:encoded><![CDATA[<p>Estaba navegando por estos mundos de Oracle buscando alg&uacute;n consejo sobre la forma m&aacute;s eficiente de montar una <em>union</em> y me he topado con este interesante documento sobre tips de sql. Creo que todos los que trabajamos con consultas SQL en Oracle deber&iacute;amos conocerlos: <a title="SQL Tuning Tips" target="_blank" href="http://www.wisc.edu/drmt/oratips/sess006.html">SQL Tuning Tips</a>.<br />
Especialmente curioso me ha parecido el primero de ellos que viene a aconsejar seguir alg&uacute;n tipo de patron a la hora de construir las consultas. Es algo que me gusta hacer, pero nunca hubiera pensado que pudiera respaldarlo con argumentos <em>tuneros</em>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.tsoracle.com/wparchives/2007/07/05/algunos-tips-de-sql/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	<creativeCommons:license>http://creativecommons.org/licenses/by/3.0/</creativeCommons:license>
	</item>
	</channel>
</rss>
