<?xml version="1.0" encoding="UTF-8" standalone="no"?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:blogger="http://schemas.google.com/blogger/2008" xmlns:gd="http://schemas.google.com/g/2005" xmlns:georss="http://www.georss.org/georss" xmlns:openSearch="http://a9.com/-/spec/opensearchrss/1.0/" xmlns:thr="http://purl.org/syndication/thread/1.0"><id>tag:blogger.com,1999:blog-26801181</id><updated>2026-04-01T01:07:58.537+02:00</updated><category term="Tutorial PL/SQL"/><category term="Bases de datos Oracle"/><category term="Optimización y tuning de bases de datos"/><category term="Utilidades PLSQL"/><category term="Librerías estándar PLSQL"/><title type="text">Programación PL/SQL</title><subtitle type="html">El lenguaje de programación de bases de datos Oracle PL/SQL. Librerías y funciones estándar SQL y PLSQL.</subtitle><link href="https://www.plsql.biz/feeds/posts/default" rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml"/><link href="https://www.blogger.com/feeds/26801181/posts/default?alt=atom&amp;redirect=false" rel="self" type="application/atom+xml"/><link href="https://www.plsql.biz/" rel="alternate" type="text/html"/><link href="http://pubsubhubbub.appspot.com/" rel="hub"/><link href="https://www.blogger.com/feeds/26801181/posts/default?alt=atom&amp;start-index=26&amp;max-results=25&amp;redirect=false" rel="next" type="application/atom+xml"/><author><name>JLPM</name><uri>http://www.blogger.com/profile/00891045835734721638</uri><email>noreply@blogger.com</email><gd:image height="32" rel="http://schemas.google.com/g/2005#thumbnail" src="//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjU8mDZ-KX_fXrz-RDI8r7soJeLIPcBFRmx8QPNkZABwfC9gv6qMWafd3EvDJCmOaGUyBnhjVbWhx_ER8DfMEaMlvoFiiLYwj5OqKt724MgjMJROYG5WcNgZewAqXoIYw/s220/Yo.gif" width="32"/></author><generator uri="http://www.blogger.com" version="7.00">Blogger</generator><openSearch:totalResults>107</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><xhtml:meta content="noindex" name="robots" xmlns:xhtml="http://www.w3.org/1999/xhtml"/><entry><id>tag:blogger.com,1999:blog-26801181.post-1216356065629687416</id><published>2026-03-18T06:00:00.001+01:00</published><updated>2026-03-18T10:34:46.448+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Bases de datos Oracle"/><category scheme="http://www.blogger.com/atom/ns#" term="Tutorial PL/SQL"/><title type="text">Asignación de permisos (ROLES) a los programas PLSQL</title><content type="html">&lt;p&gt;Con anterioridad a la versión 12c de la base de datos Oracle, un procedimiento PLSQL o unidad de programa con privilegios definidos a través de la cláusula &lt;b&gt;AUTHID DEFINER&lt;/b&gt; siempre se ejecutaba con los privilegios del propietario del programa. Por otro lado, cuando la misma unidad de programa se definía utilizando la cláusula &lt;b&gt;AUTHID CURRENT_USER&lt;/b&gt;, dicho programa siempre se ejecutaba con los privilegios del usuario que lo ejecutaba.&lt;/p&gt;

&lt;div class="separator" style="clear: both;"&gt;&lt;p&gt;&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjxCfneT1QbISkis3qZ_ibxOdvlillGj6kH3CGHvUKW-xduUwHDAdfLFT_7jwWJihTZ_JsLniw6W08Ox5-6-uasli_-lIachDed7s8XPy9ujrjl6UxZ7QkRSCXrPlpHEpSnYSHQeHCDSOZTJorAHuD9J_is3PwaZPMOuZxbAZKG670OWka8bDQtuLy3QqMG/s941/CREATE-ROLE.jpg" style="display: block; padding: 1em 0; text-align: center; "&gt;&lt;img alt="CREATE ROLE" title="Asignación de permisos (ROLES) a los programas PLSQL" border="0" width="400" data-original-height="498" data-original-width="941" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjxCfneT1QbISkis3qZ_ibxOdvlillGj6kH3CGHvUKW-xduUwHDAdfLFT_7jwWJihTZ_JsLniw6W08Ox5-6-uasli_-lIachDed7s8XPy9ujrjl6UxZ7QkRSCXrPlpHEpSnYSHQeHCDSOZTJorAHuD9J_is3PwaZPMOuZxbAZKG670OWka8bDQtuLy3QqMG/s400/CREATE-ROLE.jpg"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;

&lt;p&gt;Disponer de solo estas dos formas de utilización de la cláusula AUTHID &lt;b&gt;limitaba bastante la funcionalidad de las bases de datos Oracle en cuestión de seguridad&lt;/b&gt;, ya que cuando un usuario necesitaba ejecutar un programa PL/SQL determinado, dicho usuario tenía que tener los mismos privilegios que el propietario del programa. El problema de seguridad se agravaba mucho más cuando eran todos los usuarios los que necesitan tener acceso a dicho programa.&lt;/p&gt;

&lt;a href="https://www.plsql.biz/2014/01/asignacion-de-permisos-ROLES-a-programas-PLSQL.html#more"&gt;Haz clic aquí para leer todo el artículo&lt;/a&gt;</content><link href="https://www.plsql.biz/feeds/1216356065629687416/comments/default" rel="replies" title="Enviar comentarios" type="application/atom+xml"/><link href="https://www.blogger.com/comment/fullpage/post/26801181/1216356065629687416?isPopup=true" rel="replies" title="0 comentarios" type="text/html"/><link href="https://www.blogger.com/feeds/26801181/posts/default/1216356065629687416" rel="edit" type="application/atom+xml"/><link href="https://www.blogger.com/feeds/26801181/posts/default/1216356065629687416" rel="self" type="application/atom+xml"/><link href="https://www.plsql.biz/2014/01/asignacion-de-permisos-ROLES-a-programas-PLSQL.html" rel="alternate" title="Asignación de permisos (ROLES) a los programas PLSQL" type="text/html"/><author><name>JLPM</name><uri>http://www.blogger.com/profile/00891045835734721638</uri><email>noreply@blogger.com</email><gd:image height="32" rel="http://schemas.google.com/g/2005#thumbnail" src="//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjU8mDZ-KX_fXrz-RDI8r7soJeLIPcBFRmx8QPNkZABwfC9gv6qMWafd3EvDJCmOaGUyBnhjVbWhx_ER8DfMEaMlvoFiiLYwj5OqKt724MgjMJROYG5WcNgZewAqXoIYw/s220/Yo.gif" width="32"/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" height="72" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjxCfneT1QbISkis3qZ_ibxOdvlillGj6kH3CGHvUKW-xduUwHDAdfLFT_7jwWJihTZ_JsLniw6W08Ox5-6-uasli_-lIachDed7s8XPy9ujrjl6UxZ7QkRSCXrPlpHEpSnYSHQeHCDSOZTJorAHuD9J_is3PwaZPMOuZxbAZKG670OWka8bDQtuLy3QqMG/s72-c/CREATE-ROLE.jpg" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-26801181.post-1109011665066103671</id><published>2026-02-24T06:30:00.001+01:00</published><updated>2026-02-24T09:32:06.887+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Bases de datos Oracle"/><title type="text">¿Qué es la creación diferida de segmentos (Deferred Segment Creation)?</title><content type="html">&lt;p&gt;En las versiones anteriores a la &lt;span style="font-weight:bold;"&gt;release 2 de la base de datos Oracle 11g&lt;/span&gt;, cuando se creaba cualquier objeto en la base de datos utilizando una sentencia SQL o PL/SQL, ya fuera un tabla, un índice o cualquier otro objeto que requiriese ser almacenado, el gestor de la base de datos creaba los segmentos necesarios y asignaba un tamaño inicial a los mismos, un tamaño que podía ser pequeño, de unos 64 Kbytes mínimo, pero dicho espacio ya no podía ser utilizado para otras necesidades. En los tiempos actuales, un tamaño de 64 Kbytes no es nada, pero si algo tan pequeño se tienen que repetir muchas veces, entonces el consumo de recursos de almacenamiento puede llegar a ser bastante grande.&lt;/p&gt;

&lt;div class="separator" style="clear: both;"&gt;&lt;p&gt;&lt;a href="/2010/06/creacion-diferida-segmentos-deferred.html#more" style="display: block; padding: 1em 0; text-align: center; "&gt;&lt;img alt="deferred_segment_creation" title="Creación diferida de segmentos " border="0" width="400" data-original-height="410" data-original-width="797" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgGqQ023JMT6-V73lxzvJcSimQ5GsO7dsmq7H986AtZLoNbv_aY6yLczo7dJtc1BoxVW2oAeuJDy_yus24yL-LOBvHD01VQxmuO6imDIHrmOYQMJcUtZE0-qdyYTrK9WunJw6ZB6wkq_pbu1zD1uzl1wvFKgnMirBczCCSjZ6Ywjf5W6Um-NT1LGK9IBcC-/s400/deferred_segment_creation.png"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;

&lt;p&gt;Por ejemplo, podemos pensar en alguna aplicación que necesitase crear cientos o miles de tablas, tablas que nunca van a ser utilizadas pero cuyos segmentos de almacenamiento tienen que ser creados de todas formas. Algunos pueden preguntarse por qué un aplicación puede necesitar crear tablas que nunca van a ser utilizadas, este hecho no es tan extraño ya que existen muchas aplicaciones, como por ejemplo Oracle Financials, que ofrecen funcionalidades que requieren el uso de determinadas tablas y dichas tablas sólo contienen datos cuando se hace uso de dichas funcionalidades. Para evitar el consumo de almacenamiento en este tipo de situaciones, la release 2 de la base de datos Oracle 11g incorpora una &lt;span style="font-weight:bold;"&gt;nueva funcionalidad&lt;/span&gt; conocida como &lt;span style="font-weight:bold;"&gt;creación diferida de segmentos&lt;/span&gt; (&lt;span style="font-weight:bold;"&gt;&lt;i&gt;Deferred Segment Creation&lt;/i&gt;&lt;/span&gt;), funcionalidad que a continuación explicaremos y analizaremos.&lt;/p&gt;

&lt;a href="https://www.plsql.biz/2010/06/creacion-diferida-segmentos-deferred.html#more"&gt;Haz clic aquí para leer todo el artículo&lt;/a&gt;</content><link href="https://www.plsql.biz/feeds/1109011665066103671/comments/default" rel="replies" title="Enviar comentarios" type="application/atom+xml"/><link href="https://www.blogger.com/comment/fullpage/post/26801181/1109011665066103671?isPopup=true" rel="replies" title="2 comentarios" type="text/html"/><link href="https://www.blogger.com/feeds/26801181/posts/default/1109011665066103671" rel="edit" type="application/atom+xml"/><link href="https://www.blogger.com/feeds/26801181/posts/default/1109011665066103671" rel="self" type="application/atom+xml"/><link href="https://www.plsql.biz/2010/06/creacion-diferida-segmentos-deferred.html" rel="alternate" title="¿Qué es la creación diferida de segmentos (Deferred Segment Creation)?" type="text/html"/><author><name>JLPM</name><uri>http://www.blogger.com/profile/00891045835734721638</uri><email>noreply@blogger.com</email><gd:image height="32" rel="http://schemas.google.com/g/2005#thumbnail" src="//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjU8mDZ-KX_fXrz-RDI8r7soJeLIPcBFRmx8QPNkZABwfC9gv6qMWafd3EvDJCmOaGUyBnhjVbWhx_ER8DfMEaMlvoFiiLYwj5OqKt724MgjMJROYG5WcNgZewAqXoIYw/s220/Yo.gif" width="32"/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" height="72" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgGqQ023JMT6-V73lxzvJcSimQ5GsO7dsmq7H986AtZLoNbv_aY6yLczo7dJtc1BoxVW2oAeuJDy_yus24yL-LOBvHD01VQxmuO6imDIHrmOYQMJcUtZE0-qdyYTrK9WunJw6ZB6wkq_pbu1zD1uzl1wvFKgnMirBczCCSjZ6Ywjf5W6Um-NT1LGK9IBcC-/s72-c/deferred_segment_creation.png" width="72"/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-26801181.post-7457207638394040851</id><published>2026-02-03T06:30:00.000+01:00</published><updated>2026-02-03T09:59:33.595+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Bases de datos Oracle"/><category scheme="http://www.blogger.com/atom/ns#" term="Tutorial PL/SQL"/><title type="text">Cláusula WITH FUNCTION</title><content type="html">&lt;h2 style="font-size:130%"&gt;Uso de funciones PLSQL dentro de una sentencia SELECT&lt;/h2&gt;

&lt;p&gt;Ya hace bastante tiempo que los programadores de bases de datos Oracle podemos llamar a nuestras propias funciones PL/SQL desde una sentencia SQL. Por ejemplo, supongamos que definimos la función PORCENTAJE que realiza una serie de cálculos para devolver un porcentaje. La función puede ser algo tan sencillo como:&lt;/p&gt;

&lt;div class="separator" style="clear: both;"&gt;&lt;p&gt;&lt;a href="/2013/10/with-function-oracle-12c.html#more" style="display: block; padding: 1em 0; text-align: center; "&gt;&lt;img border="0" width="400" data-original-height="359" data-original-width="700" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjz51-izGhsDZGtClMUbgAJ61San_XbgW88_ByYG8VJfrOWKV5v1slr2Q5C1s19Q4QF512B3VbhVGYDYtHia_NOB2XJLDsUUEosJ2wU93YzDw7lNcVAjvT0DvgnIfnalsDGSBsrj0i5oZm1ZDIPP3UkGGI3hCTdk4cuHAxxKrAHdhIK1LIC9xJztmJG2UXh/s400/Clausula-WITH-FUNCTION.jpg" alt="Cláusula WITH FUNCTION" title="Cláusula WITH FUNCTION"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;

&lt;blockquote&gt;&lt;pre&gt;&lt;p&gt;FUNCTION porcentaje (
  val1 IN NUMBER,
  val2 IN NUMBER
)
RETURN NUMBER
IS
BEGIN
  RETURN (val1*100/(val1+val2));
END;&lt;/p&gt;&lt;/pre&gt;&lt;/blockquote&gt;

