# Introducción a PL/SQL

      SQL es un lenguaje de consulta para los sistemas de bases de datos relaciónales, pero que no posee la potencia de los lenguajes de programación. Para abordar el presente tutorial con mínimo de garantias es necesario conocer previamente SQL. PL/SQL amplia SQL con los elementos caracteristicos de los lenguajes de programación, variables, sentencias de control de flujo, bucles ...

       Cuando se desea realizar una aplicación completa para el manejo de una base de datos relacional, resulta necesario utilizar alguna herramienta que soporte la capacidad de consulta del SQL y la versatilidad de los lenguajes de programación tradicionales. PL/SQL es el lenguaje de programación que proporciona Oracle para extender el SQL estándar con otro tipo de instrucciones.

       SQL es un lenguaje de consulta para los sistemas de bases de datos relaciónales, pero que no posee la potencia de los lenguajes de programación. No permite el uso de variables, estructuras de control de flujo, bucles ... y demás elementos caracteristicos de la programación. No es de extrañar, SQL es un lenguaje de consulta, no un lenguaje de programación.

       Sin embargo, SQL es la herramienta ideal para trabajar con bases de datos. Cuando se desea realizar una aplicación completa para el manejo de una base de datos relacional, resulta necesario utilizar alguna herramienta que soporte la capacidad de consulta del SQL y la versatilidad de los lenguajes de programación tradicionales. PL/SQL es el lenguaje de programación que proporciona Oracle para extender el SQL estándar con otro tipo de instrucciones y elementos propios de los lenguajes de programación .

SQL LOADER

Sql Loader es una utilidad que proporciona Oracle para cargar datos a una base de datos desde un fichero externo, normalmente un fichero de texto aunque tambien pueden ser ficheros binarios.

Al SQLLoader ( sqlldr) se le pasan como parametros (los más importanes) el fichero que contiene los datos que se van a cargar y la ruta del fichero de control que contiene las acciones a realizar. El formato de los datos, donde se cargaran y cualquier otro tipo de control.

SYNTAXIS

sqlldr userid=USUARIO/CONTRASEÑA@BASE control=/RUTA/DEL/FICHERO/DE/CONTROL data=/RUTA/DEL/FICHERO/QUE/CONTIENE/LOS/DATOS log=/LO/MISMO bad=/A/DONDE/VAN/LOS/DATOS/MALOS discard=/A/DONDE/VAN/LOS/DATOS/DESCARTADOS 

EJEMPLO

sqlldr userid=jj/contraseña@sistema control=/HOME/ctl/a.ctl data=/HOME/jj/tmp/a.txt

Como puedes ver no es muy complicado. Simplemente te conectas con un usuario de la base de datos y le dices cual es el fichero de texto que contiene la información y cual es el que contiene las especificacionse sobre lo que se va a hacer con esa información

Parámetros Comunes

  • userid=USUARIO/CONTRASEÑA@BASE Usuario, contraseña e instancia a la que te conectas.
  • control Ruta del archivo de control que contiene las directivas de lo que se va a hacer.
  • data Ruta del archivo que contiene los datos.
  • log Ruta del archivo donde quieres que se genere el log.
  • discard Ruta del archivo donde quieres que te envíe los registros descartados y no cargados.
  • bad Ruta del fichero donde van a parar los registros malos.

Archivo de Control

El archivo de control ( Control file en bárbaro ) es donde se especifica cómo se van a cargar los datos. Normalmente suele responder al siguiente esquema:

LOAD DATA
BADFILE '/a/donde/van/los/datos/malos'
DISCARDFILE '/a/donde/van/los/datos/descartados'
INFILE '/la/ruta/del/archivo/desde/el/que/se/cargan/los/datos'
APPEND 
INTO TABLE TU_TABLA_DE_DESTINO
FIELDS TERMINATED BY "|" OPTIONALLY ENCLOSED BY '"'
TRAILING NULLCOLS
(
CAMPO0 POSITION(1:15),
CAMPO1 CHAR "ltrim(rtrim(:CAMPO1))",  
CAMPO2 CHAR "ltrim(rtrim(:CAMPO2))",
CAMPO3NUMERICO INTEGER EXTERNAL,
CAMPO4FECHA DATE "DD-Month-YY"
)

