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

<channel>
	<title>Administración de ORACLE en Español &#187; ALL_VIEWS</title>
	<atom:link href="http://colacios.es/blog/WordPress3/tag/all_views/feed/" rel="self" type="application/rss+xml" />
	<link>http://colacios.es/blog/WordPress3</link>
	<description>Administración de Base de datos ORACLE en español</description>
	<lastBuildDate>Tue, 11 Mar 2014 12:56:35 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Convertir campo tipo LONG a VARCHAR2 para compatibilizar con Oracle 7</title>
		<link>http://colacios.es/blog/WordPress3/convertir-campo-tipo-long-a-varchar2-para-compatibilizar-con-oracle-7/</link>
		<comments>http://colacios.es/blog/WordPress3/convertir-campo-tipo-long-a-varchar2-para-compatibilizar-con-oracle-7/#comments</comments>
		<pubDate>Tue, 19 Feb 2013 12:26:22 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Administración Oracle]]></category>
		<category><![CDATA[ALL_VIEWS]]></category>
		<category><![CDATA[CURSOR]]></category>
		<category><![CDATA[DBLINK]]></category>
		<category><![CDATA[LONG]]></category>
		<category><![CDATA[ORA-00932]]></category>
		<category><![CDATA[VARCHAR2]]></category>

		<guid isPermaLink="false">http://colacios.es/blog/WordPress3/?p=267</guid>
		<description><![CDATA[&#160; &#160; &#160; Os pongo en contexto &#8230; Resulta que necesito saber que vistas de un usuario determinado están usando un DBLINK hacia otra Base de datos y el DBLINK está almacenado en una Base de datos Oracle 7. Para saber &#8230; <a href="http://colacios.es/blog/WordPress3/convertir-campo-tipo-long-a-varchar2-para-compatibilizar-con-oracle-7/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><a href="http://colacios.es/blog/WordPress3/wp-content/uploads/2013/02/imagesCAVTW1KC.jpe"><img class="wp-image-395 alignleft" title="Yo soy el tipo LONG" src="http://colacios.es/blog/WordPress3/wp-content/uploads/2013/02/imagesCAVTW1KC.jpe" alt="" width="105" height="145" /></a><a href="http://colacios.es/blog/WordPress3/wp-content/uploads/2013/02/imagesCALJ4EWI.jpe"><img class="wp-image-396 alignleft" title="Yo me he convertido a VARCHAR2 ...." src="http://colacios.es/blog/WordPress3/wp-content/uploads/2013/02/imagesCALJ4EWI.jpe" alt="" width="123" height="169" /></a></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p style="text-align: left;">
<p style="text-align: left;">Os pongo en contexto &#8230;</p>
<p>Resulta que necesito saber que vistas de un usuario determinado están usando un DBLINK hacia otra Base de datos y el DBLINK está almacenado en una Base de datos <strong>Oracle 7</strong>.</p>
<p style="text-align: justify;">Para saber las vistas necesito consultar la vista <strong><em>all_views</em></strong> cuyo campo <strong><em>text</em></strong> me indica el nombre y contenido del DBLINK. Por tanto, necesito realizar una consulta de esa vista y campo y buscar el texto <em>&#8220;@nombre_DBLINK&#8221;.</em></p>
<p style="text-align: justify;">¿ Que sucede ?</p>
<p style="text-align: justify;">Basicamente que el campo <strong><em>text</em></strong> de la vista <strong><em>all_views</em></strong> es de tipo <strong>LONG</strong> y por tanto, el realizar una búsqueda de una cadena determinada dentro de ese campo, usando por ejemplo &#8220;like&#8221; no funciona, nos dará el error &#8220;<em><strong>ORA-00932: tipos de dato inconsistentes</strong>&#8220;</em>. Pues para que funcionase debería ser de tipo <strong>CHAR</strong> o <strong>VARCHAR2</strong>.</p>
<p style="text-align: justify;">Ejemplo:</p>
<p style="text-align: justify;"><strong><em>select * from all_views</em></strong><br />
<strong><em>where text like &#8216;%@NOMBRE_DBLINK%&#8217;;<br />
</em></strong><em>ORA-00932: tipos de dato inconsistentes</em></p>
<p style="text-align: justify;">La solución pasa por convertir el campo text de tipo LONG a VARCHAR2 para poder consultar usando like (patrón de búsqueda).</p>
<p style="text-align: justify;">Para este proceso, crearé una tabla llamada <strong><em>tabla_vistas</em></strong> con los campos que necesito consultar y con un campo tipo VARCHAR2 que será el que usaré para almacenar la información del campo <strong><em>text</em></strong> de la vista <strong><em>all_views</em></strong> y que es de tipo LONG.</p>
<pre>CREATE TABLE tabla_vistas (
    propietario VARCHAR2(30),
    nombre_vista VARCHAR2(30),
    texto VARCHAR2(2000) -- En este campo almacenaré la información del campo text de all_views
    );</pre>
<p style="text-align: justify;">Una vez creada la tabla, cuyos tipos de datos en los campos coinciden con los que necesito de <strong><em>all_views</em></strong> excepto el campo &#8220;<em>texto</em>&#8221; que contendrá los datos sacados del campo &#8220;<em>text</em>&#8221; de tipo LONG, crearé un cursor de tipo explícito (<em>que son los que usamos cuando una consulta devuelve más de una fila</em>) que recorra la vista <strong><em>all_views</em></strong> y extraiga la información fila a fila y a su vez almacene cada fila en la nueva tabla creada, pero convirtiendo el campo text de <strong><em>all_views</em></strong> de <span style="text-decoration: underline;">LONG a VARCHAR2</span> para posteriormente, yo poder realizar una consulta sobre la tabla resultado usando la opción &#8220;like&#8221; para buscar una cadena determinada.</p>
<p style="text-align: justify;">Esto se hace de la siguiente manera:</p>
<pre>set serveroutput on size 320000
DECLARE
          CURSOR c1 IS
          SELECT owner,view_name, text FROM all_views;
          c_owner VARCHAR2(30);
          c_view_name VARCHAR2(30);
          c_text LONG;
          cadena2000 varchar2(2000);
    BEGIN
       OPEN c1;
      LOOP
          FETCH c1 INTO c_owner,c_view_name,c_text;
          cadena2000 := substr(c_text,1,2000);
          INSERT INTO tabla_vistas (propietario,nombre_vista,texto) VALUES (c_owner,c_view_name,cadena2000);
          EXIT WHEN c1%NOTFOUND;
           DBMS_OUTPUT.PUT_LINE('No se han encontrado datos.');
       ENDLOOP;
       CLOSE c1;
    END;</pre>
<p style="text-align: justify;">Ahora ya podemos realizar la consulta sobre la tabla &#8220;<strong><em>tabla_vistas</em></strong>&#8221; que contendrá todas las filas de <strong><em>all_views</em></strong> con los campos que necesitábamos y con el campo &#8220;<strong><em>text&#8221;</em></strong> de tipo LONG convertido a tipo VARCHAR2 en el campo &#8220;<strong><em>texto</em></strong>&#8221; del ejemplo.</p>
<pre>select * from tabla_vistas

where texto like '%@NOMBRE_DBLINK%'; <em><strong>-- Texto a buscar en la tabla resultados</strong></em></pre>
]]></content:encoded>
			<wfw:commentRss>http://colacios.es/blog/WordPress3/convertir-campo-tipo-long-a-varchar2-para-compatibilizar-con-oracle-7/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