&lt;a href="https://www.plsql.biz/2013/10/with-function-oracle-12c.html#more"&gt;Haz clic aquí para leer todo el artículo&lt;/a&gt;</content><link href="https://www.plsql.biz/feeds/7457207638394040851/comments/default" rel="replies" title="Enviar comentarios" type="application/atom+xml"/><link href="https://www.blogger.com/comment/fullpage/post/26801181/7457207638394040851?isPopup=true" rel="replies" title="0 comentarios" type="text/html"/><link href="https://www.blogger.com/feeds/26801181/posts/default/7457207638394040851" rel="edit" type="application/atom+xml"/><link href="https://www.blogger.com/feeds/26801181/posts/default/7457207638394040851" rel="self" type="application/atom+xml"/><link href="https://www.plsql.biz/2013/10/with-function-oracle-12c.html" rel="alternate" title="Cláusula WITH FUNCTION" type="text/html"/><author><name>JLPM</name><uri>http://www.blogger.com/profile/00891045835734721638</uri><email>noreply@blogger.com</email><gd:image height="32" rel="http://schemas.google.com/g/2005#thumbnail" src="//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjU8mDZ-KX_fXrz-RDI8r7soJeLIPcBFRmx8QPNkZABwfC9gv6qMWafd3EvDJCmOaGUyBnhjVbWhx_ER8DfMEaMlvoFiiLYwj5OqKt724MgjMJROYG5WcNgZewAqXoIYw/s220/Yo.gif" width="32"/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" height="72" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjz51-izGhsDZGtClMUbgAJ61San_XbgW88_ByYG8VJfrOWKV5v1slr2Q5C1s19Q4QF512B3VbhVGYDYtHia_NOB2XJLDsUUEosJ2wU93YzDw7lNcVAjvT0DvgnIfnalsDGSBsrj0i5oZm1ZDIPP3UkGGI3hCTdk4cuHAxxKrAHdhIK1LIC9xJztmJG2UXh/s72-c/Clausula-WITH-FUNCTION.jpg" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-26801181.post-115514201330923605</id><published>2026-01-19T06:30:00.001+01:00</published><updated>2026-01-19T11:20:40.069+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Optimización y tuning de bases de datos"/><title type="text">Bucles y problemas de rendimiento (performance)</title><content type="html">&lt;p&gt;El lenguaje PL/SQL permite la construcción de bucles, esta funcionalidad es, sin duda, extremadamente útil. No obstante, utilizar bucles puede causar problemas de rendimiento en nuestras rutinas, aunque ciertamente estos problemas son fáciles de determinar y corregir.&lt;/p&gt;

&lt;div class="separator" style="clear: both;"&gt;&lt;p&gt;&lt;a href="/2006/08/bucles-y-problemas-de-rendimiento.html#more" style="display: block; padding: 1em 0; text-align: center; "&gt;&lt;img alt="Sentencia FOR LOOP y rendimiento PLSQL" title="Bucles y problemas de rendimiento (performance)" border="0" width="400" data-original-height="441" data-original-width="750" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiqTHXPyZSMXYoKYdTRPZb1JcXMcUq6jUxdILq5jx-VPdQPU0SzCGOix81M4AYq_R5RcU8BK4LnVcHPyMDLtjJoxoceO27I2Be5knbAhw17z7vEWVGQRu4eSCPT7n4ImXX5hUjh57DcyOeouGhtwEwOJbxwe2UM-kHPAabOAFgKsaNZt3Ka1OlkTPwCv_5X/s400/plsql-bucles-y-rendimiento.jpg"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;

&lt;p&gt;Imaginemos que una rutina PL/SQL contiene una sentencia select y los registros que devuelve son utilizados para actualizar otra tabla dentro de un bucle. Por ejemplo:&lt;/p&gt;

&lt;p&gt;FOR bucle1 IN (&lt;br&gt;
  SELECT articulo&lt;br&gt;
  FROM articulos&lt;br&gt;
  WHERE descripcion = &amp;#39;%zapato%&amp;#39;&lt;br&gt;
) LOOP&lt;br&gt;
  UPDATE precios&lt;br&gt;
  SET precio = precio * 1.05&lt;br&gt;
  WHERE articulo = bucle1.articulo;&lt;br&gt;
END LOOP;&lt;/p&gt;

&lt;a href="https://www.plsql.biz/2006/08/bucles-y-problemas-de-rendimiento.html#more"&gt;Haz clic aquí para leer todo el artículo&lt;/a&gt;</content><link href="https://www.plsql.biz/feeds/115514201330923605/comments/default" rel="replies" title="Enviar comentarios" type="application/atom+xml"/><link href="https://www.blogger.com/comment/fullpage/post/26801181/115514201330923605?isPopup=true" rel="replies" title="5 comentarios" type="text/html"/><link href="https://www.blogger.com/feeds/26801181/posts/default/115514201330923605" rel="edit" type="application/atom+xml"/><link href="https://www.blogger.com/feeds/26801181/posts/default/115514201330923605" rel="self" type="application/atom+xml"/><link href="https://www.plsql.biz/2006/08/bucles-y-problemas-de-rendimiento.html" rel="alternate" title="Bucles y problemas de rendimiento (performance)" type="text/html"/><author><name>JLPM</name><uri>http://www.blogger.com/profile/00891045835734721638</uri><email>noreply@blogger.com</email><gd:image height="32" rel="http://schemas.google.com/g/2005#thumbnail" src="//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjU8mDZ-KX_fXrz-RDI8r7soJeLIPcBFRmx8QPNkZABwfC9gv6qMWafd3EvDJCmOaGUyBnhjVbWhx_ER8DfMEaMlvoFiiLYwj5OqKt724MgjMJROYG5WcNgZewAqXoIYw/s220/Yo.gif" width="32"/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" height="72" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiqTHXPyZSMXYoKYdTRPZb1JcXMcUq6jUxdILq5jx-VPdQPU0SzCGOix81M4AYq_R5RcU8BK4LnVcHPyMDLtjJoxoceO27I2Be5knbAhw17z7vEWVGQRu4eSCPT7n4ImXX5hUjh57DcyOeouGhtwEwOJbxwe2UM-kHPAabOAFgKsaNZt3Ka1OlkTPwCv_5X/s72-c/plsql-bucles-y-rendimiento.jpg" width="72"/><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-26801181.post-1165597450760591455</id><published>2025-12-18T06:30:00.000+01:00</published><updated>2025-12-18T11:47:31.519+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Bases de datos Oracle"/><title type="text">El diccionario de datos PL/SQL en las bases de datos Oracle</title><content type="html">&lt;p&gt;Si habéis llegado hasta este artículo es muy probable que tengáis que escribir en algunas ocasiones código PLSQL. Esto quiere decir que también, al menos ocasionalmente, necesitaréis analizar dicho código contestando cuestiones como:&lt;/p&gt;

&lt;ul&gt;&lt;li&gt;¿De qué objetos de la base de datos depende mi programa?&lt;/li&gt;
&lt;li&gt;¿Cuáles de mis paquetes PL/SQL contienen llamadas a subprogramas en otros paquetes o referencias a variables globales?&lt;/li&gt;
&lt;li&gt;¿Contiene alguno de mis subrutinas PLSQL parámetros con tipos de datos que no se deberían seguir utilizando?&lt;/li&gt;
&lt;li&gt;¿Están todo mi código compilado con el suficiente nivel de optimización?&lt;/li&gt;&lt;/ul&gt;

&lt;div class="separator" style="clear: both;"&gt;&lt;p&gt;&lt;a href="/2013/07/diccionario-datos-PLSQL-bases-de-datos-oracle.html#more" style="display: block; padding: 1em 0; text-align: center; "&gt;&lt;img alt="Diccionario de datos PLSQL de las bases de datos Oracle" title="El diccionario de datos PL/SQL en las bases de datos Oracle" border="0" width="400" data-original-height="465" data-original-width="699" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgUSrpcvAgFhddmtIU1ZEEGmLAi5xc2WDZyee-wx-iQFRSi4ZUYyRZj_qkWxuQWvA8jj0do-jibNGO92GliEWVIUoqtbZmRoH8_KyGj2Cqn9Ns3jZBGc8MnTILjnBDV-afIPLzfTq4jSPupMq29AzauE9zESGaEKGg8RM0Be0wklPmrtnYAGQXLi-tSFhd5/s400/Oracle-Database-Data-Dictionary.jpg"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;

&lt;p&gt;Obviamente, siempre podréis utilizar las &lt;b&gt;funcionalidades de búsqueda de vuestro editor PL/SQL&lt;/b&gt; o de vuestro sistema integrado de desarrollo para navegar a través de los múltiples objetos y ficheros de la base de datos Oracle tratando de encontrar específicos pedazos de texto. Pero esto no sería suficiente para poder contestar todas las preguntas anteriores y algunas más que os pudieran surgir. Con este artículo y algunos más que escribiré más adelante podréis conocer las respuestas a dichas preguntas, y para ello hay que conocer &lt;b&gt;en que consiste el diccionario de datos PLSQL de las bases de datos Oracle&lt;/b&gt;.&lt;/p&gt;

&lt;a href="https://www.plsql.biz/2013/07/diccionario-datos-PLSQL-bases-de-datos-oracle.html#more"&gt;Haz clic aquí para leer todo el artículo&lt;/a&gt;</content><link href="https://www.plsql.biz/feeds/1165597450760591455/comments/default" rel="replies" title="Enviar comentarios" type="application/atom+xml"/><link href="https://www.blogger.com/comment/fullpage/post/26801181/1165597450760591455?isPopup=true" rel="replies" title="0 comentarios" type="text/html"/><link href="https://www.blogger.com/feeds/26801181/posts/default/1165597450760591455" rel="edit" type="application/atom+xml"/><link href="https://www.blogger.com/feeds/26801181/posts/default/1165597450760591455" rel="self" type="application/atom+xml"/><link href="https://www.plsql.biz/2013/07/diccionario-datos-PLSQL-bases-de-datos-oracle.html" rel="alternate" title="El diccionario de datos PL/SQL en las bases de datos Oracle" type="text/html"/><author><name>JLPM</name><uri>http://www.blogger.com/profile/00891045835734721638</uri><email>noreply@blogger.com</email><gd:image height="32" rel="http://schemas.google.com/g/2005#thumbnail" src="//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjU8mDZ-KX_fXrz-RDI8r7soJeLIPcBFRmx8QPNkZABwfC9gv6qMWafd3EvDJCmOaGUyBnhjVbWhx_ER8DfMEaMlvoFiiLYwj5OqKt724MgjMJROYG5WcNgZewAqXoIYw/s220/Yo.gif" width="32"/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" height="72" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgUSrpcvAgFhddmtIU1ZEEGmLAi5xc2WDZyee-wx-iQFRSi4ZUYyRZj_qkWxuQWvA8jj0do-jibNGO92GliEWVIUoqtbZmRoH8_KyGj2Cqn9Ns3jZBGc8MnTILjnBDV-afIPLzfTq4jSPupMq29AzauE9zESGaEKGg8RM0Be0wklPmrtnYAGQXLi-tSFhd5/s72-c/Oracle-Database-Data-Dictionary.jpg" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-26801181.post-6480482814124430133</id><published>2025-11-26T06:30:00.000+01:00</published><updated>2025-11-26T12:13:26.511+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Tutorial PL/SQL"/><title type="text">Gestión de errores en PL/SQL: generación de excepciones desde el código</title><content type="html">&lt;p&gt;En la mayoría de los casos, cuando una de nuestras aplicaciones PLSQL genera una excepción, es la base de datos Oracle la encargada de notificarlo automáticamente. Es decir, un programa PL/SQL reportará un error si durante la ejecución del mismo ocurre algún tipo de problema que la base de datos Oracle no puede manejar por si sola y nuestro código no tiene control sobre el mismo (ver artículo sobre el &lt;a href="/2007/01/manejo-de-excepciones-el-plsql.html"&gt;&lt;b&gt;manejo de excepciones con PL/SQL&lt;/b&gt;&lt;/a&gt;).&lt;/p&gt;

&lt;div class="separator" style="clear: both;"&gt;&lt;p&gt;&lt;a href="/2012/07/generacion-de-excepciones-en-plsql.html#more" style="display: block; padding: 1em 0; text-align: center; "&gt;&lt;img alt="RAISE_APPICATION_ERROR" title="Gestión de errores en PL/SQL: generación de excepciones" border="0" width="400" data-original-height="385" data-original-width="700" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh2rQ_e883FN5iyjoZ7QusljITgqU5g7u9JPHN-8IFij_1ZIU8ZwryahVDlD8POYYFFQFvEU85HFe916Hz-9WLGx-XcvlvOtefQrVOrZG2h53LFlScdx4VLurWz_-C5qudqwSUGrubvqaYNTW224qohrj1SqeYJSYgtJkgUH0Y3ZgHrUa3SKCaTMoMSM1Zo/s400/RAISE_APPLICATION_ERROR.jpg"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;

&lt;p&gt;Lo que muchos programadores desconocen es que &lt;b&gt;PLSQL permite generar excepciones desde el propio código&lt;/b&gt;. ¿Por qué el código PL/SQL permite esto? Porque no todos los errores en una aplicación son debidos a fallos de procesamiento internos de la base de datos Oracle. También es posible que determinadas condiciones en los datos constituyan un error para nuestra aplicación, en cuyo caso necesitaremos parar nuestro programa y, con mucha probabilidad, notificar al usuario de que algo va mal.&lt;/p&gt;

&lt;a href="https://www.plsql.biz/2012/07/generacion-de-excepciones-en-plsql.html#more"&gt;Haz clic aquí para leer todo el artículo&lt;/a&gt;</content><link href="https://www.plsql.biz/feeds/6480482814124430133/comments/default" rel="replies" title="Enviar comentarios" type="application/atom+xml"/><link href="https://www.blogger.com/comment/fullpage/post/26801181/6480482814124430133?isPopup=true" rel="replies" title="0 comentarios" type="text/html"/><link href="https://www.blogger.com/feeds/26801181/posts/default/6480482814124430133" rel="edit" type="application/atom+xml"/><link href="https://www.blogger.com/feeds/26801181/posts/default/6480482814124430133" rel="self" type="application/atom+xml"/><link href="https://www.plsql.biz/2012/07/generacion-de-excepciones-en-plsql.html" rel="alternate" title="Gestión de errores en PL/SQL: generación de excepciones desde el código" type="text/html"/><author><name>JLPM</name><uri>http://www.blogger.com/profile/00891045835734721638</uri><email>noreply@blogger.com</email><gd:image height="32" rel="http://schemas.google.com/g/2005#thumbnail" src="//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjU8mDZ-KX_fXrz-RDI8r7soJeLIPcBFRmx8QPNkZABwfC9gv6qMWafd3EvDJCmOaGUyBnhjVbWhx_ER8DfMEaMlvoFiiLYwj5OqKt724MgjMJROYG5WcNgZewAqXoIYw/s220/Yo.gif" width="32"/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" height="72" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh2rQ_e883FN5iyjoZ7QusljITgqU5g7u9JPHN-8IFij_1ZIU8ZwryahVDlD8POYYFFQFvEU85HFe916Hz-9WLGx-XcvlvOtefQrVOrZG2h53LFlScdx4VLurWz_-C5qudqwSUGrubvqaYNTW224qohrj1SqeYJSYgtJkgUH0Y3ZgHrUa3SKCaTMoMSM1Zo/s72-c/RAISE_APPLICATION_ERROR.jpg" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-26801181.post-104755351920358541</id><published>2025-11-21T07:30:00.070+01:00</published><updated>2025-11-21T13:45:10.326+01:00</updated><title type="text">¿Cómo elegir un dominio web sólido para entornos profesionales, proyectos técnicos y aplicaciones empresariales?</title><content type="html">&lt;p&gt;Cuando planificas un proyecto técnico o empresarial, el &lt;a href="https://www.cdmon.com/es/dominios/registrar-dominios" target="_blank"&gt;dominio web&lt;/a&gt; no es un simple nombre bonito. Su elección influye directamente en la infraestructura digital que sostendrá tus servicios, afectando DNS, certificados de seguridad y despliegues automáticos. Seleccionar un dominio adecuado desde el inicio evita dolores de cabeza posteriores y mejora la percepción profesional de tu proyecto.&lt;/p&gt;

