sábado, 31 de octubre de 2009

SQL Developer: DBMS_OUTPUT.PUT_LINE no imprime

Para imprimir por pantalla en pl/sql usualmene se suele usar el comando PUT_LINE. Sin embargo si lo ejecutamos en sqldeveloper no funciona ( o podría no funcionar). Un ejemplo simple de impresión:
BEGIN
DBMS_OUTPUT.PUT_LINE('Hola Mundo!');
END;

Para que se muestre la salida debemos ejecutar:
set serveroutput on
Y obtendremos la siguiente salida cuando volvamos a ejecutarlo
anonymous block completed
Hola Mundo!

miércoles, 28 de octubre de 2009

Bash: Medir tiempos de ejecución con time

Para medir los tiempos de ejecución en Bash podemos usar el comando time. Su sintaxis es así
time comando_a_ejecutar

Por ejemplo podriamos usar:
time ls -l

y la salida sería
real 0m0.006s
user 0m0.000s
sys 0m0.004s

Si queremos redirigir la salida, el comando time no la imprime por la salida estandar (out) si no por la err. Podemos guardar la salida de time en un archivo con la siguiente sintaxis
(time ls) 2> time.txt

Del mismo modo podemos realizar redirecciones más avanzadas almacenando la salida en un sitio y el time en otro. En el ejemplo medimos el tiempo de un bucle for usando time, almacenando el time en el archivo time.txt y la salida estandar en el archivo salida.txt
#!/bin/bash
time (for i in $(seq 1 5); do
echo $i;
done ) 2>> time.txt 1> salida.txt

Si queremos que todo vaya al mismo sitio podemos usar lo siguiente:
#!/bin/bash
time (for i in $(seq 1 5); do
echo $i;
done ) > salida.txt 2>&1

Si queremos suprimir alguna de las salidas usaremos como destino /dev/null

Relacionado:
http://dieguz2.blogspot.com/2007/03/como-redireccionar-stdout-y-stderr.html

viernes, 23 de octubre de 2009

VirtualBox: error 0x80004005

Al ejecutar VirtualBox me salía el siguiente error

Could not load the settings file '/home/dieguz/.VirtualBox/VirtualBox.xml'.
Cannot convert settings from version '1.7-linux'.
The source version is not supported.

Código Resultado:
NS_ERROR_FAILURE (0x80004005)
Componente:
VirtualBox
Interface:
IVirtualBox {557a07bc-e6ae-4520-a361-4a8493199137}


El problema era que los archivos de configuración se correspondian a una versión más moderna que la que estaba ejecutando en ese momento.

Para solucionarlo hay algunas opciones:

a) Instalar una versión más moderna de VirtualBox
b) Eliminar el directorio $HOME/.VirtualBox. De este modo que partiremos de una configuración en blanco.
c)Podemos también a renombrar solamente el archivo de configuración con:
mv $HOME/.VirtualBox/VirtualBox.xml $HOME/.VirtualBox/VirtualBox.xml.copia

sábado, 17 de octubre de 2009

Oracle: Character set válidos

La tabla V$NLS_VALID_VALUES contiene una lista con todos los valores válidos para los parámetros NLS
SELECT * FROM V$NLS_VALID_VALUES WHERE parameter = 'CHARACTERSET';

Por ejemplo usando
SELECT * FROM V$NLS_VALID_VALUES WHERE parameter = 'CHARACTERSET';
Podremos ver todos los posibles valores del character set, para funciones como convert
select convert('leño','UTF8') from dual;

y evitaremos el error "ORA-01482:juego de caracteres no soportado" por no saber como escribir el character set.

jueves, 8 de octubre de 2009

XML: Validar un XML contra un XSD desde línea de comando en Linux

Para validar un archivo XMl con un esquema XSD, en linux podemos usar la linea de comandos. Para ello usaremos el comando xmllint. Tenemos que tener instalado el paquete libxml2, si no lo tenemos y usapos Opensuse :
sudo zypper in libxml2

Una vez instalado, para verificar el archivo xml ejecutaremos lo siguiente:
xmllint --noout miarchivo.xml --schema miesquema.xsd

El parámetro --noout es para evitar que imprima el arbol XML.

Si hay errores los mostrará por la salida de error (stderr). Si queremos almacenar los errores haremos una redirección de la salida:
xmllint --noout miarchivo.xml --schema miesquema.xsd 2> archivodeerrores.txt


Si el archivo ha sido validado correctamente obtendremos el mensaje:
miarchivo.xml validates


Si queremos usar un DTD para validar un archivo usaremos la siguiente sintaxis:
xmllint --valid --noout miarchivo.xml --dtdvalid miesquemadtd.dtd

SQLDeveloper: deshabilitar ampersand &

En Sqldeveloper cuando en el script encuentra el caracter '&' (ampersand) entiende que es una sustitución de variable, y nos pide que introduzcamos un valor para esa variable. Esto es especialmente molesto en inserciones, como por ejemplo entidades xml o html.

inset into tabla(campo1,campo2) values ('you & me', 'otorrinolaringológica')


En general podemos evitar este comportamiento poniendo al principio del código:

SET SCAN OFF


Con lo que deshabilitaremos que nos pregunte.