Oracle SQL – Función TO_CHAR()

La función TO_CHAR() realiza la conversión de un número o fecha a una cadena, el valor retornado será siempre un VARCHAR2 y opcionalmente permite también una mascara para formatear la salida.

Sintaxis

La sintaxis para la función TO_CHAR() es:

Sintaxis

TO_CHAR(Valor, [mascara])

La función TO_CHAR() realiza la conversión de un número o fecha a una cadena, el valor retornado será siempre un VARCHAR2 y opcionalmente permite también una mascara para formatear la salida.

Ejemplos:

 

Números

SELECT TO_CHAR(513,70, ‘9999,9’) FROM DUAL;TO_CHAR
——-
513,7

Otro ejemplo:

SELECT TO_CHAR(5891,73, ‘9.999,99’) FROM DUAL;TO_CHAR
——-
5.891,73

Ejemplos para fechas

SELECT TO_CHAR(TO_DATE(’12/JAN/2010′), ‘DD/MM/YY’) FROM DUAL;TO_CHAR(
——–
12/01/10
SELECT TO_CHAR(TO_DATE(’12/JAN/2010′), ‘MM/DD/YY’) FROM DUAL;TO_CHAR(
——–
01/12/10
SELECT TO_CHAR(TO_DATE(’12/DEC/2010′), ‘MM/RM/YYYY’) from DUAL;TO_CHAR(TO_D
————
12/XII /2010

Como obtener el día de la semana de una fecha combinando con TO_DATE().

SQL> SELECT TO_CHAR(TO_DATE(’08/01/1963′), ‘DAY’) “Dia Semana” FROM DUAL;Dia Seman
———
MARTES

La siguiente lista resumida muestra los principales valores validos para la mascara para los valores de tipo DATE.

 

Valor Mascara – Descripción

YEAR    Año en texto
YYYY    Año en 4 dígitos
YYY
YY
Y       Últimos 3, 2, or 1 dígitos del año.
IYYY    Año en 4 dígitos en estándar ISO.
IYY
IY
I       Últimos 3, 2, or 1 dígitos del año en formato ISO.
Q       Cuatrimetre.
MM      Mes en dos dígitos.
MON     Mes en texto abreviado.
MONTH   Mes en texto completo, 9 caracteres y rellena por la derecha con blancos.
RM      Mes en números romanos.
WW      Semana del año (1-53).
W       Semana del mes (1-5).
IW      Semana del año (1-52 or 1-53) en estándar ISO.
D       Día de la semana (1-7), 1 lunes, 2 martes, etc.
DAY     Nombre del día.
DD      Día del mes (1-31).
DDD     Día del año (1-366).
DY      Nombre del día abreviado.
J       Día Juliano; es el número de días desde el 1 de enero de 4712 AC.
HH      Hora (1-12).
HH12    Hora (1-12) en formato de 12H.
HH24    Hora (0-23) en formato de 24H.
MI      Minutos (0-59).
SS      Segundos (0-59).
SSSSS   Segundos pasada la medianoche (0-86399).
FF      Franciones de segundo.

Lista de valores para la mascara de tipo de dato NUMBER.

Valor Mascara – Descripción

,     (Coma) Devuelve una coma en la posición especificada.
.     (Punto) Devuelve un punto decimal en la posición especificada.
$     Devuelve el valor precedido del símbolo $.
0     Devuelve el valor precedido de ceros.
9     Devuelve el valor con el número especificado de dígitos.
B     Devuelve el valor con blancos par la parte entera de un número.
C     Devuelve el valor con el símbolo ISO de moneda en la posición especificada.
D     Devuelve en la posición especificada el carácter decimal.
EEEE  Devuelve el valor usando notación científica.
G     Devuelve el valor con el separador de grupo en la posición especificada
L     Devuelve el valor con el símbolo de moneda en la posición especificada.
MI    Devuelve el valor en forma negativa con el símbolo ‘-‘.
PR    Devuelve el valor en forma negativa entre los símbolos ‘<>’.
RN    Devuelve el valor en mayúsculas y en números romanos.
rn    Devuelve el valor en minúsculas y en números romanos.
s     Devuelve el valor en forma negativa y con el símbolo ‘-‘.
U     Devuelve el valor con el símbolo de moneda dual, Euro (u otro), definido en NLS_DUAL_CURRENCY.
V     Devuelve el valor multiplicado por 10n, donde n es el número de el número de nueves después de la V.
Fuente:

Configurar iReport con JTDS para conectar a MsSQL

En esta oportunidad mostrare como realizar una conexión desde iReport a Microsoft SQL 7 Enterprise usando la libreria JTDS.

Requerimientos

iReport http://jasperforge.org/projects/ireport
JTDS http://sourceforge.net/projects/jtds/

Configuración

Paso 1:
Para este tema previamente instalamos iReport, cargamos iReport y hacemos clic en el menú  como se muestra en la imagen, que sirve para realizar una conexión a base de datos.

Paso 2:
Se apertura una venta en donde debe seleccionamos el tipo de conexión, escoja [Database JDBC connection].

Paso 3:
Ingresamos en Name: un nombre a nuestra conexión en mi caso usare  EESA, luego deberiamos seleccionar en JDBC Driver: [Ms SQLServer (net.sourceforge.jtds.Driver)] ; pero no esta cargado el jar de JTDS dentro de las librerias de iReport, es por este motivo que se encuentra resaltado de color rojo.  vamos a cargar la libreria de JTDS para realizar la conexión.

Paso 4:
Necesitamos descargar previamente la libreria JTDS de la URL http://sourceforge.net/projects/jtds/ abrimos el archivo descargado de jtds-1.2.5-dist.zip con WinZip o WinRar y extraemos solo el jtds-1.2.5.jar en la ubicación que se muestra a continuación.

Extraiga o descomprima el  jtds-1.2.5.jar en la ubicación. que se muestra en esta imagen.

Paso 5:
en iReport dirijase al menu [Herramientas] / [Opciones] para cargar la libreria jar de JTDS.

Paso 6:
En la ventana de Opciones dirijase a la ficha [Classpath], luego presione el boton [Add JAR] para ubicar la libreria jar de JTDS.

En esta ventana dirijase a la ruta en donde descomprimio el jar de jtds-1.2.5  y presione el boton [Abrir], para cargar el jar.

Como se puede observar ya tenemos la libreria jar de JTDS cargada en iReport ahora solo presione el boton [Aceptar].

Paso 7:
Cargada la libreria jar de JTDS, solo hay queda repetir los “pasos 1 y 2” y veremos que ahora si es posible seleccionar en JDBC Driver:  [MS SQLServer (net.sourceforge.jtds.jdbc.Driver)] que anteriormente se encontraba resaltada de color rojo.

Ingresamos los otros datos necesarios para la conexión como Server Address: [IP del servidor de la base de datos MS SQL], Database: [ el nombre de la base de datos ], Username: [usuario con permisos de conexion], Password: [la contraseña ] y para armar el JDBC URL: presione sobre el boton [Wizard].

Para verificar que la conexión realizada no tiene problemas presionar el boton [Test] y posteriormente podemos guardar la conexión con el boton [Save].

 

Ahora podemos observar resaltada de amarillo nuestra conexión a MS SQL Server, ahora solo queda crear un nuevo reporte y usar la conexión.

Fuente:

Manual de Iniciación en Oracle

A Continuación publico el link de un buen manual de iniciación en Oracle

http://www.mundoracle.com/el-modelo-relacional.html?Pg=sql_plsql_1.htm

 

Creación de Un Job en Oracle

El siguiente ejemplo muestra la creación de un job de nombre job_actualizar que se va ejecutar de manera diaria a horas 05:00 a.m.

begin
dbms_scheduler.create_job(job_name => ‘job_actualizar’,
job_type => ‘PLSQL_BLOCK’,
job_action => ‘BEGIN
dbreporte.sp_etl_procesar_venta;
END;’,
start_date => sysdate,
end_date => NULL,
repeat_interval => ‘freq=daily;byhour=5;byminute=0;bysecond=0’,
enabled => true,
comments => ‘Actualizacion de ventas a horas 05:00’);
end;

 

Ejecutar el job creado
begin
dbms_scheduler.run_job(‘job_actualizar’);
end;

 

Open ports on UFW (uncomplicated Firewall – Ubuntu)

Open ports on UFW (uncomplicated Firewall – Ubuntu).
I wanted to unblock 5432 port for a PostGre SQL setup.
Here is how you do it.
To check status for firewall
ahmed@ahmed-work-horse:~$ sudo service ufw status
ufw start/running
you can also use this command to check status
ahmed@ahmed-work-horse:~$ sudo ufw status
Status: inactive
ahmed@ahmed-work-horse:~$ sudo ufw status
Status: inactive
ahmed@ahmed-work-horse:~$ sudo ufw enable 
Firewall is active and enabled on system startup
If the status is not stopped/waiting, you can enable it using the below command
ahmed@ahmed-work-horse:~$ sudo ufw enable
To open a port say 5432:
ahmed@ahmed-work-horse:~$ sudo ufw allow 5432
To block/close an opened port:
ahmed@ahmed-work-horse:~$ sudo ufw deny 5432
To remove a rule, use delete followed by the rule:
ahmed@ahmed-work-horse:~$ sudo ufw delete deny 5432
It is also possible to allow access from specific hosts or networks to a port. The following example allows ssh access from host 192.168.0.2 to any ip address on this host:
ahmed@ahmed-work-horse:~$ sudo ufw allow proto tcp from 172.16.167.2 to any port 5432
Rules updated
ahmed@ahmed-work-horse:~$ sudo ufw status
Status: active
 
To                         Action      From
--                         ------      ----
5432/tcp                   ALLOW       172.16.167.2
 
ahmed@ahmed-work-horse:~$
Replace 172.16.167.2 with 172.16.0.0/24 to allow port 5432 access from the entire subnet.
ufw can be disabled by:
ahmed@ahmed-work-horse:~$ sudo ufw disable
Thats it!!!.
Fuente:

Comandos para comprobar si un puerto está abierto en nuestra PC/Servidor u otro remoto

A veces necesitamos saber si X puerto está abierto en un ordenador (o servidor) remoto, en ese momento tenemos no pocas opciones o herramientas a usar:

nmap

La primera solución que pensamos muchos es: nmap , ver artículo llamado: Ver puertos abiertos con NMap y medidas para protegernos 

En caso de que no deseen hacer todo un scan, sino que simplemente deseen saber si en X ordenador/servidor está abierto un determinado puerto, sería así:

nmap {IP_O_DOMINIO} -p {PUERTO} | grep -i tcp

Ejemplo:

nmap localhost -p 22 | grep -i tcp

O bien:

nmap 127.0.0.1 -p 22 | grep -i tcp

Lo que hace esto es simple, pregunta a la IP o Host si el puerto dado está abierto o no, luego el grep filtra y solo muestra la línea que desean leer, la que les indica si está abierto (open) o cerrado (closed) ese puerto:

nmap

Pues… sí, nmap (Herramienta de exploración de redes y de sondeo de puertos) nos sirve pero, hay aún otras variantes donde hay que teclear menos 🙂

nc

nc o netcat, es una opción mucho más simple para saber si un puerto está o no abierto:

nc -zv {IP_O_DOMINIO} {PUERTO}

O sea:

nc -zv 192.168.122.88 80

Aquí tienen un screenshot haciendo una prueba a un puerto que sí está abierto (80) y otra a otro puerto que no lo está (53):

nc

El -zv lo que hace es simple, la v nos permite ver si está abierto o no el puerto, mientras que la z cierra la conexión tan pronto se comprueba el puerto, de no poner la z entonces tendríamos que hacer un Ctrl + C para cerrar el nc.

telnet

Esta es la variante que hace un tiempo usaba (por desconocimiento de las antes mencionadas), a su vez telnet nos sirve para mucho más que solo saber si un puerto está abierto o no.

telnet {IP_O_HOST} {PUERTO}

Aquí un ejemplo:

telnet 192.168.122.88 80

El problema de telnet es el cierre de la conexión. O sea, en determinadas ocasiones no podremos cerrar la solicitud de telnet y nos veremos obligados a cerrar esa terminal, o de lo contrario en otra terminal hacer un killall telnet o algo similar. Es por eso que evito usar telnet a no ser que me sea muy necesario.

Fuente:

Comandos para comprobar si un puerto está abierto en nuestra PC/Servidor u otro remoto

PostgreSQL Ubuntu

PostgreSQL es un potente motor de bases de datos, que tiene prestaciones y funcionalidades equivalentes a muchos gestores de bases de datos comerciales. Es más completo que MySQL ya que permite métodos almacenados, restricciones de integridad, vistas, etc. aunque en las últimas versiones de MySQL se han hecho grandes avances en ese sentido.

Instalación

En Ubuntu disponemos paquetes para varias versiones de PostgreSQL: 7.4, 8.0, 8.1 y 8.2 de modo que instalaremos la última versión a no ser que necesitemos alguna anterior. Los paquetes necesarios para una instalación completa son los de la parte cliente (postgresql-client-8.2) y los de la parte servidora (postgresql-8.2). En un ordenador que usemos como cliente sólo necesitamos los paquetes del cliente. También es recomentable instalar un cliente gráfico que nos facilitará la interacción con el servidor. Un cliente gráfico recomendable es pgAdmin III, que funciona muy bien.

Si tienes dudas sobre que necesitas, puedes instalar los tres paquetes:

 $ sudo aptitude install postgresql-8.2 postgresql-client-8.2 pgadmin3
Nota clasica.png Recuerda desinstalar cualquier versión de postgresql que no necesites para no afectar el rendimiento de tu sistema.

Por razones de seguridad estableceremos la nueva contraseña al usuario del sistema creado por PostgreSQL:

 $ sudo passwd postgres

Cambiar los privilegios de acceso al shell del usuario postgres con el siguiente comando:

 $ sudo vipw

Y cambiamos el shell del usuario postgres de “/bin/false” a “/bin/bash”. Luego salimos grabando con escape “:wq”. Para verificar si la instalación fue satisfactoria accedemos a la shell del servidor de bases de datos:

 $ sudo su postgres -c "psql template1"

Si el acceso ha sido satisfactorio cambiamos la contraseña al usuario predeterminado del servidor de bases de datos:

 template1=# ALTER USER postgres WITH PASSWORD 'nueva_contraseña';

Te saldrá el siguiente mensaje confirmando la operación:

 ALTER ROLE

Sal de la shell del servidor de bases de datos con el comando \q :

 template1=# \q

Configuración

Permitir conexiones remotas

Por motivos de seguridad, la configuración por defecto no admite conexiones externas. Para habilitarlas tenemos que editar el fichero /etc/postgresql/8.2/main/postgresql.conf.

$ sudo gedit /etc/postgresql/8.2/main/postgresql.conf

Ahora buscamos las siguientes líneas que se encuentran comentadas:

#listen_addresses = 'localhost'

Y la substituimos por la siguiente línea:

listen_addresses = '*'

Posteriormente buscamos la siguiente línea y le quitamos la marca de comentario:

#password_encryption = on

Y nos debe quedar lo siguiente:

password_encryption = on

Guardamos los cambios y reiniciamos el dominio para que los cambios surjan efecto:

$ sudo /etc/init.d/postgresql-8.2 restart

Configurar la lista de acceso

La configuración de la lista de acceso permite decirle a PostgreSQL qué método de autentificación usar y establecer relaciones de confianza para ciertas máquinas y redes. Hay que editar el fichero /etc/postgresql/8.2/main/pg_hba.conf:

$ sudo vi /etc/postgresql/8.2/main/pg_hba.conf

Al final del archivo se encuentra una lista de acceso predeterminada, ahora, dependiendo de su necesidad puedes hacer lo siguiente:

  • Si necesita que cualquier usuario se conecte por medio de una dirección IP en especifico, agregue al final la siguiente línea:
host all all 192.168.1.4 255.255.255.0 md5
Nota clasica.png La dirección IP y la SubMascara de Red son ejemplos, cámbielas por datos del usuario que requiera realizar la conexión.
  • Si necesita que cualquier usuario se conecte por medio de una IP determinada sin importar el password (confiamos en dicha IP), la línea es:
host all all 192.168.1.4 255.255.255.255 trust
  • Si necesita que cualquier usuario (usuario de base de datos autentificándose, claro) se conecte por medio de cualquier dirección IP, agregue al final la siguiente línea:
host all all 0.0.0.0 0.0.0.0 md5
  • Si necesita que un usuario determinado se conecte a una base de datos determinada por medio de una dirección IP en especifico, agregue al final la siguiente línea:
host MyDataBase MyUser 192.168.1.4 255.255.255.0 md5
  • Guarda los cambios realizados en el archivo y reinicia el demonio para que los cambios surjan efecto:
$ sudo /etc/init.d/postgresql-8.2 restart

Gestión de usuarios

Los usuarios de PostgreSQL tienen un par de capacidades que definimos en su creación. Me explico: un usuario puede o no crear más usuarios y un usuario puede o no crear bases de datos. En el ejemplo que puedes ver a continuación creamos un usuario que no puede crear más usuarios (no es un administrador) pero puede crear más bases de datos. El modificador -P hace que nos pregunte por el password que le asignaremos al usuario. De otra manera el usuario se creará sin password.

$ createuser -A -d -P -h host -U usuario nuevo_usuario
Enter password for user "nuevo_usuario":
Enter it again:

Como acabo de comentar, existen usuario administradores (pueden crear otros usuarios). Como es lógico este comando debe ser ejecutado por un usuario con esa característica.

Análogamente podemos eliminar un usuario de esta forma:

$ dropuser -h host -U usuario usuario_borrar

Copia de seguridad

Para hacer una copia de seguridad de una base de datos tiene el siguiente comando:

$ pg_dump -h host -U usuario nombre_bd > nombre_bd.sql

Para hacer una copia de seguridad de todas las bases de datos PostgreSQL de un servidor, usa este escript:

<bash>

#!/bin/bash

## BEGIN CONFIG ##
HOST=localhost
BACKUP_DIR=tmp
## END CONFIG ##

if [ ! -d $BACKUP_DIR ]; then
  mkdir -p $BACKUP_DIR
fi

POSTGRE_DBS=$(psql -h $HOST -U postgres -l | awk ' (NR > 2) && (/[a-zA-Z0-9]+[ ]+[|]/) && ( $0 !~ /template[0-9]/) { print $1 }');

for DB in $POSTGRE_DBS ; do 
  echo "* Backuping PostgreSQL data from $DB@$HOST..."
  pg_dump -h $HOST -U postgres $DB > $BACKUP_DIR/pg_$DB.sql
done

</bash>

Para restaurar una copia de seguridad:

psql -d nombre_base_datos -f archivo.pgdump

Fuente:
http://www.guia-ubuntu.com/?title=PostgreSQL

Parametrizar Contraseña de Postgres

Ejecutar desde la terminal

sudo su
su postgres
psql -d nombre_base_de_datos -c “ALTER ROLE nombre_usuario WITH PASSWORD ‘nuevo_password'”

How to take the backup of jasperreport server?

Using these export and import utilities you can take the backup of Jasper server.
It will be very helpful if you are uninstalling Jasper server and wants to install newer version of jasper server or if you are trying to duplicate the Jasper instance in another machine, So you do not need to create again all the reports from starting.

There are two batch file in Buildomatic directory of Jasper server.

1. export.bat (js-export.sh for Linux) which takes the backup of Jasper server.

2. import.bat (js-import.sh for Linux) which import all the backup files of Jasper server.

means using these two batch files you can import all the reports of jasper server to another instance of Jasper server.

How to run js-export.bat file:-

Go to the command prompt and find the path of Buildomatic directory in Jasper Server.
1: If you want to take the whole Jasper server repository backup

For windows machine : –

<js-install directory>buildomatic>js-export.bat –everything –output-zip backup.zip

For linux machine : –

<js-install directory>/buildomatic>sh js-export.sh –everything –output-zip backup.zip

2: If you want to take the backup of any specific directory

For windows machine : –

<js-install directory>buildomatic>js-export.bat –output-zip backup.zip –uris /Resource_id_of_directory

For linux machine : –

<js-install directory>buildomatic>sh js-export.sh –output-zip backup.zip –uris /Resource_id_of_directory

(How to find the Resource id of any directory:-
Right click on the any directory of the jasper server repository and select property and find the “Resource Id”)

3:  You can also take backup of any specific report

<js-install directory>buildomatic>js-export.bat –output-zip backup.zip –uris /Resource_id_of_report

Resource id of the report:- Resource id is always written in red color when you open any report

All the backup files will generate inside the buildomatic directory of Jasper server.

How to run js-import.bat file:-

Go to the command prompt and find the path of Buildomatic directory in Jasper Server.

For windows machine : –

<js-install directory>buildomatic>js-import.bat  –input-zip backup.zip

For linux machine : –

<js-install directory>buildomatic>sh js-import.sh  –input-zip backup.zip

It will create the whole Jasper server repository on your Jasper serve, but if the directories are already existing it will not update those directory, so delete the directory from jasper server and run the import command.

Fuente:

http://passionfordata.blogspot.com/2012/04/how-to-take-backup-of-jasperreport.html

Tablas Temporales Oracle

En Oracle no existe el concepto de Tablas temporales tal y como se utiliza en SQL Server.

Lo mas parecido que existe son tablas que puedes crearlas para que los datos se borren al cerrar la sesión o al hacer COMMIT pero la tabla preserva su existencia (no se borra).

ON COMMIT PRESERVE ROWS (Borrar datos al cerrar
sesión)

ON COMMIT DELETE ROWS (Borrar datos al hacer COMMIT)

Creacion Simple

CREATE GLOBAL TEMPORARY TABLE gtt_zip (
zip_code VARCHAR2(5),
by_user VARCHAR2(30),
entry_date DATE)
ON COMMIT PRESERVE ROWS;

CREATE GLOBAL TEMPORARY TABLE gtt_zip (
zip_code VARCHAR2(5),
by_user VARCHAR2(30),
entry_date DATE)
ON COMMIT DELETE ROWS;

Creacion de la tabla temporal a partir de una consulta

CREATE GLOBAL TEMPORARY TABLE TTTABLA_A
ON COMMIT PRESERVE ROWS
AS
SELECT * FROM TABLA_B;

Eliminar la tabla temporal

TRUNCATE TABLE TTTABLA_A;
DROP TABLE TTTABLA_A;