&lt;div class="separator" style="clear: both;"&gt;&lt;p&gt;&lt;a href="/2025/11/elegir-dominio-web-para-aplicaciones-empresariales.html#more" style="display: block; padding: 1em 0; text-align: center; "&gt;&lt;img alt="Dominios web para aplicaciones empresariales" title="¿Cómo elegir un dominio web sólido para entornos profesionales, proyectos técnicos y aplicaciones empresariales?" border="0" width="400" data-original-height="393" data-original-width="589" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg24pATEP8fBwZi33X40cindjf_LRjQi3QQxDntz9k1Ve0V2YVMrGmR4nujOwOvhAQqWP2IJJf4uqScYWeIJUoMoDuCfyEdoDp2denpa9UvrdyFVzsL5lPKmhyphenhyphenQgf_FQbohNvupxTN8RU8a3GezuhnSdM4U1VB-4Xp3xSfKST4lyHHKzRORzqAAXlD6zPaP/s400/dominios-aplicaciones-empresariales.jpg"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;

&lt;p&gt;Además, un buen dominio ayuda a mantener ordenadas las dependencias entre entornos de desarrollo, staging y producción, mientras que una estructura de nombres pensada &lt;b&gt;facilita la integración con sistemas cloud y pipelines de CI/CD&lt;/b&gt;. Esta organización evita conflictos entre subdominios y facilita la escalabilidad del proyecto a medida que crece la base de usuarios o servicios.&lt;/p&gt;

&lt;a href="https://www.plsql.biz/2025/11/elegir-dominio-web-para-aplicaciones-empresariales.html#more"&gt;Haz clic aquí para leer todo el artículo&lt;/a&gt;</content><link href="https://www.plsql.biz/feeds/104755351920358541/comments/default" rel="replies" title="Enviar comentarios" type="application/atom+xml"/><link href="https://www.blogger.com/comment/fullpage/post/26801181/104755351920358541?isPopup=true" rel="replies" title="0 comentarios" type="text/html"/><link href="https://www.blogger.com/feeds/26801181/posts/default/104755351920358541" rel="edit" type="application/atom+xml"/><link href="https://www.blogger.com/feeds/26801181/posts/default/104755351920358541" rel="self" type="application/atom+xml"/><link href="https://www.plsql.biz/2025/11/elegir-dominio-web-para-aplicaciones-empresariales.html" rel="alternate" title="¿Cómo elegir un dominio web sólido para entornos profesionales, proyectos técnicos y aplicaciones empresariales?" type="text/html"/><author><name>JLPM</name><uri>http://www.blogger.com/profile/00891045835734721638</uri><email>noreply@blogger.com</email><gd:image height="32" rel="http://schemas.google.com/g/2005#thumbnail" src="//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjU8mDZ-KX_fXrz-RDI8r7soJeLIPcBFRmx8QPNkZABwfC9gv6qMWafd3EvDJCmOaGUyBnhjVbWhx_ER8DfMEaMlvoFiiLYwj5OqKt724MgjMJROYG5WcNgZewAqXoIYw/s220/Yo.gif" width="32"/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" height="72" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg24pATEP8fBwZi33X40cindjf_LRjQi3QQxDntz9k1Ve0V2YVMrGmR4nujOwOvhAQqWP2IJJf4uqScYWeIJUoMoDuCfyEdoDp2denpa9UvrdyFVzsL5lPKmhyphenhyphenQgf_FQbohNvupxTN8RU8a3GezuhnSdM4U1VB-4Xp3xSfKST4lyHHKzRORzqAAXlD6zPaP/s72-c/dominios-aplicaciones-empresariales.jpg" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-26801181.post-2566506188183809048</id><published>2025-11-05T06:30:00.000+01:00</published><updated>2025-11-05T11:58:57.003+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Bases de datos Oracle"/><category scheme="http://www.blogger.com/atom/ns#" term="Utilidades PLSQL"/><title type="text">La vista ALL_IDENTIFIERS, usos y funcionalidades (2)</title><content type="html">&lt;p&gt;Ya escribí con anterioridad un &lt;a href="/2018/07/pl-scope-user-identifiers-1.html"&gt;&lt;b&gt;articulo introductorio sobre la vista ALL_IDENTIFIERS&lt;/b&gt;&lt;/a&gt;. ALL_IDENTIFIERS muestra información relevante sobre todos los identificadores de los objetos PL/SQL o unidades de programa almacenados en la base de datos Oracle a los que tiene accesos un determinado usuario.&lt;/p&gt;

&lt;div class="separator" style="clear: both;"&gt;&lt;p&gt;&lt;a href="/2018/08/vista-all-identifiers-usos-y-funcionalidades.html#more" style="display: block; padding: 1em 0; text-align: center; "&gt;&lt;img alt="ALL_IDENTIFIERS" title="La vista ALL_IDENTIFIERS, usos y funcionalidad (2)" border="0" width="400" data-original-height="403" data-original-width="712" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj6VK9Soh3wcJ-jq1mAUzymho2DcZp1PRYP-tIm31mcHLWJXTIEmJcj46sJWzFMEY77Bt4tslz-NdM_IPmA_JiqQk9DXyZYMTsn2gae__7TYyHjmTrKMWTzKcVzq0mxz7V9pLuHQEe7bUFlwRl-xy_2s_59OrCz6EefFKcMjGN0LwCo-ahWWGG0Ls_DamxN/s400/ALL_IDENTIFIERS.jpg"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;

&lt;p&gt;Las columnas clave de la vista ALL_IDENTIFIERS son:&lt;/p&gt;

&lt;ul&gt;&lt;li&gt;&lt;b&gt;OWNER&lt;/b&gt;: El propietario de objeto PL/SQL o unidad de programa que contiene el identificador.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;NAME&lt;/b&gt;: Nombre del identificador.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;TYPE&lt;/b&gt;: Tipo de identificador (por ejemplo, FORALL OUT, CONSTANT, PACKAGE o RECORD).&lt;/li&gt;
&lt;li&gt;&lt;b&gt;SIGNATURE&lt;/b&gt;: Cadena única asignada a cada identificador, útil para poder distinguir entre los diferentes identificadores que tienen el mismo nombre.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;OBJECT_NAME&lt;/b&gt;: Nombre del objeto o unidad de programa que contiene el identificador.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;OBJECT_TYPE&lt;/b&gt;: Tipo del objeto o unidad de programa que contiene el identificador (por ejemplo, PACKAGE, TRIGGER o PROCEDURE).&lt;/li&gt;
&lt;li&gt;&lt;b&gt;USAGE&lt;/b&gt;: Tipo de uso del dentificador.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;USAGE_ID&lt;/b&gt;: Identificador único del uso del identificador.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;USAGE_CONTEXT_ID&lt;/b&gt;: Clave foránea que identifica el USAGE_ID de su registro padre (por ejemplo, el registro padre de un parámetro de una función o procedimiento dentro de un paquete PLSQL sería la propia función o procedimiento).&lt;/li&gt;
&lt;li&gt;&lt;b&gt;LINE&lt;/b&gt;: Número de la línea de programa donde aparece el identificador.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;COL&lt;/b&gt;: Número de columna en la línea de programa donde aparece el identificador.&lt;/li&gt;
&lt;/ul&gt;

&lt;a href="https://www.plsql.biz/2018/08/vista-all-identifiers-usos-y-funcionalidades.html#more"&gt;Haz clic aquí para leer todo el artículo&lt;/a&gt;</content><link href="https://www.plsql.biz/feeds/2566506188183809048/comments/default" rel="replies" title="Enviar comentarios" type="application/atom+xml"/><link href="https://www.blogger.com/comment/fullpage/post/26801181/2566506188183809048?isPopup=true" rel="replies" title="0 comentarios" type="text/html"/><link href="https://www.blogger.com/feeds/26801181/posts/default/2566506188183809048" rel="edit" type="application/atom+xml"/><link href="https://www.blogger.com/feeds/26801181/posts/default/2566506188183809048" rel="self" type="application/atom+xml"/><link href="https://www.plsql.biz/2018/08/vista-all-identifiers-usos-y-funcionalidades.html" rel="alternate" title="La vista ALL_IDENTIFIERS, usos y funcionalidades (2)" type="text/html"/><author><name>JLPM</name><uri>http://www.blogger.com/profile/00891045835734721638</uri><email>noreply@blogger.com</email><gd:image height="32" rel="http://schemas.google.com/g/2005#thumbnail" src="//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjU8mDZ-KX_fXrz-RDI8r7soJeLIPcBFRmx8QPNkZABwfC9gv6qMWafd3EvDJCmOaGUyBnhjVbWhx_ER8DfMEaMlvoFiiLYwj5OqKt724MgjMJROYG5WcNgZewAqXoIYw/s220/Yo.gif" width="32"/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" height="72" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj6VK9Soh3wcJ-jq1mAUzymho2DcZp1PRYP-tIm31mcHLWJXTIEmJcj46sJWzFMEY77Bt4tslz-NdM_IPmA_JiqQk9DXyZYMTsn2gae__7TYyHjmTrKMWTzKcVzq0mxz7V9pLuHQEe7bUFlwRl-xy_2s_59OrCz6EefFKcMjGN0LwCo-ahWWGG0Ls_DamxN/s72-c/ALL_IDENTIFIERS.jpg" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-26801181.post-22733978396514647</id><published>2025-10-16T06:30:00.001+02:00</published><updated>2025-10-16T13:44:29.659+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Bases de datos Oracle"/><category scheme="http://www.blogger.com/atom/ns#" term="Utilidades PLSQL"/><title type="text">Vistas USER_ARGUMENTS y DBA_ARGUMENTS para analizar los argumentos de funciones y procedimientos</title><content type="html">&lt;p&gt;&lt;b&gt;USER_ARGUMENTS&lt;/b&gt; y &lt;b&gt;DBA_ARGUMENTS&lt;/b&gt; son dos vistas realmente útiles para los programadores de PL/SQL. Contienen información sobre los argumentos, también llamados parámetros, de cada uno de los programas almacenados en nuestro esquema (USER_ARGUMENTS) o en toda la base de datos Oracle (DBA_ARGUMENTS, el acceso a esta vista suele estar restringido a los administradores de la base de datos). Al mismo tiempo, ofrece una gran cantidad de información muy bien diseccionada y estructurada.&lt;/p&gt;

&lt;div class="separator" style="clear: both;"&gt;&lt;p&gt;&lt;a href="/2018/05/vistas-user-arguments-y-dba-arguments.html#more" style="display: block; padding: 1em 0; text-align: center; "&gt;&lt;img alt="USER_ARGUMENTS y DBA_ARGUMENTS" title="Vistas USER_ARGUMENTS y DBA_ARGUMENTS para analizar los argumentos de funciones y procedimientos" border="0" data-original-height="388" data-original-width="555" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiHjXJjdhAbMt_tKFlj_MAoMgHq-rraS812uxJFLZeN0KgvHrsRtZ9MexDPzb-DJpXarazVn4OWIPoFXmMgLy7zOcMK0rJgP4iE3f7DMHwi0ymsf9O257hdt4f9QIuyVo51MXpXz2aU4kfsja1kLXszy1VpdrPdBm_WHBKUUzSG_6Z9G39nj3ymNXhYHeRC/s1600/ALL_ARGUMENTS.jpg" width="450"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;

&lt;p&gt;Las columnas clave de esta vista son:&lt;/p&gt;

&lt;a href="https://www.plsql.biz/2018/05/vistas-user-arguments-y-dba-arguments.html#more"&gt;Haz clic aquí para leer todo el artículo&lt;/a&gt;</content><link href="https://www.plsql.biz/feeds/22733978396514647/comments/default" rel="replies" title="Enviar comentarios" type="application/atom+xml"/><link href="https://www.blogger.com/comment/fullpage/post/26801181/22733978396514647?isPopup=true" rel="replies" title="0 comentarios" type="text/html"/><link href="https://www.blogger.com/feeds/26801181/posts/default/22733978396514647" rel="edit" type="application/atom+xml"/><link href="https://www.blogger.com/feeds/26801181/posts/default/22733978396514647" rel="self" type="application/atom+xml"/><link href="https://www.plsql.biz/2018/05/vistas-user-arguments-y-dba-arguments.html" rel="alternate" title="Vistas USER_ARGUMENTS y DBA_ARGUMENTS para analizar los argumentos de funciones y procedimientos" type="text/html"/><author><name>JLPM</name><uri>http://www.blogger.com/profile/00891045835734721638</uri><email>noreply@blogger.com</email><gd:image height="32" rel="http://schemas.google.com/g/2005#thumbnail" src="//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjU8mDZ-KX_fXrz-RDI8r7soJeLIPcBFRmx8QPNkZABwfC9gv6qMWafd3EvDJCmOaGUyBnhjVbWhx_ER8DfMEaMlvoFiiLYwj5OqKt724MgjMJROYG5WcNgZewAqXoIYw/s220/Yo.gif" width="32"/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" height="72" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiHjXJjdhAbMt_tKFlj_MAoMgHq-rraS812uxJFLZeN0KgvHrsRtZ9MexDPzb-DJpXarazVn4OWIPoFXmMgLy7zOcMK0rJgP4iE3f7DMHwi0ymsf9O257hdt4f9QIuyVo51MXpXz2aU4kfsja1kLXszy1VpdrPdBm_WHBKUUzSG_6Z9G39nj3ymNXhYHeRC/s72-c/ALL_ARGUMENTS.jpg" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-26801181.post-3111789358498696711</id><published>2025-09-25T06:30:00.000+02:00</published><updated>2025-09-25T15:24:28.106+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Bases de datos Oracle"/><category scheme="http://www.blogger.com/atom/ns#" term="Tutorial PL/SQL"/><title type="text">Gestión de errores en PLSQL - Visión general</title><content type="html">&lt;p&gt;Incluso si fuéramos capaces de escribir un &lt;b&gt;programa PL/SQL absolutamente perfecto&lt;/b&gt;, es altamente probable que algo pueda ir mal y se produzcan &lt;b&gt;errores durante la ejecución&lt;/b&gt;. La manera en que nuestro código responde frente a estos errores, a menudo determina la diferencia entre una aplicación que funciona correctamente y otra que da continuos problemas a los usuarios y a los encargados de su mantenimiento.&lt;/p&gt;