Como ves, si los campos tienen una longitud fija puedes especificarle las posiciones, desde el caracter 1 a la 15 y sucesivamente. O si no, puedes dejar que oracle interprete los campos y los inserte. En este caso está introduciondo datos APPEND al final de la tabla. ( Podria ser REPLACE para que reemplazara datos preexistentes). Como puedes imaginar por defecto cada linea es una fila. Y en este ejemplo cada campo está delimitado por el carácter |. TRAILING NULLCOLS sirve para que interprete que los campos sin contenido sean interpretados como NULOS.

Tipos de datos

(comunes)

  • CHAR
  • VARCHAR
  • VARCHARC
  • DATE
  • EXTERNAL numerics (INTEGER, FLOAT, DECIMAL, and ZONED)

Para mas información : oracle

Sql Loader y problemas con fechas

Si estas cargando datos con fechas es posible que te cause problemas al intentar insertar columnas con fechas y campos nulos. Una manera de evitarlo es borrar los caracteres en blanco del campo de fecha. Siguiendo el patron:

campo_de_fecha "to_date (ltrim(rtrim(:campo_de_fecha)), 'yyyy-mm-dd hh24:mi')"

Te dejo un ejemplo:

LOAD DATA
APPEND
INTO TABLE art
FIELDS TERMINATED BY "|"
TRAILING NULLCOLS
(
ART_CODE   char "ltrim(rtrim(:ART_CODE))",
DESCRIPTION char "ltrim(rtrim(:DESCRIPTION))",
DATOUV "to_date (ltrim(rtrim(:DATOUV)), 'DD-Month-YY')",
DATPEREMPTION "to_date (ltrim(rtrim(:DATPEREMPTION)), 'DD-Month-YY')",
UNIT char "ltrim(rtrim(:UNIT))",
FRNS char "ltrim(rtrim(:FRNS))"
)

La competencia de Oracle Business Suite: Open Apps de Velneo V7

Hace unos días me propusieron hacer una revisión y opinar sobre Velneo V7, una plataforma completa con base de datos integrada de desarrollo de aplicaciones empresariales que además incorpora plantillas de código abierto y editable FLOSS para desarrollar aplicaciones del tipo ERP (Enterprise Resource Planning) o CRM (Customer Relationship Management). Por lo tanto Velneo es, de alguna manera, competencia de Oracle Business Suite, aunque ni por las dimensiones de una y otra empresa, ni por lo que ofrecen una aplicación y otra, esa competencia sea real.

Las aplicaciones de gestion desarrolladas con Velneo V7 pueden ejecutarse en múltiples plataformas (Windows, Linux, Mac o MeeGo), soportando arquitectura Cliente/Servidor  con escritorios monopuesto y multipuesto, SaaS, HTML Web, Web RIA y terminales móviles.

Velneo V7 es una plataforma completa  que no necesita componentes de terceros ni DLLs, con un multiservidor que distribuye aplicaciones, datos (base de datos), web, disco y ediciones. Todos los componentes (componentes de edición, de servicio y administración, y de ejecución) se conectan al servidor para poder realizar todas las fases del ciclo de desarrollo y despliegue.

Las aplicaciones se pueden desarrollar, administrar y ejecutar en local, en la nube y a través de dispositivos móviles, soportando todos los sistemas operativos simultáneamente.

Permite controlar el ciclo de desarrollo completo: diseño del proyecto, diseño de la base de datos, crear la lógica del negocio, construir y generar la interfaz de usuario, y crear el software de instalación.

Velneo V7 ha sido especialmente diseñada para desarrollar aplicaciones de gestión empresarial destacando por la ejecución nativa multiplataforma (sin máquinas virtuales), el código distribuido y reutilizable, y la integración total de bases de datos, lógica del negocio e interfaz de usuario.

La base de datos de Velneo V7 destaca por su rapidez y alto rendimiento en la ejecución de búsquedas y transacciones de bases de datos, su gran fiabilidad y la utilización de programación avanzada sin usar sentencias SQL.

Además, Velneo V7 dispone de un amplio catálogo de Open Apps con tutoriales y ejemplos para aprender a trabajar con la aplicación, con componentes que pueden reutilizarse en nuestro código, y con plantillas empresariales para poder desarrollar nuestras propias aplicaciones. Entre estas Open Apps destacaremos vConta (software para contabilidad), vGestion (gestión de compras, ventas y almacén), vCash (gestión de cuentas bancarias), vTodo Plus (software de planificación y productividad empresarial) y Business Center (software de gestion ERP).