Oracle: rellenar a la derecha o izquierda con algún caracter un texto.

A veces necesitamos formatear una columna de un resultado de una consulta SQL en Oracle para que se muestre con una longitud fija. Es decir que el valor de la columna o campo sea de longitud fija en el resultado.

Formatear resultados de una consulta SQL con un caracter dado.

Para formatear la salida de una columna podemos usar las funciones RPAD o LPAD del motor de la base de datos Oracle.

Dicen que una imagen dice más que mil palabras así que dejo una imagen de la sentencia y el resultado:

Ejemplo de la funciones SQL RPAD() y LPAD() de Oracle.

¿Que está sucediendo? Bueno las funciones RPAD() y LPAD() de Oracle regresan un texto de una longitud fija. Ambas funciones aceptan tres parámetros, un texto, la longitud del texto resultante y un caracter con el que va a rellenar los espacios faltantes del texto dado para completar la longitud del texto final.

En el ejemplo anterior la función RPAD() recibe la constante o literal “Introducción”, el número 30 como la longitud del texto a devolver y el caracter punto (.) como el caracter de relleno. La longitud de la constante “Introducción” es de 12 caracteres, por lo tanto faltan 18 caracteres para completar los 30 que va a contener el texto resultante (30-12 = 18). RPAD() rellena con el caracter de relleno,en este caso punto (.) esos 18 caracteres faltantes y los coloca a la derecha del texto original quedando así:

Introducción………………

El texto “Introducción” y doce puntos a la derecha del texto. Precisamente la R es de la palabra inglesa RIGHT (derecha en español).

Una vez visto cómo funciona esta primera función, nos será fácil entender como funciona la segunda. LPAD() tiene el mismo funcionamiento, sólo que el relleno lo hará a la izquierda del texto original. La letra L es de la palabra inglesa LEFT (izquierda en español).

En el ejemplo anterior LPAD() regresará un texto de longitud 3:

..1

Dos puntos y el caracter 1. El resultado final de la instrucción SELECT es la concatenación (operador dos barras verticales o pipes [||] )de lo que regresan las funciones RPAD() y LPAD() y le asigna el alias “indice” a la columna resultante. El resultado final es:

Introducción………………..1

Espero y les sea útil.

¡Hasta pronto!

Obtener sesiones bloqueantes a través de consulta SQL en Oracle

Para obtener o saber si hay sesiones que estén ocasionando algún bloqueo en una base de datos Oracle 10g ejecutamos la siguiente consulta con un usuario con privilegios de administrador. En mi caso la estoy haciendo con el usuario SYS de Oracle:

SELECT
   blocking_session as "Id de la sesión bloqueante", sid as "Identificador de la sesión", 
   serial# "Numero de serie de la sesión", seconds_in_wait as "Segundos en espera"
FROM
   v$session
WHERE
   blocking_session is not NULL
ORDER BY
   blocking_session;

La columna “Id de la sesión bloqueante” nos mostrará el identificador de la sesión bloqueante. Esta columna, junto con el valor del “Número de serie de la sesión”, nos servirán para “matar” dicha sesión con el comando sql ALTER SYSTEM KILL SESSION.

¡Hasta pronto!

KUP-11011: the following file is not valid for this load operation

Al tratar de recuperar un archivo de respaldo de múltiples archivos de oracle con el comando impdp este marcaba error y no recuperaba el respaldo.

Dentro de los errores que me aparecían estaban los siguientes:

KUP-11011: the following file is not valid for this load operation
KUP-11014: internal metadata in file /data/backups/respaldo_03.dmp is not valid

Al parecer es un bug de Oracle en la versión 12.1.0.2.0. Para que funcionara correctamente la importación tuve que agregar el parámetro

ACCESS_METHOD=DIRECT_PATH

A los parámetros del comando impdp quedando de esta forma la llamada:

impdp system/******* remap_schema=ESQUEMA1:ESQUEMA2 tables=ESQUEMA1.TABLA directory=RESPALDOS parallel=5 dumpfile=respaldo_%U.dmp logfile=respaldo.log full=N TABLE_EXISTS_ACTION=REPLACE ACCESS_METHOD=DIRECT_PATH

De esta forma la importación de la tabla dejó de marcar el error descrito arriba.

Espero les sea útil. ¡Hasta pronto!