&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;p&gt;&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj_YSoNaW_MOW0gasYcVcZ_UsQU9kZNBj0SlJpKCtItgfrTMpjAjl9GiGaMmbsdyWbrsez__CrwnPqIBbXuFZ7W6HltGx38jrH4XMPZgTGmzcm-kj0t7jfZpNYJ596o3pRtMdN9/s1600/excepciones-plsql.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj_YSoNaW_MOW0gasYcVcZ_UsQU9kZNBj0SlJpKCtItgfrTMpjAjl9GiGaMmbsdyWbrsez__CrwnPqIBbXuFZ7W6HltGx38jrH4XMPZgTGmzcm-kj0t7jfZpNYJ596o3pRtMdN9/s1600/excepciones-plsql.png" data-original-width="603" data-original-height="1027" width="400" alt="Gestión de errores" title="Gestión de errores en PLSQL - Visión general"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;

&lt;p&gt;Este es el primer artículo de una serie que escribiré sobre la gestión de errores en PLSQL. En ellos podréis leer sobre: los diferentes tipos de excepciones que se pueden dar; cuándo, cómo y por qué se generan excepciones; cómo definir nuestras propias excepciones; como manejar las excepciones cuando estas se producen; y cómo es posible informar a los usuarios cuando aparece un problema.&lt;/p&gt;

&lt;a href="https://www.plsql.biz/2018/02/gestion-de-errores-en-plsql-vision-general.html#more"&gt;Haz clic aquí para leer todo el artículo&lt;/a&gt;</content><link href="https://www.plsql.biz/feeds/3111789358498696711/comments/default" rel="replies" title="Enviar comentarios" type="application/atom+xml"/><link href="https://www.blogger.com/comment/fullpage/post/26801181/3111789358498696711?isPopup=true" rel="replies" title="0 comentarios" type="text/html"/><link href="https://www.blogger.com/feeds/26801181/posts/default/3111789358498696711" rel="edit" type="application/atom+xml"/><link href="https://www.blogger.com/feeds/26801181/posts/default/3111789358498696711" rel="self" type="application/atom+xml"/><link href="https://www.plsql.biz/2018/02/gestion-de-errores-en-plsql-vision-general.html" rel="alternate" title="Gestión de errores en PLSQL - Visión general" type="text/html"/><author><name>JLPM</name><uri>http://www.blogger.com/profile/00891045835734721638</uri><email>noreply@blogger.com</email><gd:image height="32" rel="http://schemas.google.com/g/2005#thumbnail" src="//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjU8mDZ-KX_fXrz-RDI8r7soJeLIPcBFRmx8QPNkZABwfC9gv6qMWafd3EvDJCmOaGUyBnhjVbWhx_ER8DfMEaMlvoFiiLYwj5OqKt724MgjMJROYG5WcNgZewAqXoIYw/s220/Yo.gif" width="32"/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" height="72" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj_YSoNaW_MOW0gasYcVcZ_UsQU9kZNBj0SlJpKCtItgfrTMpjAjl9GiGaMmbsdyWbrsez__CrwnPqIBbXuFZ7W6HltGx38jrH4XMPZgTGmzcm-kj0t7jfZpNYJ596o3pRtMdN9/s72-c/excepciones-plsql.png" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-26801181.post-115748053149850249</id><published>2025-09-09T06:30:00.001+02:00</published><updated>2025-09-09T11:45:52.365+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Utilidades PLSQL"/><title type="text">Tablas externas en PL/SQL</title><content type="html">&lt;p&gt;Las tablas externas en PLSQL permiten hacer consultas desde una base de datos Oracle sobre datos almacenados en un fichero de texto como si dicho fichero fuera una tabla de la base de datos. En Oracle 9i, sólo se podían realizar operaciones de lectura con las tablas externas; en cambio, desde la versión Oracle 10g, se puede también escribir datos en una tabla externa que será creada en ese momento, es decir, no se puede utilizar una tabla externa que ya existe para realizar esta operación.&lt;/p&gt;

&lt;div class="separator" style="clear: both;"&gt;&lt;p&gt;&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh8x6NHUlZpljUKeJIpCHfDn006AVO1WsfQKt16-Ejx6neuW-zThjLkTadXBw9xYaBTtmJleX2SliRcUGuPSjmiCVg2VHp564snM0R76MTuDZ6joETJTU3xMspAguZR0H_MttFcJzsyRj-UAW45Uxs58afWlqKP7pWz38A4Namuo2W2YvLQrxkzbLviSD6u/s700/tablas-externas.jpg" style="display: block; padding: 1em 0; text-align: center; "&gt;&lt;img alt="" border="0" width="400" data-original-height="375" data-original-width="700" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh8x6NHUlZpljUKeJIpCHfDn006AVO1WsfQKt16-Ejx6neuW-zThjLkTadXBw9xYaBTtmJleX2SliRcUGuPSjmiCVg2VHp564snM0R76MTuDZ6joETJTU3xMspAguZR0H_MttFcJzsyRj-UAW45Uxs58afWlqKP7pWz38A4Namuo2W2YvLQrxkzbLviSD6u/s400/tablas-externas.jpg" alt="CREATE DIRECTORY" title="Tablas externas en PL/SQL"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;

&lt;p&gt;Aunque se pueden hacer consultas sobre las tablas externas, éstas no permiten todas las funcionalidades que permite Oracle sobre tablas normales. Por ejemplo, no es posible realizar algunas operaciones DDL (sentencias de definición de objetos como revoke, grant, etc.) sobre tablas externas aparte de la creación y actualización de la definición de la misma; por lo tanto no es posible crear índices sobre una tabla externa.&lt;/p&gt;

&lt;a href="https://www.plsql.biz/2006/09/tablas-externas.html#more"&gt;Haz clic aquí para leer todo el artículo&lt;/a&gt;</content><link href="https://www.plsql.biz/feeds/115748053149850249/comments/default" rel="replies" title="Enviar comentarios" type="application/atom+xml"/><link href="https://www.blogger.com/comment/fullpage/post/26801181/115748053149850249?isPopup=true" rel="replies" title="35 comentarios" type="text/html"/><link href="https://www.blogger.com/feeds/26801181/posts/default/115748053149850249" rel="edit" type="application/atom+xml"/><link href="https://www.blogger.com/feeds/26801181/posts/default/115748053149850249" rel="self" type="application/atom+xml"/><link href="https://www.plsql.biz/2006/09/tablas-externas.html" rel="alternate" title="Tablas externas en PL/SQL" type="text/html"/><author><name>JLPM</name><uri>http://www.blogger.com/profile/00891045835734721638</uri><email>noreply@blogger.com</email><gd:image height="32" rel="http://schemas.google.com/g/2005#thumbnail" src="//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjU8mDZ-KX_fXrz-RDI8r7soJeLIPcBFRmx8QPNkZABwfC9gv6qMWafd3EvDJCmOaGUyBnhjVbWhx_ER8DfMEaMlvoFiiLYwj5OqKt724MgjMJROYG5WcNgZewAqXoIYw/s220/Yo.gif" width="32"/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" height="72" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh8x6NHUlZpljUKeJIpCHfDn006AVO1WsfQKt16-Ejx6neuW-zThjLkTadXBw9xYaBTtmJleX2SliRcUGuPSjmiCVg2VHp564snM0R76MTuDZ6joETJTU3xMspAguZR0H_MttFcJzsyRj-UAW45Uxs58afWlqKP7pWz38A4Namuo2W2YvLQrxkzbLviSD6u/s72-c/tablas-externas.jpg" width="72"/><thr:total>35</thr:total></entry><entry><id>tag:blogger.com,1999:blog-26801181.post-1839234191329831199</id><published>2025-07-31T06:30:00.000+02:00</published><updated>2025-07-31T09:51:43.030+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Tutorial PL/SQL"/><title type="text">Inicialización y asignación de valores a colecciones PL/SQL</title><content type="html">&lt;p&gt;Cuando se trabaja en PLSQL con tablas anidadas y varrays (ver artículo sobre los &lt;a href="/2012/12/tipo-de-dato-coleccion-plsql-collection-datatype.html"&gt;tipos de dato colección del PL/SQL&lt;/a&gt;), es necesario &lt;b&gt;inicializar la variable colección&lt;/b&gt; antes de que pueda ser utilizada. Para conseguir esto se puede utilizar la denominada &lt;b&gt;función constructora&lt;/b&gt;, una función que la base de datos Oracle crea de forma automática cuando se declara la variable colección.&lt;/p&gt;

&lt;div class="separator" style="clear: both;"&gt;&lt;a href="/2013/01/inicializacion-colecciones-plsql.html#more" style="display: block; padding: 1em 0; text-align: center; "&gt;&lt;img alt="PL/SQL - Colecciones" title="Inicialización y asignación de valores a colecciones PL/SQL" border="0" width="400" data-original-height="400" data-original-width="750" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg4KzoLrMxciB8C4wh9C0AUb1igw6QkstwrUar3fK5HoY-pYZaFfJ5pXFQFPGHzOUxjca2zHgy9-04POqWcSkk3YJDimBprOaLRQ9PDFXmJinE_pRaQ5sGwLDZcC1qDYhIpS1E9Efp7oDAK_sDC9LXfL9WcoCg_UNKdmjd0Un8HWGsSJKXbUSpNwKUQIImo/s400/PLSQL-Colecciones.jpg"&gt;&lt;/a&gt;&lt;/div&gt;

&lt;p&gt;Los que hace la función constructora es construir una instancia del tipo correspondientes al de la función. La función puede ser llamada sin utilizar argumento alguno, aunque también se le pueden pasar una o más expresiones del mismo tipo que sean elementos de la colección PL/SQL, elementos que se insertarán en la colección.&lt;/p&gt;

&lt;a href="https://www.plsql.biz/2013/01/inicializacion-colecciones-plsql.html#more"&gt;Haz clic aquí para leer todo el artículo&lt;/a&gt;</content><link href="https://www.plsql.biz/feeds/1839234191329831199/comments/default" rel="replies" title="Enviar comentarios" type="application/atom+xml"/><link href="https://www.blogger.com/comment/fullpage/post/26801181/1839234191329831199?isPopup=true" rel="replies" title="0 comentarios" type="text/html"/><link href="https://www.blogger.com/feeds/26801181/posts/default/1839234191329831199" rel="edit" type="application/atom+xml"/><link href="https://www.blogger.com/feeds/26801181/posts/default/1839234191329831199" rel="self" type="application/atom+xml"/><link href="https://www.plsql.biz/2013/01/inicializacion-colecciones-plsql.html" rel="alternate" title="Inicialización y asignación de valores a colecciones PL/SQL" type="text/html"/><author><name>JLPM</name><uri>http://www.blogger.com/profile/00891045835734721638</uri><email>noreply@blogger.com</email><gd:image height="32" rel="http://schemas.google.com/g/2005#thumbnail" src="//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjU8mDZ-KX_fXrz-RDI8r7soJeLIPcBFRmx8QPNkZABwfC9gv6qMWafd3EvDJCmOaGUyBnhjVbWhx_ER8DfMEaMlvoFiiLYwj5OqKt724MgjMJROYG5WcNgZewAqXoIYw/s220/Yo.gif" width="32"/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" height="72" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg4KzoLrMxciB8C4wh9C0AUb1igw6QkstwrUar3fK5HoY-pYZaFfJ5pXFQFPGHzOUxjca2zHgy9-04POqWcSkk3YJDimBprOaLRQ9PDFXmJinE_pRaQ5sGwLDZcC1qDYhIpS1E9Efp7oDAK_sDC9LXfL9WcoCg_UNKdmjd0Un8HWGsSJKXbUSpNwKUQIImo/s72-c/PLSQL-Colecciones.jpg" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-26801181.post-4825458984577667233</id><published>2025-07-01T06:30:00.000+02:00</published><updated>2025-07-01T17:18:05.528+02:00</updated><title type="text">Consultas jerárquicas en PL/SQL (cláusulas START WITH y CONNECT BY PRIOR)</title><content type="html">&lt;p&gt;Cuando nos encontramos ante una tabla en la que los datos se encadenan siguiendo una &lt;b&gt;estructura jerárquica&lt;/b&gt; (es decir, existen registros padre y registros hijo), puede llegar a ser necesario &lt;b&gt;recuperar los datos de forma recursiva&lt;/b&gt;, mostrando la estructura jerárquica o la relación existente entre unos datos y otros.&lt;/p&gt;

&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;p&gt;&lt;a href="/2012/10/consultas-jerarquicas-plsql-start-with-connect-by-prior.html#more" imageanchor="1" style="margin-left:1em; margin-right:1em"&gt;&lt;img border="0" height="189" width="400" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjl8JsqW9jbB6yE5Hkyojo-0Cq0CyXuejcw-sJxKWaYAZquIOcclJe3Wy-j_zn11LbJEaBUOdy3qYsPExH1LWWkS5uz0NuQa6APHbIvQYoK3bGNWcrHNdBH8Nr9U7kCCBF7my4I/s400/consulta-jerarquica-plsql.jpg" alt="Arbol jerárquico" title="Consultas jerárquicas en PL/SQL (cláusulas START WITH y CONNECT BY PRIOR)"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;

&lt;p&gt;Si todavía no tenéis claro de que estoy hablando, sólo tenéis que mirar a la estructura tipo árbol que aparece en la figura, donde vemos que del presidente de una empresa (nodo principal) cuelgan tres directores (nodos descendientes de primer nivel), de estos 6 supervisores (nodos descendientes de segundo nivel) y así hasta llegar a los empleados que no tienen gente a su cargo.&lt;/p&gt;

