Instalar Oracle Express Edition con soporte desde PHP5 en Ubuntu/Debian
Para instalar Oracle Express Edition en Ubuntu o Debian, de manera que luego podamos atacarla desde nuestra aplicación web desarrollada en PHP5 seguiremos los siguientes pasos.
A) INSTALACIÓN Y CONFIGURACIÓN DE ORACLE XE
1.- Instalación dependencias
#apt-get install bc libaio12.- Instalación del paquete , descargarlo desde aquí
#cd /usr/src
#dpkg -i oracle-xe-universal_10.2.0.1-1.0_i386.deb3.- configuración de parámetros
/etc/init.d/oracle-xe configureSpecify the HTTP port that will be used for Oracle Application Express [8080]: 8080
Specify a port that will be used for the database listener [1521]:1521
Ingresar el password para las cuentas de administración (SYS & SYSTEM) : 123456
Do you want Oracle Database 10g Express Edition to be started on boot (y/n) [y]: y4.- Configuración de variables de entorno
#vi /root/.bashrc
##Variables de servidor oracle xe
ORACLE_HOME=/usr/lib/oracle/xe/app/oracle/product/10.2.0/server
PATH=$PATH:$ORACLE_HOME/bin
export ORACLE_HOME
export ORACLE_SID=XE
export PATH5.- Pruebas de variables
#echo $ORACLE_HOME
#echo $ORACLE_SID6.- Verificar variables de inicio de oracle
#cat $ORACLE_HOME/network/admin/tnsnames.ora
#mkdir /etc/oracle
#cp $ORACLE_HOME/network/admin/tnsnames.ora /etc/oracle7.- verificar inicio correcto
# cd $ORACLE_HOME/bin
# tnsping XEsi sale :
Used TNSNAMES adapter to resolve the alias
Attempting to contact (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = dapper)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = XE)))
TNS-12545: Connect failed because target host or object does not existreiniciar servicio : /etc/init.d/oracle restart
Used TNSNAMES adapter to resolve the alias
Attempting to contact (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = mail)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = XE)))
OK (10 msec)entonces todo esta correcto.
8.- conexión al servidor vía sqlplus como sys
#sqlplus sys as sysdba
Enter password: 123456Connected to:
Oracle Database 10g Express Edition Release 10.2.0.1.0 – ProductionSQL>
9.- Desbloquear usuario HR , para poder conectarnos
SQL> alter user HR account unlock;
User altered.SQL> alter user HR identified by 654321;
User altered.SQL> exit;
10.- Conectarse por sqlplus como usuario HR
#sqlplus HR/654321@XE
SQL*Plus: Release 11.1.0.6.0 – Production on Sat Nov 1 09:12:54 2008
Copyright (c) 1982, 2007, Oracle. All rights reserved.
Connected to:
Oracle Database 10g Express Edition Release 10.2.0.1.0 – ProductionSQL>
11.- Estamos conectados ahora Probamos realizar una consulta a una tabla ya creada en la instalación.SQL> select * from JOBS;
JOB_ID JOB_TITLE MIN_SALARY MAX_SALARY
———- ———————————– ———- ———-
AD_PRES President 20000 40000
AD_VP Administration Vice President 15000 30000
AD_ASST Administration Assistant 3000 6000
FI_MGR Finance Manager 8200 16000
FI_ACCOUNT Accountant 4200 9000
AC_MGR Accounting Manager 8200 16000
AC_ACCOUNT Public Accountant 4200 9000
SA_MAN Sales Manager 10000 20000
SA_REP Sales Representative 6000 12000Hasta aquí tenemos correcto el servidor ahora configuramos apache php para hacer consultas
ANEXOS
1.-Verificar si el servicio esta activo , Aveces no se porque el servicio no se inicia durante el startup , para eso podemos verificar si el servicio esta activo.
# cd $ORACLE_HOME/bin
# tnsping XEUsed TNSNAMES adapter to resolve the alias
Attempting to contact (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = mail)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = XE)))
OK (10 msec)B-1) INSTALACIÓN DEL SOPORTE PARA ORACLE EN PHP5
1.- Instalar dependencias
#apt-get install apache2.2-common libapache2-mod-php5 php5 php5-cli rpm libaio12.-Bajar los paquetes :
- oracle-instantclient-basic-11.1.0.1-1.i386.rpm
- oracle-instantclient-devel-11.1.0.1-1.i386.rpm
- oracle-instantclient-sqlplus-11.1.0.1-1.i386.rpmde la siguiente direccion : http://www.oracle.com/technology/software/tech/oci/instantclient/htdocs/linuxsoft.html
3.-Instalar los paquetes
#rpm -ivh /root/oracle-instantclient-*
4.- Crear directorio para archivos de configuración
#mkdir /etc/oracle5.- Copiar/verificar el archivo tnsnames.ora del servidor local/remoto dónde nos vamos a conectar y copiarlo a /etc/oracle/
###########################################
# tnsnames.ora Network Configuration File:XE =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = mail)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = XE)
)
)EXTPROC_CONNECTION_DATA =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC_FOR_XE))
)
(CONNECT_DATA =
(SID = PLSExtProc)
(PRESENTATION = RO)
)
)################################################################
Donde ¨mail¨ es el nombre del servidor.
6.- Agregar variables de entorno
#vim /root/.bashrc#Variables de cliente oracle xe
export TNS_ADMIN=/etc/oracle
export SQLPATH=/usr/lib/oracle/11.1.0.1/client/bin
export LD_LIBRARY_PATH=/usr/lib/oracle/11.1.0.1/client/lib/;$LD_LIBRARY_PATH
export PATH=$PATH:$SQLPATH7.- Reiniciar la sesión de root para que los cambios en las variables de entorno tengan efecto.
8.- Comprobar conectividad con servidor local/remoto
#sqlplus usuario@servidor
Dónde usuario es el nombre de usuario o esquema y servidor es uno de los definidos en el tnsnames.ora
Pedirá la contraseña y si todo va bien nos devolverá el prompt del servidor Oracle.B-2) Generar e Instalar módulo OCI en PHP
1.- Instalar dependencias
#apt-get install build-essential php5-dev2.- Si no está creado, creamos el directorio de fuentes
#mkdir -p /usr/local/src3.- Descargamos las fuentes PECL del futuro módulo OCI:
#wget http://pecl.php.net/get/oci8-1.2.4.tgz4.- Descomprimimos
#tar xzf oci8-1.2.4.tgz5.- Entramos al directorio creado
#cd /usr/local/src/oci8-1.2.46.- Preparamos el módulo para que sea generado para PHP
#phpize7.- Configuramos el módulo para la generación
#./configure –with-oci8=instantclient,/usr/lib/oracle/11.1.0.1/client/lib/La ruta es dónde se encuentran los *.so que hemos instalado con el InstantClient
8.- Construcción e instalación
#make
#make install9.- Editamos la configuración de PHP.
#vim /etc/php5/apache2/php.ini
Añadimos la línea:
extension=oci8.soy repetimos lo mismo para el archivo /etc/php5/cli/php.ini
10.- Reiniciamos Apache
#/etc/init.d/apache2 restart11.- crear phpinfo.php para verificar el modulo oci8
#vi /var/www/apache2-default/phpinfo.php<?php
// Muestra toda la información, por omisión INFO_ALL
phpinfo();// Mostrar sólo la información de módulos.
// phpinfo(8) produce el mismo resultado.
phpinfo(INFO_MODULES);?>
12.- Generar consulta basica
#vi /var/www/apache2-default/consulta.php
<?php
$connection = ocilogon(“HR”,”654321″,”//192.168.1.180/XE”);
$query = “select * from JOBS”;
$statement = oci_parse ($connection, $query);
oci_execute ($statement);
$statement = oci_parse ($connection, $query);
oci_execute ($statement);
echo “JOD_ID|JOB_TITLE|MIN_SALARY|MAX_SALARY”;
while ($row = oci_fetch_array ($statement, OCI_BOTH)) {
echo “$row[0]|$row[1]|$row[2]|$row[3]“;
}
oci_close($connection);?>
- Donde ¨192.168.1.180¨ seria la ip del servidor o maquina de la implementacion
- Verficiamos la consulta entrando a : http://ipdelamaquina/apache2-default/consulta.php , si nos genera la consulta entonces ya tenemos todo completo y podemos empezar a desarrollar nuestras aplicaciones
Oracle 10g Express Edition
Muchas veces como desarrolladores cuando abordamos un proyecto importante tenemos que trabajar con bases de datos Oracle. En entornos profesionales con gran carga de trabajo acostumbra a ser la elección indiscutible.
Esto plantea varios problemas al desarrollador. El primero es la complejidad en la administración y mantenimiento de esta base de datos. El segundo es el elevado coste de sus licencias. Por suerte Oracle dispone de una versión Express de su base de datos, mucho más limitada en cuanto a funcionalidad pero descargable y explotable de manera gratuita.
Las ventajas que nos aporta como desarrolladores son por un lado unas páginas de administración mas sencilla y por otro que al ser gratuita no tenemos que afrontar el coste de la licencia de Oracle. También al ser mas limitada es mas ligera lo que nos permite tenerla instalada en entornos de desarrollo y máquinas poco potentes. Esta base de datos también es apropiada para entornos de producción en proyectos pequeños y medianos.
Puedes ver todas las características técnicas de Oracle Express Editión, así como descargarla para Windows y Linux aquí.
Listado de funciones de Oracle
Funciones de valores simples:
ABS(n). Devuelve el valor absoluto de (n).
CEIL(n). Obtiene el valor entero inmediatamente superior o igual a "n".
FLOOT(n) . Devuelve el valor entero inmediatamente inferior o igual a "n".
MOD (m, n). Devuelve el resto resultante de dividir "m" entre "n".
NVL (valor, expresión). Sustituye un valor nulo por otro valor.
POWER (m, exponente). Calcula la potencia de un numero.
ROUND (numero [, m]). Redondea números con el numero de dígitos de precisión indicados.
SIGN (valor). Indica el signo del "valor".
SQRT(n). Devuelve la raíz cuadrada de "n".
TRUNC (numero, [m]). Trunca números para que tengan una cierta cantidad de dígitos de precisión.
VAIRANCE (valor). Devuelve la varianza de un conjunto de valores.
Funciones de grupos de valores:
AVG(n). Calcula el valor medio de "n" ignorando los valores nulos.
COUNT (* | Expresión). Cuenta el numero de veces que la expresión evalúa algún dato con valor no nulo. La opción "*" cuenta todas las filas seleccionadas.
MAX (expresión). Calcula el máximo.
MIN (expresión). Calcula el mínimo.
SUM (expresión). Obtiene la suma de los valores de la expresión.
GREATEST (valor1, valor2…). Obtiene el mayor valor de la lista.
LEAST (valor1, valor2…). Obtiene el menor valor de la lista.
Funciones que devuelven valores de caracteres:
CHR(n). Devuelve el carácter cuyo valor en binario es equivalente a "n".
CONCAT (cad1, cad2). Devuelve "cad1" concatenada con "cad2".
LOWER (cad). Devuelve la cadena "cad" en minúsculas.
UPPER (cad). Devuelve la cadena "cad" en mayúsculas.
INITCAP (cad). Convierte la cadena "cad" a tipo titulo.
LPAD (cad1, n[,cad2]). Añade caracteres a la izquierda de la cadena hasta que tiene una cierta longitud.
RPAD (cad1, n[,cad2]). Añade caracteres a la derecha de la cadena hasta que tiene una cierta longitud.
LTRIM (cad [,set]). Suprime un conjunto de caracteres a la izquierda de la cadena.
RTRIM (cad [,set]). Suprime un conjunto de caracteres a la derecha de la cadena.
REPLACE (cad, cadena_busqueda [, cadena_sustitucion]). Sustituye un carácter o caracteres de una cadena con 0 o mas caracteres.
SUBSTR (cad, m [,n]). Obtiene parte de una cadena.
TRANSLATE (cad1, cad2, cad3). Convierte caracteres de una cadena en caracteres diferentes, según un plan de sustitución marcado por el usuario.
Funciones que devuelven valores numéricos:
ASCII(cad). Devuelve el valor ASCII de la primera letra de la cadena "cad".
INSTR (cad1, cad2 [, comienzo [,m]]). Permite una búsqueda de un conjunto de caracteres en una cadena pero no suprime ningún carácter después.
LENGTH (cad). Devuelve el numero de caracteres de cad.
Funciones para el manejo de fechas:
SYSDATE. Devuelve la fecha del sistema.
ADD_MONTHS (fecha, n). Devuelve la fecha "fecha" incrementada en "n" meses.
LASTDAY (fecha). Devuelve la fecha del último día del mes que contiene "fecha".
MONTHS_BETWEEN (fecha1, fecha2). Devuelve la diferencia en meses entre las fechas "fecha1" y "fecha2".
NEXT_DAY (fecha, cad). Devuelve la fecha del primer día de la semana indicado por "cad" después de la fecha indicada por "fecha".
Funciones de conversión:
TO_CHAR. Transforma un tipo DATE ó NUMBER en una cadena de caracteres.
TO_DATE. Transforma un tipo NUMBER ó CHAR en DATE.
TO_NUMBER. Transforma una cadena de caracteres en NUMBER.
Llamando a funciones o procedimientos PL/SQL almacenados en Oracle desde Java
Hoy me surgía la duda de como llamar a procedimientos o funciones PL/SQL desde Java. Explico el proceso a seguir.
Para llamar a procedimientos o funciones almacenadas en Oracle vamos a usar un objeto referenciado mediante la interfaz CallableStatement.
Creamos la conexión como es habitual.
try {
Class.forName("oracle.jdbc.OracleDriver");
} catch (ClassNotFoundException e) {
out.print("\nExcepción: " + e.getMessage() + "<p />");
}try {
Connection conexion = DriverManager.getConnection("jdbc:oracle:thin:@" + "host:puerto:basededatos","usuario","clave");(...)
Usando el método prepareCall de la clase Connection creamos un objeto que referenciamos usando la interfaz CallableStatement.
CallableStatement sentencia = conexion.prepareCall("{ ? = call FUNCION(?,?)}");
ó
CallableStatement sentencia = conexion.prepareCall("{ call PROCEDIMIENTO(?,?)}");
Registramos los parámetros en el CallableStatemet. Usaremos el método set para los parámetros de entrada y el método registerOutParameter para los parámetros de salida, que luego recuperaremos con el método get<tipo> correspondiente. Por ejemplo para el caso de la función.
sentencia.registerOutParameter(1, OracleTypes.VARCHAR);
sentencia.setInt(2, 1);
sentencia.setInt(3, 1);
Ejecutamos la sentencia.
sentencia.execute();
} catch (SQLException e) {
out.print("\nExcepción: " + e.getMessage() + "<p />");
}
Si tienes alguna duda, sugerencia, etc, deja un comentario.