<?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; DBLINK</title>
	<atom:link href="http://colacios.es/blog/WordPress3/tag/dblink/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>Crear una tabla con contenido mediante database link de una base de datos a otra</title>
		<link>http://colacios.es/blog/WordPress3/crear-una-tabla-con-contenido-mediante-database-link-de-una-base-de-datos-a-otra/</link>
		<comments>http://colacios.es/blog/WordPress3/crear-una-tabla-con-contenido-mediante-database-link-de-una-base-de-datos-a-otra/#comments</comments>
		<pubDate>Thu, 31 Oct 2013 11:31:36 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Administración Oracle]]></category>
		<category><![CDATA[as select]]></category>
		<category><![CDATA[create table]]></category>
		<category><![CDATA[DATABASE LINK]]></category>
		<category><![CDATA[DBLINK]]></category>
		<category><![CDATA[STORAGE]]></category>

		<guid isPermaLink="false">http://colacios.es/blog/WordPress3/?p=647</guid>
		<description><![CDATA[En la siguiente entrada de Blog, voy a explicar como crear una tabla con contenido en una base de datos Oracle accediendo a otra base de datos Oracle mediante un database Link. Además voy a mostrar que la creación de &#8230; <a href="http://colacios.es/blog/WordPress3/crear-una-tabla-con-contenido-mediante-database-link-de-una-base-de-datos-a-otra/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;">En la siguiente entrada de Blog, voy a explicar como <span style="text-decoration: underline;">crear una tabla con contenido</span> en una base de datos Oracle accediendo a otra base de datos Oracle mediante un database Link. Además voy a mostrar que la creación de la tabla en destino puede presentar diferencias de storage dependiendo de cómo la creemos. Si queremos que sea idéntica a la de origen, tendremos que copiar sus parámetros de storage en la sentencia de creación. Esto es una manera de crear una tabla con contenido sin necesidad de utilizar las utilidades exp/imp ni expdp/impdp.</p>
<p style="text-align: justify;">Esto es muy útil cuando queremos crear una tabla que tenemos en Desarrollo o Pre-producción y queremos pasarlo al entorno de producción.</p>
<p style="text-align: justify;">Para el ejemplo daré por hecho que tenemos un Data Base Link creado que permite acceder a la Base de datos de destino. Un database link se crea de la siguiente manera:</p>
<pre style="text-align: justify;">CREATE PUBLIC DATABASE LINK "<em>MY_DBLINK</em>"
CONNECT TO <em>USUARIO_PRUEBA</em>
IDENTIFIED BY  "<em>&lt;pwd_usuario&gt;</em>"
USING '&lt;cadena_conexión&gt;'; <strong>-- Esto consiste en una cadena de conexión que debe estar en tnsnames.ora</strong></pre>
<p style="text-align: justify;">Puedes ampliar información sobre DBLinks <a href="http://colacios.es/blog/WordPress3/manipular-una-tabla-de-un-entorno-oracle-desde-otro-entorno-oracle-mediante-dblink/" target="_blank">aqui</a></p>
<p style="text-align: justify;">Para comprobar que el DBLink funciona, podemos hacer la consulta hacia la tabla que queremos copiar de la siguiente  manera:</p>
<pre>SQL&gt; SELECT * FROM USUARIO_PRUEBA.TABLA@MY_DBLINK;</pre>
<p style="text-align: justify;"> Ahora creamos la tabla con el contenido de la siguiente manera:</p>
<p style="text-align: justify;">- Primero nos conectamos a la Base de datos, con el usuario que corresponda, donde queremos crear la tabla con el contenido:</p>
<pre>sqlplus usuario_prueba@cadena_conexion</pre>
<p>- Ahora creamos la tabla &#8230;</p>
<pre style="text-align: justify;">SQL&gt; <strong>CREATE TABLE</strong> usuario_prueba.nombre_tabla <strong>AS SELECT</strong> * from USUARIO_PRUEBA.TABLA@MY_DBLINK;</pre>
<p style="text-align: justify;">Esta sentencia creará la tabla en el destino con su contenido, pero los parámetros de STORAGE serán los que tenga el tablespace donde esta asignado &#8220;usuario_prueba&#8221;. Es decir, no cogerá los valores de STORAGE que tiene la tabla en origen.</p>
<p style="text-align: justify;">Ahora probaremos con otro ejemplo, donde si detallamos el STORAGE que queremos y el tablespace donde queremos ubicar la tabla.</p>
<pre style="text-align: justify;">CREATE TABLE usuario_prueba.nombre_tabla
 <strong>TABLESPACE</strong> tablespace
 PCTUSED    40
 PCTFREE    10
 INITRANS   1
 MAXTRANS   255
 <strong>STORAGE  </strong>  (
 INITIAL          10016K
 NEXT             10000K
 MINEXTENTS       1
 MAXEXTENTS       499
 PCTINCREASE      0
 FREELISTS        1
 FREELIST GROUPS  1
 BUFFER_POOL      DEFAULT
 )
 LOGGING
 NOCACHE
 NOPARALLEL <strong>AS SELECT</strong> * FROM <strong>USUARIO_PRUEBA.TABLA@MY_DBLINK</strong>;</pre>
<p style="text-align: justify;">En este otro ejemplo, el storage que tendrá la tabla será el especificado en la misma sentecia CREATE TABLE, y los datos los cogerá exactamente igual que la sentencia anterior.</p>
<p style="text-align: justify;">
]]></content:encoded>
			<wfw:commentRss>http://colacios.es/blog/WordPress3/crear-una-tabla-con-contenido-mediante-database-link-de-una-base-de-datos-a-otra/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<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>