&lt;a href="https://www.plsql.biz/2012/10/consultas-jerarquicas-plsql-start-with-connect-by-prior.html#more"&gt;Haz clic aquí para leer todo el artículo&lt;/a&gt;</content><link href="https://www.plsql.biz/feeds/4825458984577667233/comments/default" rel="replies" title="Enviar comentarios" type="application/atom+xml"/><link href="https://www.blogger.com/comment/fullpage/post/26801181/4825458984577667233?isPopup=true" rel="replies" title="7 comentarios" type="text/html"/><link href="https://www.blogger.com/feeds/26801181/posts/default/4825458984577667233" rel="edit" type="application/atom+xml"/><link href="https://www.blogger.com/feeds/26801181/posts/default/4825458984577667233" rel="self" type="application/atom+xml"/><link href="https://www.plsql.biz/2012/10/consultas-jerarquicas-plsql-start-with-connect-by-prior.html" rel="alternate" title="Consultas jerárquicas en PL/SQL (cláusulas START WITH y CONNECT BY PRIOR)" type="text/html"/><author><name>JLPM</name><uri>http://www.blogger.com/profile/00891045835734721638</uri><email>noreply@blogger.com</email><gd:image height="32" rel="http://schemas.google.com/g/2005#thumbnail" src="//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjU8mDZ-KX_fXrz-RDI8r7soJeLIPcBFRmx8QPNkZABwfC9gv6qMWafd3EvDJCmOaGUyBnhjVbWhx_ER8DfMEaMlvoFiiLYwj5OqKt724MgjMJROYG5WcNgZewAqXoIYw/s220/Yo.gif" width="32"/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" height="72" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjl8JsqW9jbB6yE5Hkyojo-0Cq0CyXuejcw-sJxKWaYAZquIOcclJe3Wy-j_zn11LbJEaBUOdy3qYsPExH1LWWkS5uz0NuQa6APHbIvQYoK3bGNWcrHNdBH8Nr9U7kCCBF7my4I/s72-c/consulta-jerarquica-plsql.jpg" width="72"/><thr:total>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-26801181.post-743119505486001958</id><published>2025-06-05T06:30:00.002+02:00</published><updated>2025-06-05T13:30:41.413+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Bases de datos Oracle"/><title type="text">Uso de Rollback Segments por sentencias SELECT</title><content type="html">&lt;p&gt;En alguna ocasión algún lector me ha preguntado, con cierta sorpresa, acerca del por qué una sentencia SELECT le fallaba con el mensaje de error &amp;quot;No es posible ampliar el segmento de rollback&amp;quot; (&lt;i&gt;&amp;quot;Unable to extend rollback segment&amp;quot;&lt;/i&gt;). La sorpresa proviene del hecho de que son muchos los desarrolladores PL/SQL los que piensan que los segmentos de rollback sólo se utilizan cuando se emplean sentencias PLSQL en las que se modifican o actualizan datos dentro de la base de datos Oracle. Bajo este tipo de pensamiento es normal que, cuando se produce el error mencionado anteriormente al ejecutar una sentencia SELECT, uno se pregunte: ¿utiliza la base de datos Oracle segmentos de rollback al ejecutar sentencias SELECT?&lt;/p&gt;

&lt;div class="separator" style="clear: both;"&gt;&lt;p&gt;&lt;a href="/2011/10/rollback-segment-sentencia-plsql-select.html#more" style="display: block; padding: 1em 0; text-align: center; "&gt;&lt;img alt="SELECT FOR UPDATE en PL/SQL" title="Uso de Rollback Segments por sentencias SELECT" border="0" width="400" data-original-height="424" data-original-width="750" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhL1qjeSZqs8lzlyoHg9XMg99ZA8tHovNBvhYF-8g8lF1Kw-ZPsgcJwVnE7yeL2Tsqy72J2mFdm2e1QE0w5UdLoqk6uA7maXjxJ9ZrxYK2jZPZdNjnRn37UbT8tm7XSdoiDIhIQFYPSLY3K5UdWzTvyJsibkOIUOWnf4tMPkVBl1HH5tKIn0f2lN5LiYfbh/s400/select-rollback-segments.jpg"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;

&lt;p&gt;Bueno, en mi opinión, lo primero que hay que hacer es reformular la pregunta y cambiarla por la siguiente: &lt;b&gt;¿una sentencia SELECT necesita crear o leer segmentos de rollback?&lt;/b&gt; La pregunta formulada de esta manera seguro que nos ayudará a comprender mejor este artículo, ya que el verbo &amp;quot;utilizar&amp;quot; usado en la primera pregunta no es lo suficientemente específico.&lt;/p&gt;

&lt;a href="https://www.plsql.biz/2011/10/rollback-segment-sentencia-plsql-select.html#more"&gt;Haz clic aquí para leer todo el artículo&lt;/a&gt;</content><link href="https://www.plsql.biz/feeds/743119505486001958/comments/default" rel="replies" title="Enviar comentarios" type="application/atom+xml"/><link href="https://www.blogger.com/comment/fullpage/post/26801181/743119505486001958?isPopup=true" rel="replies" title="0 comentarios" type="text/html"/><link href="https://www.blogger.com/feeds/26801181/posts/default/743119505486001958" rel="edit" type="application/atom+xml"/><link href="https://www.blogger.com/feeds/26801181/posts/default/743119505486001958" rel="self" type="application/atom+xml"/><link href="https://www.plsql.biz/2011/10/rollback-segment-sentencia-plsql-select.html" rel="alternate" title="Uso de Rollback Segments por sentencias SELECT" type="text/html"/><author><name>JLPM</name><uri>http://www.blogger.com/profile/00891045835734721638</uri><email>noreply@blogger.com</email><gd:image height="32" rel="http://schemas.google.com/g/2005#thumbnail" src="//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjU8mDZ-KX_fXrz-RDI8r7soJeLIPcBFRmx8QPNkZABwfC9gv6qMWafd3EvDJCmOaGUyBnhjVbWhx_ER8DfMEaMlvoFiiLYwj5OqKt724MgjMJROYG5WcNgZewAqXoIYw/s220/Yo.gif" width="32"/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" height="72" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhL1qjeSZqs8lzlyoHg9XMg99ZA8tHovNBvhYF-8g8lF1Kw-ZPsgcJwVnE7yeL2Tsqy72J2mFdm2e1QE0w5UdLoqk6uA7maXjxJ9ZrxYK2jZPZdNjnRn37UbT8tm7XSdoiDIhIQFYPSLY3K5UdWzTvyJsibkOIUOWnf4tMPkVBl1HH5tKIn0f2lN5LiYfbh/s72-c/select-rollback-segments.jpg" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-26801181.post-5419460202887544720</id><published>2025-05-19T06:30:00.000+02:00</published><updated>2025-05-19T11:11:01.248+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Bases de datos Oracle"/><category scheme="http://www.blogger.com/atom/ns#" term="Utilidades PLSQL"/><title type="text">Bloqueo de tablas hijo por causa de ejecutar sentencias PL/SQL sobre tablas padre</title><content type="html">&lt;p&gt;En versiones de la base de datos Oracle anteriores a la 9i, &lt;b&gt;cuando la clave primaria de una tabla padre&lt;/b&gt; (&lt;i&gt;parent table&lt;/i&gt;) &lt;b&gt;no se encuentra indexada en la tabla hijo&lt;/b&gt; (&lt;i&gt;child table&lt;/i&gt;), es muy probable que tengamos &lt;b&gt;problemas con los bloqueos de la tabla hijo&lt;/b&gt; que se producen, bien cuando se actualiza (con la sentencia PLSQL UPDATE) la clave primaria de la tabla padre (lo cual ocurre con relativa frecuencia ya que existen determinados trabajos que actualizan todas las columnas de una tabla incluso cuando el valor de la misma no ha cambiado), o bien cuando se realizaba el borrado (con la sentencia PL/SQL DELETE) de algún registro de la tabla padre.&lt;/p&gt;

&lt;div class="separator" style="clear: both;"&gt;&lt;a href="/2011/01/bloqueo-tablas-hijo-por-tablas-padre.html#more" style="display: block; padding: 1em 0; text-align: center; "&gt;&lt;img alt="MEsa con candado y pantalla con candado" title="Bloqueo de tablas hijo por ejecutar sentencias PLSQL sobre  tablas padre" border="0" width="400" data-original-height="550" data-original-width="750" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjGzmbV3soINmhzfTfANTMbkcB8gjbxREJfU05UAr-4lmGSRgNrhD4haIz-XA2r234ZPY55UXe3-BRNwpQJIHh0cP6R1zroGDpkJ8vRY7vhyH8u0oLtbVuhZRBe0H4nPie4c884NhrMwOjakVWrI2EgAOonZ2rYnjtIkQ3DjGRw4zTbFinTmA_WHsP6QbOQ/s400/oracle-bloqueos-de-tabla.jpg"&gt;&lt;/a&gt;&lt;/div&gt;

&lt;p&gt;El caso es que en las circunstancias anteriores y para evitar que se produzca un bloqueo completo de la tabla hijo (&lt;i&gt;full table lock&lt;/i&gt;), &lt;b&gt;lo más recomendable es indexar también en la tabla hijo la clave primaria de la tabla padre&lt;/b&gt;. No obstante, esta norma de bloqueo cambió con la versión 9i de la base de datos Oracle.&lt;/p&gt;

&lt;a href="https://www.plsql.biz/2011/01/bloqueo-tablas-hijo-por-tablas-padre.html#more"&gt;Haz clic aquí para leer todo el artículo&lt;/a&gt;</content><link href="https://www.plsql.biz/feeds/5419460202887544720/comments/default" rel="replies" title="Enviar comentarios" type="application/atom+xml"/><link href="https://www.blogger.com/comment/fullpage/post/26801181/5419460202887544720?isPopup=true" rel="replies" title="2 comentarios" type="text/html"/><link href="https://www.blogger.com/feeds/26801181/posts/default/5419460202887544720" rel="edit" type="application/atom+xml"/><link href="https://www.blogger.com/feeds/26801181/posts/default/5419460202887544720" rel="self" type="application/atom+xml"/><link href="https://www.plsql.biz/2011/01/bloqueo-tablas-hijo-por-tablas-padre.html" rel="alternate" title="Bloqueo de tablas hijo por causa de ejecutar sentencias PL/SQL sobre tablas padre" type="text/html"/><author><name>JLPM</name><uri>http://www.blogger.com/profile/00891045835734721638</uri><email>noreply@blogger.com</email><gd:image height="32" rel="http://schemas.google.com/g/2005#thumbnail" src="//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjU8mDZ-KX_fXrz-RDI8r7soJeLIPcBFRmx8QPNkZABwfC9gv6qMWafd3EvDJCmOaGUyBnhjVbWhx_ER8DfMEaMlvoFiiLYwj5OqKt724MgjMJROYG5WcNgZewAqXoIYw/s220/Yo.gif" width="32"/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" height="72" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjGzmbV3soINmhzfTfANTMbkcB8gjbxREJfU05UAr-4lmGSRgNrhD4haIz-XA2r234ZPY55UXe3-BRNwpQJIHh0cP6R1zroGDpkJ8vRY7vhyH8u0oLtbVuhZRBe0H4nPie4c884NhrMwOjakVWrI2EgAOonZ2rYnjtIkQ3DjGRw4zTbFinTmA_WHsP6QbOQ/s72-c/oracle-bloqueos-de-tabla.jpg" width="72"/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-26801181.post-638673903164077773</id><published>2025-04-23T06:30:00.000+02:00</published><updated>2025-04-23T09:33:30.868+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Tutorial PL/SQL"/><title type="text">Funciones PLSQL TO_CHAR, EXTRACT, TO_DATE y TO_TIMESTAMP (conversión de fechas a caracteres y viceversa)</title><content type="html">&lt;p&gt;Este artículo es continuación del anterior en el que hablé sobre los &lt;a href="/2012/01/tipos-plsql-date-timestamp-interval.html"&gt;tipos de dato fecha DATE, TIMESTAMP e INTERVAL&lt;/a&gt; y en él hablaré sobre las &lt;b&gt;funciones PL/SQL que se pueden utilizar para convertir datos de tipo fecha en datos de tipo carácter y viceversa&lt;/b&gt;.&lt;/p&gt;

&lt;div class="separator" style="clear: both;"&gt;&lt;a href="/2012/02/plsql-funciones-tochar-extract-todate.html#more" style="display: block; padding: 1em 0; text-align: center; "&gt;&lt;img alt="Funciones PLSQL TO_CHAR, EXTRACT, TO_DATE y TO_TIMESTAMP" title="SQL: Conversión de fechas a caracteres y viceversa"  border="0" data-original-height="680" data-original-width="600" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhMkNkwgKpA_n2Yo5BA5Xk3Bvzf4lS3R0zvEvA7SOE3HvSUitmO95OUrcvKsWstZKedTC1HWxP4iIES-191TvtKFvk6xpMg4DhG01qwivVfBZvEKrWSO5mT2_QHq3xD36S4YBPTQbhWpWIPiZSbKilYOumVfaKNjhacIvc9ir_eULMQuDxe2DtkppBjlFrt/s1600/Conversion-Fechas-SQL.jpg" width="400"&gt;&lt;/a&gt;&lt;/div&gt;

&lt;p&gt;Pero antes de hablar de estas funciones, resulta conveniente conocer como se puede obtener desde PLSQL &lt;b&gt;el valor de la fecha y el tiempo actual&lt;/b&gt;. Seguro que la gran mayoría de vosotros, si sois programadores PL/SQL, ya conocéis la clásica &lt;b&gt;función SYSDATE&lt;/b&gt;, función que, sin duda, es la más empleada en este sentido. No obstante, la base de datos Oracle ofrece la posibilidad de utilizar otras funciones que proporcionan diferentes variantes del valor de la fecha y el tiempo actual y que veremos a continuación.&lt;/p&gt;

