Mostrando entradas con la etiqueta Oracle. Mostrar todas las entradas
Mostrando entradas con la etiqueta Oracle. Mostrar todas las entradas

jueves, 13 de junio de 2013

Capturar el nombre del programa u objeto en PL/SQL

He tenido la necesidad de colocar diferentes auditorias en los programas de la base de datos que administro, normalmente este proceso lo hacia de forma manual, es decir, en la tabla de auditoria colocaba un campo para guardar el nombre del programa u objeto que realiza algún cambio, actualización, inserción, etc., sin embargo, he tenido que automatizar el proceso, ya que estoy usando triggers (perfectos para auditorias) y a estos no les puedo enviar el nombre del objeto. Para esto entonces se utiliza el siguiente comando:

 DBMS_APPLICATION_INFO.READ_MODULE

martes, 14 de agosto de 2012

Eliminar registros duplicados en Oracle


Si por algún motivo insertaron registros duplicados de una tabla, ya sea porque han eliminado la clave primaria o ni siquiera la han creado y ahora la consideran necesaria; por aquí les dejo una sentencia que los puede ayudar a eliminar esos registros innecesarios:

delete from tabla
where rowid not in
(select min(rowid)
from tabla
group by (col_pk1, col_pk2, col_pk3...));

Donde tabla indica la tabla en cuestión y las col_pkn son las columnas que forman la primary key.

Configurar Idioma y decimales en Oracle 10g

Si utilizas Power Builder con Base de datos oracle y tienes problemas en la utilización de puntos decimal y separador de miles, en este caso, la versión de PB en que trabajes, es indiferente, el problema, es la incompatibilidad en el SET de caracteres del ORACLE entre el cliente y el set de caracteres con el cual ha sido instalada la DB, ya que un en la base de datos esta definida como 123.125,25 y para el cliente 123,125.25 Si te fijas bien el separador de miles es el (.) punto para el cliente.

Antes debemos verificar si el idioma de configuración de la base de datos es la misma que la configuración de sesión.

select * from nls_database_parameters;
select * from nls_session_parameters;

lunes, 28 de mayo de 2012

Oracle Data Pump


Desde la versión 10gR1 de Oracle Database disponemos de una nueva herramienta para la carga/descarga de datos en formato nativo Oracle: Oracle Data Pump.
Es importante entender cómo funciona Oracle Data Pump, ya que ha sufrido grandes cambios si lo comparamos con el export/import tradicional, en concreto, ha pasado de ser una herramienta cliente a ser un trabajo en el servidor.
En esta entrada de blog intentaré aclarar en especial este punto, que creo, es el más difícil de entender al enfrentarse por primera vez a esta herramienta.

miércoles, 2 de mayo de 2012

Sentencia CONTINUE, una de las mejoras en PL/SQL



Continuamos con la serie de articulos que introducen las mejoras hechas al lenguaje de programación PL/SQL en la version 11g de Oracle. En esta ocasión hablaremos de la sentencia CONTINUE.
Esta sentencia salta del ciclo en el cual se esta ejecutando y continua con el curso normal del programa.


sábado, 28 de abril de 2012

PL/SQL Nueva mejora en Oracle Database 11g

A partir de la versión 11g de Oracle, se han introducido varias mejoras en el lenguaje de programación PL/SQL. Una de estas mejoras tiene que ver con el tipo de dato PLS_INTEGER, este es similar al INTEGER pero con un eficiencia mucho mayor. En esta versión, Oracle introduce el tipo de dato SIMPLE_INTEGER, el cual ofrece un rendimiento mucho mayor que el PLS_INTEGER.

El siguiente código compara el rendimiento entre estos dos tipos de datos:

DECLARE  

  inicio                       NUMBER;  
  ciclos                     NUMBER := 100000000;  
  l_pls_integer            PLS_INTEGER := 0;  
  l_pls_integer_incr      PLS_INTEGER := 1;  
  l_simple_integer        SIMPLE_INTEGER := 0;  
  l_simple_integer_incr  SIMPLE_INTEGER := 1; 

BEGIN 

  inicio := to_Char(sysdate, 'SS');

  FOR i IN 1 .. ciclos LOOP    
       l_pls_integer := l_pls_integer + l_pls_integer_incr;  
  END LOOP; 

  DBMS_OUTPUT.put_line('PLS_INTEGER: ' || (to_Char(sysdate, 'SS') - inicio) || ' seg'); 

  inicio := to_Char(sysdate, 'SS');

  FOR i IN 1 .. ciclos LOOP    
       l_simple_integer := l_simple_integer + l_simple_integer_incr;  
  END LOOP; 

  DBMS_OUTPUT.put_line('SIMPLE_INTEGER: ' || (to_Char(sysdate, 'SS') - inicio) || ' seg'); 

END;


El resultado al ejecutar este script es el siguiente:


PLS_INTEGER: 5 seg
SIMPLE_INTEGER: 4 seg


Muchos desarrolladores continuamos utilizando la sintaxis antigua de Oracle, sin darnos cuenta de las nuevas mejoras que en cada versión se estan incorporando al lenguaje.