&lt;a href="https://www.plsql.biz/2012/02/plsql-funciones-tochar-extract-todate.html#more"&gt;Haz clic aquí para leer todo el artículo&lt;/a&gt;</content><link href="https://www.plsql.biz/feeds/638673903164077773/comments/default" rel="replies" title="Enviar comentarios" type="application/atom+xml"/><link href="https://www.blogger.com/comment/fullpage/post/26801181/638673903164077773?isPopup=true" rel="replies" title="1 comentarios" type="text/html"/><link href="https://www.blogger.com/feeds/26801181/posts/default/638673903164077773" rel="edit" type="application/atom+xml"/><link href="https://www.blogger.com/feeds/26801181/posts/default/638673903164077773" rel="self" type="application/atom+xml"/><link href="https://www.plsql.biz/2012/02/plsql-funciones-tochar-extract-todate.html" rel="alternate" title="Funciones PLSQL TO_CHAR, EXTRACT, TO_DATE y TO_TIMESTAMP (conversión de fechas a caracteres y viceversa)" type="text/html"/><author><name>JLPM</name><uri>http://www.blogger.com/profile/00891045835734721638</uri><email>noreply@blogger.com</email><gd:image height="32" rel="http://schemas.google.com/g/2005#thumbnail" src="//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjU8mDZ-KX_fXrz-RDI8r7soJeLIPcBFRmx8QPNkZABwfC9gv6qMWafd3EvDJCmOaGUyBnhjVbWhx_ER8DfMEaMlvoFiiLYwj5OqKt724MgjMJROYG5WcNgZewAqXoIYw/s220/Yo.gif" width="32"/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" height="72" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhMkNkwgKpA_n2Yo5BA5Xk3Bvzf4lS3R0zvEvA7SOE3HvSUitmO95OUrcvKsWstZKedTC1HWxP4iIES-191TvtKFvk6xpMg4DhG01qwivVfBZvEKrWSO5mT2_QHq3xD36S4YBPTQbhWpWIPiZSbKilYOumVfaKNjhacIvc9ir_eULMQuDxe2DtkppBjlFrt/s72-c/Conversion-Fechas-SQL.jpg" width="72"/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-26801181.post-7002315022076874631</id><published>2025-03-27T06:30:00.000+01:00</published><updated>2025-03-27T12:10:03.763+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Tutorial PL/SQL"/><title type="text">Trabajando con fechas en PL/SQL: los tipos DATE, TIMESTAMP e INTERVAL</title><content type="html">&lt;p&gt;Las fechas son un &lt;a href="/2006/10/tipos-de-datos-en-plsql.html"&gt;tipo de datos del PL/SQL&lt;/a&gt; considerablemente más complejo que un tipo carácter o un tipo numérico. Una fecha o momento de tiempo está compuesto de múltiples campos (año, mes, día, hora, minutos, etcétera) y, además, existen un buen número de normas para determinar si una fecha es válida o no (los años bisiestos, los cambios de hora, etcétera). Como consecuencia de todo esto, en PLSQL resulta habitual tener que:&lt;/p&gt;

&lt;div class="separator" style="clear: both;"&gt;&lt;p&gt;&lt;a href="/2012/01/tipos-plsql-date-timestamp-interval.html#more" style="display: block; padding: 1em 0; text-align: center; "&gt;&lt;img alt="Los tipos DATE, TIMESTAMP e INTERVAL" title="Trabajando con fechas en PL/SQL: los tipos DATE, TIMESTAMP e INTERVAL" border="0" width="400" data-original-height="320" data-original-width="797" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgqyVRwzOiEzVpQuyJ4SNATtA4bm8wxdPMjj5dYFoWC9zdZco3RG_5LlvFDBF9FMU4AldG-kTdSM032xwe9TOGsP4W4PYv9cOLA9pj90pbM_SrPlBPuc-wTOprixAFZnEvAIzwrhz6hakOiobLbs7e7dcsjNdTBqffzSjTWetPkUFzwP1j-ckgo6TrHD5_v/s400/datetime_datatypes.jpg"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;

&lt;ul&gt;&lt;li&gt;Declarar constantes y variables de tipo fecha o tiempo.&lt;/li&gt;
&lt;li&gt;Utilizar funciones para modificar dichas variables y mostrarlas en el formato deseado por el usuario.&lt;/li&gt;
&lt;li&gt;Manipular fechas y tiempos para realizar cálculos variados.&lt;/li&gt;&lt;/ul&gt;

&lt;p&gt;Este artículo será el primero de una serie en los que explicaré todo lo que un programador PL/SQL necesita conocer para trabajar con los diferentes &lt;b&gt;tipos de datos asociados con fechas y momentos de tiempo&lt;/b&gt; (DATE, TIMESTAMP e INTERVAL). &lt;/p&gt;

&lt;a href="https://www.plsql.biz/2012/01/tipos-plsql-date-timestamp-interval.html#more"&gt;Haz clic aquí para leer todo el artículo&lt;/a&gt;</content><link href="https://www.plsql.biz/feeds/7002315022076874631/comments/default" rel="replies" title="Enviar comentarios" type="application/atom+xml"/><link href="https://www.blogger.com/comment/fullpage/post/26801181/7002315022076874631?isPopup=true" rel="replies" title="6 comentarios" type="text/html"/><link href="https://www.blogger.com/feeds/26801181/posts/default/7002315022076874631" rel="edit" type="application/atom+xml"/><link href="https://www.blogger.com/feeds/26801181/posts/default/7002315022076874631" rel="self" type="application/atom+xml"/><link href="https://www.plsql.biz/2012/01/tipos-plsql-date-timestamp-interval.html" rel="alternate" title="Trabajando con fechas en PL/SQL: los tipos DATE, TIMESTAMP e INTERVAL" type="text/html"/><author><name>JLPM</name><uri>http://www.blogger.com/profile/00891045835734721638</uri><email>noreply@blogger.com</email><gd:image height="32" rel="http://schemas.google.com/g/2005#thumbnail" src="//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjU8mDZ-KX_fXrz-RDI8r7soJeLIPcBFRmx8QPNkZABwfC9gv6qMWafd3EvDJCmOaGUyBnhjVbWhx_ER8DfMEaMlvoFiiLYwj5OqKt724MgjMJROYG5WcNgZewAqXoIYw/s220/Yo.gif" width="32"/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" height="72" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgqyVRwzOiEzVpQuyJ4SNATtA4bm8wxdPMjj5dYFoWC9zdZco3RG_5LlvFDBF9FMU4AldG-kTdSM032xwe9TOGsP4W4PYv9cOLA9pj90pbM_SrPlBPuc-wTOprixAFZnEvAIzwrhz6hakOiobLbs7e7dcsjNdTBqffzSjTWetPkUFzwP1j-ckgo6TrHD5_v/s72-c/datetime_datatypes.jpg" width="72"/><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-26801181.post-6394474275062071790</id><published>2025-03-11T06:30:00.001+01:00</published><updated>2025-03-11T09:40:10.079+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Tutorial PL/SQL"/><title type="text">Manejo de excepciones en PL/SQL (excepciones definidas por el usuario)</title><content type="html">&lt;p&gt;Como continuación del anterior artículo dedicado al &lt;a href="/2007/01/manejo-de-excepciones-el-plsql.html"&gt;manejo de las excepciones PLSQL predefinidas&lt;/a&gt;, ahora voy a hablar de las excepciones definidas por el usuario.&lt;/p&gt;

&lt;div class="separator" style="clear: both;"&gt;&lt;a href="/2007/02/manejo-de-excepciones-en-plsql.html#more" style="display: block; padding: 1em 0; text-align: center; "&gt;&lt;img alt="" border="0" width="400" data-original-height="301" data-original-width="461" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEggnn4H_8thw-SpU9-koLwEDOuqP2T7XX0bxSrUi_EVs9gmcNnUCfSTY4HG6cHZ_2398HhE1sJ_39tJcAlqLIJqwc6TpB0b2vjqioEcZqvclmvgfhPc67rqpcxtlfToMd8Y6WYuKLgyiI4FdeBo0j7zwlGVVbJaitOC86zBGD_hKi8RIJPrSiz0xF1xX0d1/s400/manejo-excepciones.png" alt="Sección EXCEPTION" title="Manejo de excepciones en PL/SQL (excepciones definidas por el usuario)"&gt;&lt;/a&gt;&lt;/div&gt;

&lt;p&gt;&lt;span style="font-weight: bold;"&gt;PLSQL&lt;/span&gt; permite al usuario definir sus propias excepciones. Estas excepciones deben ser declaradas y lanzadas explícitamente utilizando la sentencia &lt;span style="font-style: italic; font-weight: bold;"&gt;RAISE&lt;/span&gt;. Este tipo de excepciones deben ser declaradas en el segmento &lt;span style="font-style: italic; font-weight: bold;"&gt;DECLARE&lt;/span&gt;. Se declara una excepción como cualquier otra variable, asignandole el tipo &lt;span style="font-style: italic; font-weight: bold;"&gt;EXCEPTION&lt;/span&gt;. Como las variables, una excepción declarada en un bloque es local a ese bloque y global a todos los sub-bloques que comprende.&lt;/p&gt;

&lt;a href="https://www.plsql.biz/2007/02/manejo-de-excepciones-en-plsql.html#more"&gt;Haz clic aquí para leer todo el artículo&lt;/a&gt;</content><link href="https://www.plsql.biz/feeds/6394474275062071790/comments/default" rel="replies" title="Enviar comentarios" type="application/atom+xml"/><link href="https://www.blogger.com/comment/fullpage/post/26801181/6394474275062071790?isPopup=true" rel="replies" title="0 comentarios" type="text/html"/><link href="https://www.blogger.com/feeds/26801181/posts/default/6394474275062071790" rel="edit" type="application/atom+xml"/><link href="https://www.blogger.com/feeds/26801181/posts/default/6394474275062071790" rel="self" type="application/atom+xml"/><link href="https://www.plsql.biz/2007/02/manejo-de-excepciones-en-plsql.html" rel="alternate" title="Manejo de excepciones en PL/SQL (excepciones definidas por el usuario)" type="text/html"/><author><name>JLPM</name><uri>http://www.blogger.com/profile/00891045835734721638</uri><email>noreply@blogger.com</email><gd:image height="32" rel="http://schemas.google.com/g/2005#thumbnail" src="//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjU8mDZ-KX_fXrz-RDI8r7soJeLIPcBFRmx8QPNkZABwfC9gv6qMWafd3EvDJCmOaGUyBnhjVbWhx_ER8DfMEaMlvoFiiLYwj5OqKt724MgjMJROYG5WcNgZewAqXoIYw/s220/Yo.gif" width="32"/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" height="72" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEggnn4H_8thw-SpU9-koLwEDOuqP2T7XX0bxSrUi_EVs9gmcNnUCfSTY4HG6cHZ_2398HhE1sJ_39tJcAlqLIJqwc6TpB0b2vjqioEcZqvclmvgfhPc67rqpcxtlfToMd8Y6WYuKLgyiI4FdeBo0j7zwlGVVbJaitOC86zBGD_hKi8RIJPrSiz0xF1xX0d1/s72-c/manejo-excepciones.png" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-26801181.post-7261706108476842025</id><published>2025-02-19T06:30:00.001+01:00</published><updated>2025-02-19T11:19:58.397+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Bases de datos Oracle"/><title type="text">Cambios en los parámetros de la base de datos Oracle, cuándo tienen lugar</title><content type="html">&lt;p&gt;Existe la creencia un tanto generalizada de que cuando realizamos un &lt;b&gt;cambio en los parámetros de la base de datos Oracle&lt;/b&gt; (utilizando el comando SQL &lt;i&gt;ALTER SYSTEM SET &lt;parámetro&gt; ...) mientras la instancia de la base de datos está operativa y si los cambios los realizamos utilizando el fichero de parámetros almacenado (&lt;i&gt;SPFILE&lt;/i&gt;), estos cambios no tienen lugar hasta que la base de datos se reinicia. Esta idea es falsa y equivocada, ya que el &lt;b&gt;comando SQL &lt;i&gt;ALTER SYSTEM&lt;/i&gt;&lt;/b&gt; dispone del &lt;b&gt;parámetro &lt;i&gt;SCOPE&lt;/i&gt;&lt;/b&gt; para especificar en que momento deben tener efecto los cambios.

&lt;div class="separator" style="clear: both;"&gt;&lt;a href="/2010/01/cambios-en-los-parametros-de-la-base-de.html#more" style="display: block; padding: 1em 0; text-align: center; "&gt;&lt;img alt="Cláusula SCOPE en ALTER SYSTEM" title="Cambios en los parámetros de la base de datos Oracle, cuándo tienen lugar" border="0" width="400" data-original-height="285" data-original-width="516" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgwDnraArkEciAnYfBnjWkG1kMMfm3aEDBqFxoOwj_fA-Bkjiw9d4OJQqZIUS99bb6ZS91nSLhNErZyrR2MA0CN1Rk3rq7vY0FY3vE0z0lzxJxUu9Cu_k9icGeJ6WKlkZZuGDH8TEKkG5kslV9D9sK_vo0Ywe9OgZBawjcuzGf3Nb-P2rebxdjihs83rKIe/s400/clausula%20SCOPE.jpg"&gt;&lt;/a&gt;&lt;/div&gt;
  
&lt;p&gt;El &lt;b&gt;parámetro &lt;i&gt;SCOPE&lt;/i&gt;&lt;/b&gt; puede tomar los valores &lt;i&gt;MEMORY&lt;/i&gt;, &lt;i&gt;SPFILE&lt;/i&gt;, or &lt;i&gt;BOTH&lt;/i&gt;. Si le asignamos el &lt;b&gt;valor &lt;i&gt;MEMORY&lt;/i&gt;&lt;/b&gt; el cambio aplicará de forma inmediata siempre que estemos cambiando un parámetro que no requiera el reinicio de la base de datos Oracle para que el cambio sea efectivo. Si le asignamos el &lt;b&gt;valor &lt;i&gt;SPFILE&lt;/i&gt;&lt;/b&gt; entonces únicamente estaremos modificando el fichero de parámetros almacenado y el cambio tendrá lugar en el siguiente reinicio de la base de datos Oracle. Pero si utilizamos el &lt;b&gt;valor &lt;i&gt;BOTH&lt;/i&gt;&lt;/b&gt;, entonces el cambio será inmediato y, además, cambiaremos el valor en el fichero de parámetros almacenado (&lt;i&gt;SPFILE&lt;/i&gt;).&lt;/p&gt;

&lt;/parámetro&gt;&lt;/i&gt;&lt;/p&gt;&lt;a href="https://www.plsql.biz/2010/01/cambios-en-los-parametros-de-la-base-de.html#more"&gt;Haz clic aquí para leer todo el artículo&lt;/a&gt;</content><link href="https://www.plsql.biz/feeds/7261706108476842025/comments/default" rel="replies" title="Enviar comentarios" type="application/atom+xml"/><link href="https://www.blogger.com/comment/fullpage/post/26801181/7261706108476842025?isPopup=true" rel="replies" title="0 comentarios" type="text/html"/><link href="https://www.blogger.com/feeds/26801181/posts/default/7261706108476842025" rel="edit" type="application/atom+xml"/><link href="https://www.blogger.com/feeds/26801181/posts/default/7261706108476842025" rel="self" type="application/atom+xml"/><link href="https://www.plsql.biz/2010/01/cambios-en-los-parametros-de-la-base-de.html" rel="alternate" title="Cambios en los parámetros de la base de datos Oracle, cuándo tienen lugar" type="text/html"/><author><name>JLPM</name><uri>http://www.blogger.com/profile/00891045835734721638</uri><email>noreply@blogger.com</email><gd:image height="32" rel="http://schemas.google.com/g/2005#thumbnail" src="//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjU8mDZ-KX_fXrz-RDI8r7soJeLIPcBFRmx8QPNkZABwfC9gv6qMWafd3EvDJCmOaGUyBnhjVbWhx_ER8DfMEaMlvoFiiLYwj5OqKt724MgjMJROYG5WcNgZewAqXoIYw/s220/Yo.gif" width="32"/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" height="72" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgwDnraArkEciAnYfBnjWkG1kMMfm3aEDBqFxoOwj_fA-Bkjiw9d4OJQqZIUS99bb6ZS91nSLhNErZyrR2MA0CN1Rk3rq7vY0FY3vE0z0lzxJxUu9Cu_k9icGeJ6WKlkZZuGDH8TEKkG5kslV9D9sK_vo0Ywe9OgZBawjcuzGf3Nb-P2rebxdjihs83rKIe/s72-c/clausula%20SCOPE.jpg" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-26801181.post-3746288158476468416</id><published>2025-02-03T06:30:00.000+01:00</published><updated>2025-02-03T09:27:06.198+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Tutorial PL/SQL"/><title type="text">La cláusula PIVOT: Cómo girar columnas en SQL y PL/SQL</title><content type="html">&lt;p&gt;Una tarea que puede resultarnos útil en determinadas circunstancias es &lt;span style="font-weight: bold;"&gt;conseguir girar&lt;/span&gt; (en inglés &lt;i&gt;pivot&lt;/i&gt;) &lt;span style="font-weight: bold;"&gt;los resultados entregados por una consulta SQL o PLSQL&lt;/span&gt;. Por ejemplo, supongamos que escribimos la siguiente consulta para calcular el precio medio de los productos por almacen:&lt;/p&gt;

&lt;div class="separator" style="clear: both;"&gt;&lt;p&gt;&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh5JfN5XC7kaNoQY891_rwfLyNEmgWg53K2GtMvVoNRG5qb6GzPGT1TrGK9BlH9PeTY9h3qn7uw2reT-g4FppAHB2OKPRNM0JCLrqAJoEpfTCB_sRBG-dyiw0EM27abgTBLxwtCvKmct1yaWZXK_5ABdMaifP1UztY-hepbEHyJIdKPvavGFzZc7k2cSOw_/s956/Clausula-PIVOT.jpg" style="display: block; padding: 1em 0; text-align: center; "&gt;&lt;img alt="Cláusula PIVOT" title="La cláusula PIVOT: Como girar columnas en SQL y PL/SQL" border="0" width="400" data-original-height="678" data-original-width="956" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh5JfN5XC7kaNoQY891_rwfLyNEmgWg53K2GtMvVoNRG5qb6GzPGT1TrGK9BlH9PeTY9h3qn7uw2reT-g4FppAHB2OKPRNM0JCLrqAJoEpfTCB_sRBG-dyiw0EM27abgTBLxwtCvKmct1yaWZXK_5ABdMaifP1UztY-hepbEHyJIdKPvavGFzZc7k2cSOw_/s400/Clausula-PIVOT.jpg"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;


&lt;blockquote style="font-family: courier new; font-size: 100%;"&gt;&lt;pre&gt;SQL&gt; SELECT almacen, producto, AVG(precio) pmedio
2  FROM  productos
3  GROUP BY almacen, producto
4  /

ALMACEN PRODUCTO PMEDIO
------- -------- ------
Ba      ABC123       95
Ba      DEF456       75
Ba      XYZ987      160
Ma      ABC123      100
Ma      XYZ987      150
Va      DEF456       80

6 rows selected.       &lt;/pre&gt;&lt;/blockquote&gt;

&lt;a href="https://www.plsql.biz/2008/05/oracle-11g-y-la-clusula-pivot-como.html#more"&gt;Haz clic aquí para leer todo el artículo&lt;/a&gt;</content><link href="https://www.plsql.biz/feeds/3746288158476468416/comments/default" rel="replies" title="Enviar comentarios" type="application/atom+xml"/><link href="https://www.blogger.com/comment/fullpage/post/26801181/3746288158476468416?isPopup=true" rel="replies" title="9 comentarios" type="text/html"/><link href="https://www.blogger.com/feeds/26801181/posts/default/3746288158476468416" rel="edit" type="application/atom+xml"/><link href="https://www.blogger.com/feeds/26801181/posts/default/3746288158476468416" rel="self" type="application/atom+xml"/><link href="https://www.plsql.biz/2008/05/oracle-11g-y-la-clusula-pivot-como.html" rel="alternate" title="La cláusula PIVOT: Cómo girar columnas en SQL y PL/SQL" type="text/html"/><author><name>JLPM</name><uri>http://www.blogger.com/profile/00891045835734721638</uri><email>noreply@blogger.com</email><gd:image height="32" rel="http://schemas.google.com/g/2005#thumbnail" src="//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjU8mDZ-KX_fXrz-RDI8r7soJeLIPcBFRmx8QPNkZABwfC9gv6qMWafd3EvDJCmOaGUyBnhjVbWhx_ER8DfMEaMlvoFiiLYwj5OqKt724MgjMJROYG5WcNgZewAqXoIYw/s220/Yo.gif" width="32"/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" height="72" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh5JfN5XC7kaNoQY891_rwfLyNEmgWg53K2GtMvVoNRG5qb6GzPGT1TrGK9BlH9PeTY9h3qn7uw2reT-g4FppAHB2OKPRNM0JCLrqAJoEpfTCB_sRBG-dyiw0EM27abgTBLxwtCvKmct1yaWZXK_5ABdMaifP1UztY-hepbEHyJIdKPvavGFzZc7k2cSOw_/s72-c/Clausula-PIVOT.jpg" width="72"/><thr:total>9</thr:total></entry><entry><id>tag:blogger.com,1999:blog-26801181.post-8479201835294712375</id><published>2025-01-14T06:30:00.001+01:00</published><updated>2025-01-14T14:55:00.576+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Bases de datos Oracle"/><title type="text">Uso de ediciones para actualizar la base de datos</title><content type="html">&lt;p&gt;Desde mi punto de vista, la &lt;b&gt;funcionalidad &lt;i&gt;Edition-Based Redefinition&lt;/i&gt;&lt;/b&gt;, cuya traducción directa sería &amp;quot;redefinición basada en ediciones&amp;quot;, se trata de la característica más interesante de la &lt;b&gt;release 2 de la base de datos Oracle 11g&lt;/b&gt;. En pocas palabras se trata de la posibilidad de actualizar nuestra aplicación PL/SQL sin tener que poner en modo restringido la base de datos, es decir, a partir de esta versión de la base de datos Oracle &lt;b&gt;es posible realizar online la actualización de nuestra aplicación&lt;/b&gt;. Explicado de esta manera tan sencilla la mencionada funcionalidad suena como si se ratase de un juego de niños, pero en realidad es algo cuya verdadera dimensión resulta difícil de medir por sus enormes implicaciones.&lt;/p&gt;

&lt;div class="separator" style="clear: both;"&gt;&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhUNjRFJeojO3Sw_cU3ERJ5_XRv1Osc8xgvb9FUow3Kg8jIpMw4rcT10NMl-7NG_G8MNNSZs94W3FBxKHvu8hwH8zVu-XJzcQ1pebjpzHb_t8519lo_CeNeLCgPXcXMKiAHUV48yrIBCfAeyvVB4Srryg3NSVG_7nUvuMPyoYBYaMj0tCxI820PEfEmAJvL/s613/ALTER-SESSION-SET-EDITION.jpg" style="display: block; padding: 1em 0; text-align: center; "&gt;&lt;img alt="ALTER SESSION SET EDITION" title="Uso de ediciones para actualizar las base de datos Oracle en programación PLSQL" border="0" width="400" data-original-height="273" data-original-width="613" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhUNjRFJeojO3Sw_cU3ERJ5_XRv1Osc8xgvb9FUow3Kg8jIpMw4rcT10NMl-7NG_G8MNNSZs94W3FBxKHvu8hwH8zVu-XJzcQ1pebjpzHb_t8519lo_CeNeLCgPXcXMKiAHUV48yrIBCfAeyvVB4Srryg3NSVG_7nUvuMPyoYBYaMj0tCxI820PEfEmAJvL/s400/ALTER-SESSION-SET-EDITION.jpg"&gt;&lt;/a&gt;&lt;/div&gt;

&lt;a href="https://www.plsql.biz/2010/05/funcionalidad-edicion-actualizar-oracle.html#more"&gt;Haz clic aquí para leer todo el artículo&lt;/a&gt;</content><link href="https://www.plsql.biz/feeds/8479201835294712375/comments/default" rel="replies" title="Enviar comentarios" type="application/atom+xml"/><link href="https://www.blogger.com/comment/fullpage/post/26801181/8479201835294712375?isPopup=true" rel="replies" title="0 comentarios" type="text/html"/><link href="https://www.blogger.com/feeds/26801181/posts/default/8479201835294712375" rel="edit" type="application/atom+xml"/><link href="https://www.blogger.com/feeds/26801181/posts/default/8479201835294712375" rel="self" type="application/atom+xml"/><link href="https://www.plsql.biz/2010/05/funcionalidad-edicion-actualizar-oracle.html" rel="alternate" title="Uso de ediciones para actualizar la base de datos" type="text/html"/><author><name>JLPM</name><uri>http://www.blogger.com/profile/00891045835734721638</uri><email>noreply@blogger.com</email><gd:image height="32" rel="http://schemas.google.com/g/2005#thumbnail" src="//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjU8mDZ-KX_fXrz-RDI8r7soJeLIPcBFRmx8QPNkZABwfC9gv6qMWafd3EvDJCmOaGUyBnhjVbWhx_ER8DfMEaMlvoFiiLYwj5OqKt724MgjMJROYG5WcNgZewAqXoIYw/s220/Yo.gif" width="32"/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" height="72" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhUNjRFJeojO3Sw_cU3ERJ5_XRv1Osc8xgvb9FUow3Kg8jIpMw4rcT10NMl-7NG_G8MNNSZs94W3FBxKHvu8hwH8zVu-XJzcQ1pebjpzHb_t8519lo_CeNeLCgPXcXMKiAHUV48yrIBCfAeyvVB4Srryg3NSVG_7nUvuMPyoYBYaMj0tCxI820PEfEmAJvL/s72-c/ALTER-SESSION-SET-EDITION.jpg" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-26801181.post-5957764878783918235</id><published>2024-12-11T07:30:00.002+01:00</published><updated>2026-02-03T16:16:24.913+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Optimización y tuning de bases de datos"/><title type="text">Cómo usar la utilidad de trazado del SQL de Oracle</title><content type="html">&lt;p&gt;La utilidad de trazado del SQL de las &lt;a href="/search/label/Bases%20de%20datos%20Oracle"&gt;bases de datos Oracle&lt;/a&gt; nos permite analizar el rendimiento de un determinado programa PL/SQL. Esta funcionalidad nos va a permitir obtener información acerca del &lt;a href="/search/label/Optimizaci%C3%B3n%20y%20tuning%20de%20bases%20de%20datos"&gt;rendimiento de todas las sentencias SQL&lt;/a&gt; que se ejecuten durante la ejecución del programa PLSQL.&lt;/p&gt;

&lt;div class="separator" style="clear: both;"&gt;&lt;p&gt;&lt;a href="/2007/05/como-usar-la-utilidad-de-trazado-del.html#more" style="display: block; padding: 1em 0; text-align: center; "&gt;&lt;img alt="Uso de SQL Trace y TKPROF" title="Cómo usar la utilidad de trazado del SQL de Oracle" border="0" width="400" data-original-height="482" data-original-width="574" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEirjuVqKeb9ik_fVM7KNFLql-VrjtJhZUzf6_an61_WbjYo_Typ8l87kfGF_CvxntnL51YZOPeMJNbOcbPa38qKHzdPy0xb8lZ9PHj4Ph5RRw0FDHJAPZC5xoqPgjnPkcTy64LPCA1RDBqLI5-FOI6oFPWnpnxdkNHgnfDMCijiLSC4VnUGKGIOh1X5MUN7/s400/SQL-Trace-y-TKPROF.jpg"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;

&lt;p&gt;Para utilizar la herramienta de trazado del PL/SQL de Oracle deberemos seguir cinco pasos:&lt;/p&gt;

&lt;p&gt;1) Inicializar los parámetros relativos a esta funcionalidad SQL.&lt;br&gt;
2) Activar la traza SQL.&lt;br&gt;
3) Ejecutar la aplicación que queremos analizar y desactivar la traza cuando termine.&lt;br&gt;
4) Formatear el fichero producido por la traza SQL con el comando &lt;span style="font-style: italic;"&gt;TKPROF&lt;/span&gt;.&lt;br&gt;
5) Interpretar la salida del comando &lt;span style="font-style: italic;"&gt;TKPROF&lt;/span&gt; y, si es necesario, optimizar nuestro programa PLSQL.&lt;/p&gt;

&lt;a href="https://www.plsql.biz/2007/05/como-usar-la-utilidad-de-trazado-del.html#more"&gt;Haz clic aquí para leer todo el artículo&lt;/a&gt;</content><link href="https://www.plsql.biz/feeds/5957764878783918235/comments/default" rel="replies" title="Enviar comentarios" type="application/atom+xml"/><link href="https://www.blogger.com/comment/fullpage/post/26801181/5957764878783918235?isPopup=true" rel="replies" title="0 comentarios" type="text/html"/><link href="https://www.blogger.com/feeds/26801181/posts/default/5957764878783918235" rel="edit" type="application/atom+xml"/><link href="https://www.blogger.com/feeds/26801181/posts/default/5957764878783918235" rel="self" type="application/atom+xml"/><link href="https://www.plsql.biz/2007/05/como-usar-la-utilidad-de-trazado-del.html" rel="alternate" title="Cómo usar la utilidad de trazado del SQL de Oracle" type="text/html"/><author><name>JLPM</name><uri>http://www.blogger.com/profile/00891045835734721638</uri><email>noreply@blogger.com</email><gd:image height="32" rel="http://schemas.google.com/g/2005#thumbnail" src="//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjU8mDZ-KX_fXrz-RDI8r7soJeLIPcBFRmx8QPNkZABwfC9gv6qMWafd3EvDJCmOaGUyBnhjVbWhx_ER8DfMEaMlvoFiiLYwj5OqKt724MgjMJROYG5WcNgZewAqXoIYw/s220/Yo.gif" width="32"/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" height="72" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEirjuVqKeb9ik_fVM7KNFLql-VrjtJhZUzf6_an61_WbjYo_Typ8l87kfGF_CvxntnL51YZOPeMJNbOcbPa38qKHzdPy0xb8lZ9PHj4Ph5RRw0FDHJAPZC5xoqPgjnPkcTy64LPCA1RDBqLI5-FOI6oFPWnpnxdkNHgnfDMCijiLSC4VnUGKGIOh1X5MUN7/s72-c/SQL-Trace-y-TKPROF.jpg" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-26801181.post-4965081005724815426</id><published>2024-11-18T06:25:00.003+01:00</published><updated>2024-11-18T13:44:54.350+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Bases de datos Oracle"/><category scheme="http://www.blogger.com/atom/ns#" term="Optimización y tuning de bases de datos"/><title type="text">Memoria PGA frente a espacio de almacenamiento temporal en las bases de datos Oracle</title><content type="html">&lt;p&gt;Recientemente he recibido en este blogs sobre programación PL/SQL algunas preguntas referentes a las &lt;b&gt;diferencias&lt;/b&gt; entre el tipo de operaciones que la base de datos Oracle realiza en la &lt;b&gt;memoria del área global de programa&lt;/b&gt; (PGA - &lt;i&gt;Program Global Area&lt;/i&gt;) frente a las que realiza en el &lt;b&gt;espacio del almacenamiento temporal&lt;/b&gt; (&lt;i&gt;TEMP space&lt;/i&gt;). Primero os comentaré que las &lt;b&gt;versiones antiguas de las bases de datos Oracle&lt;/b&gt; solían utilizar los parámetros &lt;i&gt;SORT_AREA_SIZE&lt;/i&gt; y &lt;i&gt;HASH_AREA_SIZE&lt;/i&gt; para controlar cuanta memoria PGA era posible utilizar antes de empezar a tener que usar el espacio de disco temporal (TEMP).&lt;/p&gt;

&lt;div class="separator" style="clear: both;"&gt;&lt;p&gt;&lt;a href="/2010/03/memoria-pga-espacio-temp-oracle-bd.html#more" style="display: block; padding: 1em 0; text-align: center; "&gt;&lt;img alt="Utilización de la memoria PGA en PLSQL de Oracle" title="Memoria PGA frente a espacio de almacenamiento temporal en las bases de datos Oracle" border="0" width="400" data-original-height="266" data-original-width="489" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj5jOTAgNzEZCvucQfW_Io8IRB1lT7euwZaIvcSNSUzKH6zGA7v9bEbeHrzcCdjMKmWuIvrSV_d4pvwaQc0S_9I8pfyRaWEX9tDizsyY0r1tp8I-nGZcVjh7zdoiIhnssUe_ayCWP3DppmmL7kizJ-Lb2Y__G2Ec6oYUYYEKbmai5AQy3600sZm/s400/Memoria-PGA-Oracle.jpg"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;

&lt;p&gt;No obstante en las &lt;b&gt;nuevas versiones&lt;/b&gt; de las bases de datos Oracle, &lt;b&gt;la gestión de la memoria PGA se realiza de forma automática&lt;/b&gt; y mucho más dinámica.&lt;/p&gt;

&lt;a href="https://www.plsql.biz/2010/03/memoria-pga-espacio-temp-oracle-bd.html#more"&gt;Haz clic aquí para leer todo el artículo&lt;/a&gt;</content><link href="https://www.plsql.biz/feeds/4965081005724815426/comments/default" rel="replies" title="Enviar comentarios" type="application/atom+xml"/><link href="https://www.blogger.com/comment/fullpage/post/26801181/4965081005724815426?isPopup=true" rel="replies" title="2 comentarios" type="text/html"/><link href="https://www.blogger.com/feeds/26801181/posts/default/4965081005724815426" rel="edit" type="application/atom+xml"/><link href="https://www.blogger.com/feeds/26801181/posts/default/4965081005724815426" rel="self" type="application/atom+xml"/><link href="https://www.plsql.biz/2010/03/memoria-pga-espacio-temp-oracle-bd.html" rel="alternate" title="Memoria PGA frente a espacio de almacenamiento temporal en las bases de datos Oracle" type="text/html"/><author><name>JLPM</name><uri>http://www.blogger.com/profile/00891045835734721638</uri><email>noreply@blogger.com</email><gd:image height="32" rel="http://schemas.google.com/g/2005#thumbnail" src="//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjU8mDZ-KX_fXrz-RDI8r7soJeLIPcBFRmx8QPNkZABwfC9gv6qMWafd3EvDJCmOaGUyBnhjVbWhx_ER8DfMEaMlvoFiiLYwj5OqKt724MgjMJROYG5WcNgZewAqXoIYw/s220/Yo.gif" width="32"/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" height="72" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj5jOTAgNzEZCvucQfW_Io8IRB1lT7euwZaIvcSNSUzKH6zGA7v9bEbeHrzcCdjMKmWuIvrSV_d4pvwaQc0S_9I8pfyRaWEX9tDizsyY0r1tp8I-nGZcVjh7zdoiIhnssUe_ayCWP3DppmmL7kizJ-Lb2Y__G2Ec6oYUYYEKbmai5AQy3600sZm/s72-c/Memoria-PGA-Oracle.jpg" width="72"/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-26801181.post-329567428085568048</id><published>2024-10-30T06:30:00.002+01:00</published><updated>2024-10-30T12:17:10.938+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Tutorial PL/SQL"/><title type="text">Manejo de excepciones en PL/SQL (excepciones predefinidas)</title><content type="html">&lt;p&gt;Los errores que se producen durante la ejecución de un bloque de código PL/SQL pueden ser manejados a gusto del programador, es decir, si durante la ejecución de una sentencia PLSQL se produce un error, podemos hacer que el programa realice unas acciones u otras dependiendo del tipo de error que se haya generado, esto es algo parecido a lo que se puede hacer cuando programamos en &lt;a href="https://es.wikipedia.org/wiki/C++"&gt;C++&lt;/a&gt; o &lt;a href="https://es.wikipedia.org/wiki/Lenguaje_de_programaci%C3%B3n_Java"&gt;Java&lt;/a&gt;. Para conseguir esto debemos añadir dentro del &lt;a href="/2006/10/los-bloques-de-cdigo-plsql.html"&gt;bloque de código PL/SQL&lt;/a&gt; una sección para tratamiento de las excepciones.&lt;/p&gt;

&lt;div class="separator" style="clear: both;"&gt;&lt;p&gt;&lt;a href="/2007/01/manejo-de-excepciones-el-plsql.html#more" style="display: block; padding: 1em 0; text-align: center; "&gt;&lt;img alt="Manejo de excepciones en PL/SQL (INVALID_NUMBER)" title="Manejo de excepciones en PL/SQL (excepciones predefinidas)" border="0" width="400" data-original-height="364" data-original-width="552" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhxXk2U49HAUlunVBAF-JV50c9OQWngFhyphenhyphen8BDDBtVfa1Q09bZiRVD-pZg6PNx8hOWr5kj9Tq38kTVfmKl5uFof-ggZcYZ3xNn57snaAE1vPAnV4fWDchhGsvRntsfqVSHbLc3f4L_mGFrNdnZ2HNQiJajCSvkYSjUsrfPLzDatiGQPhS7M2nhGx/s400/PLSQL-Manejo-Excepciones.jpg"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;

&lt;p&gt;Existen dos tipos de excepciones:&lt;/p&gt;

&lt;ul&gt;&lt;li&gt;Excepciones predefinidas.&lt;/li&gt;
&lt;li&gt;Excepciones definidas por el usuario.&lt;/li&gt;&lt;/ul&gt;

&lt;p&gt;En este artículo voy a hablar sólo de las &lt;strong&gt;excepciones predefinidas&lt;/strong&gt;.&lt;/p&gt;

&lt;a href="https://www.plsql.biz/2007/01/manejo-de-excepciones-el-plsql.html#more"&gt;Haz clic aquí para leer todo el artículo&lt;/a&gt;</content><link href="https://www.plsql.biz/feeds/329567428085568048/comments/default" rel="replies" title="Enviar comentarios" type="application/atom+xml"/><link href="https://www.blogger.com/comment/fullpage/post/26801181/329567428085568048?isPopup=true" rel="replies" title="0 comentarios" type="text/html"/><link href="https://www.blogger.com/feeds/26801181/posts/default/329567428085568048" rel="edit" type="application/atom+xml"/><link href="https://www.blogger.com/feeds/26801181/posts/default/329567428085568048" rel="self" type="application/atom+xml"/><link href="https://www.plsql.biz/2007/01/manejo-de-excepciones-el-plsql.html" rel="alternate" title="Manejo de excepciones en PL/SQL (excepciones predefinidas)" type="text/html"/><author><name>JLPM</name><uri>http://www.blogger.com/profile/00891045835734721638</uri><email>noreply@blogger.com</email><gd:image height="32" rel="http://schemas.google.com/g/2005#thumbnail" src="//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjU8mDZ-KX_fXrz-RDI8r7soJeLIPcBFRmx8QPNkZABwfC9gv6qMWafd3EvDJCmOaGUyBnhjVbWhx_ER8DfMEaMlvoFiiLYwj5OqKt724MgjMJROYG5WcNgZewAqXoIYw/s220/Yo.gif" width="32"/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" height="72" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhxXk2U49HAUlunVBAF-JV50c9OQWngFhyphenhyphen8BDDBtVfa1Q09bZiRVD-pZg6PNx8hOWr5kj9Tq38kTVfmKl5uFof-ggZcYZ3xNn57snaAE1vPAnV4fWDchhGsvRntsfqVSHbLc3f4L_mGFrNdnZ2HNQiJajCSvkYSjUsrfPLzDatiGQPhS7M2nhGx/s72-c/PLSQL-Manejo-Excepciones.jpg" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-26801181.post-6888697594554806669</id><published>2024-10-16T06:30:00.002+02:00</published><updated>2024-10-16T11:18:47.791+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Optimización y tuning de bases de datos"/><title type="text">Tuning y constraints (o restricciones en la base de datos Oracle)</title><content type="html">&lt;p&gt;En este artículo continuaré con el caso de &lt;b&gt;&lt;i&gt;tuning&lt;/i&gt; PL/SQL&lt;/b&gt; planteado en el artículo &lt;a href="/2011/04/tuning-consultas-select-count-plsql.html"&gt;&lt;b&gt;Tuning de consultas SELECT COUNT(*)&lt;/b&gt;&lt;/a&gt; y determinaré cómo es posible mejorar aún más el rendimiento de la consulta SELECT objeto del mencionado artículo. Eso sí, para poder profundizar en el estudio del rendimiento, tuve que solicitar al lector que me hizo la pregunta inicial que me enviase los datos del esquema de la base de datos Oracle para las tablas involucradas en la consulta PLSQL SELECT. Después de un par de correos pude disponer de toda la información que necesitaba, los campos de las tablas, los índices asociados, las claves primarias (&lt;i&gt;primary keys&lt;/i&gt;), las claves extranjeras (&lt;i&gt;foreign keys&lt;/i&gt;), y las diferentes restricciones (&lt;a href="/2009/12/clausula-constraint-para-mejorar-el.html"&gt;&lt;i&gt;constraints&lt;/i&gt;&lt;/a&gt;) aplicadas sobre las mencionadas tablas.&lt;/p&gt;

&lt;div class="separator" style="clear: both;"&gt;&lt;a href="/2011/07/tuning-constraints-base-de-datos-oracle.html#more" style="display: block; padding: 1em 0; text-align: center; "&gt;&lt;img alt="ALTER TABLE CONSTRAINT" title="Tuning y constraints en la base de datos Oracle" border="0" width="400" data-original-height="534" data-original-width="871" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhn4VB7SFP4jKptQSNEVaaE0WHGLL6REg05_9EWNnDO9Yr2yzj1mEEtuKtLUdmelrkSrl6Zu4YNzVlcwhP5-KpaM224zfTBOUlDGJ49B6JQRk9g0BkslabGhUyMJIqy-Pt3D9vzitK-V8gX08GdNk6wpnaF3XkDaTLpYHixsv3iNlWlsXMODYD6/s400/Alter-Table-Constraint.jpg"&gt;&lt;/a&gt;&lt;/div&gt;

&lt;p&gt;En suma, disponía de la siguiente información incluida en las siguientes sentencias SQL:&lt;/p&gt;

&lt;a href="https://www.plsql.biz/2011/07/tuning-constraints-base-de-datos-oracle.html#more"&gt;Haz clic aquí para leer todo el artículo&lt;/a&gt;</content><link href="https://www.plsql.biz/feeds/6888697594554806669/comments/default" rel="replies" title="Enviar comentarios" type="application/atom+xml"/><link href="https://www.blogger.com/comment/fullpage/post/26801181/6888697594554806669?isPopup=true" rel="replies" title="1 comentarios" type="text/html"/><link href="https://www.blogger.com/feeds/26801181/posts/default/6888697594554806669" rel="edit" type="application/atom+xml"/><link href="https://www.blogger.com/feeds/26801181/posts/default/6888697594554806669" rel="self" type="application/atom+xml"/><link href="https://www.plsql.biz/2011/07/tuning-constraints-base-de-datos-oracle.html" rel="alternate" title="Tuning y constraints (o restricciones en la base de datos Oracle)" type="text/html"/><author><name>JLPM</name><uri>http://www.blogger.com/profile/00891045835734721638</uri><email>noreply@blogger.com</email><gd:image height="32" rel="http://schemas.google.com/g/2005#thumbnail" src="//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjU8mDZ-KX_fXrz-RDI8r7soJeLIPcBFRmx8QPNkZABwfC9gv6qMWafd3EvDJCmOaGUyBnhjVbWhx_ER8DfMEaMlvoFiiLYwj5OqKt724MgjMJROYG5WcNgZewAqXoIYw/s220/Yo.gif" width="32"/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" height="72" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhn4VB7SFP4jKptQSNEVaaE0WHGLL6REg05_9EWNnDO9Yr2yzj1mEEtuKtLUdmelrkSrl6Zu4YNzVlcwhP5-KpaM224zfTBOUlDGJ49B6JQRk9g0BkslabGhUyMJIqy-Pt3D9vzitK-V8gX08GdNk6wpnaF3XkDaTLpYHixsv3iNlWlsXMODYD6/s72-c/Alter-Table-Constraint.jpg" width="72"/><thr:total>1</thr:total></entry></feed>