Quien soy? RSS feed Enviar por email Imprimir Parar este menu Ir arriba
Blogzote.com
Mexico, informatica, internet, musica y algo mas…
Pagina 4 de 6« Primera...3456

Tablas externas en Oracle

Un requerimiento en mi pasado proyecto, consistía en que el usuario pudiera cargar en el momento que desee un archivo proveniente de Excel (que serían los usuarios sin Excel), se procesara la información con datos complementarios y le fuera devuelta en otro archivo que pudiera manejar también en Excel.

Para la carga inicial del archivo contaba con varias opciones, al sistema estar desarrollado en Oracle Developer 6i, igual se puede generar un nuevo modulo y mediante TEXT_IO manejar la información del archivo, al ser una carga de información se podría usar SQL*Loader, también podría haberse usado UTL_FILE para leer y cargar el archivo a la base o la que finalmente el cliente acabo aceptando por su facilidad de uso y mantenimiento, las tablas externas.

En la practica una tabla externa no es mas que un archivo plano con cierto layout predefinido en el cual los campos están separados por algún carácter como una coma, comillas, o tabuladores, muy parecido al que se usaría para hacer una carga desde SQL*Loader, Que es declarado en Oracle y que puede ser manejado directamente como cualquier otro objeto de la base de datos, pero a fin de cuentas es un archivo en el sistema operativo, con algunas limitantes, como no poder realizar inserts, deletes, updates sobre el objeto, no se pueden generar indices y su tamaño máximo es de 2GB, veamos ahora como crearlo:

  • Previamente se crea un directorio donde vivirá el mencionado archivo plano, (la ruta depende de nuestro servidor):
    1
    
    CREATE OR REPLACE DIRECTORY EXTERNAL_TABLES AS '/usr/files/external/';
  • Le damos privilegios a determinado usuario para leer y escribir en este directorio:
    1
    
    GRANT READ, WRITE ON DIRECTORY EXTERNAL_TABLES TO USUARIO;
  • En el directorio físico del servidor copiamos el archivo que contendrá los datos llamado “tabla_externa.txt”, para este ejemplo usaremos datos como los que siguen (¿creo que es evidente que son de prueba verdad?):
    1
    2
    3
    4
    5
    
    1,00001,551122334455,11111111111
    2,00002,551122334466,22222222222
    3,00003,551122334477,33333333333
    4,00004,551122334488,44444444444
    5,00005,551122334499,55555555555
  • Ahora creamos la tabla externa:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    
    CREATE TABLE tabla_externa (
      CLI_ID         VARCHAR2(50),
      CONTRATO       VARCHAR2(50),
      TELEFONO       VARCHAR2(50),
      NO_SERIE       VARCHAR2(50)
    )
    ORGANIZATION EXTERNAL (
      TYPE oracle_loader 
      DEFAULT directory EXTERNAL_TABLES
      access parameters
    ( records delimited BY newline
      skip 1
      badfile 'tabla_externa.bad'
      logfile 'tabla_externa.log'
      fields terminated BY ','
      missing field VALUES are NULL
    )
    location ('tabla_externa.txt')
    )
    reject limit unlimited;

Listo, a partir de este momento tenemos acceso a los datos dentro de cualquier consulta normal, solo unas observaciones adicionales:

Si el archivo que deseas mostrar contiene muchos, muchos datos, igual y te conviene mejor usar SQL*Loader para previamente cargar tus datos a Oracle ya que los tiempos para consultas a estas tablas con bastante mas grandes que los tiempos de una tabla normal, esto debido a que no se pueden crear indices sobre la tabla externa o, en su defecto, usar una segunda tabla, que sea llenada con la información de la externa con un simple “insert as select” la cual tenga sus debidos indices.

Para no perder la facilidad en el acceso a la información ganado con la tabla externa por algún error “de dedo”, esta fue creada especificando varchar2(50) para sus campos, aunque en realidad se espera en esas columnas valores numéricos y de mucha menos extensión, por ejemplo para el cli_id se espera un numérico de 10 caracteres, pero declararlo así no me regresaría por ejemplo un valor que tuviera un carácter, preferí dejarlo como varchar2 y manejar esto mediante la consulta que extrae los datos, en este caso, limpiando la cadena de caracteres no numéricos, esto claro depende de la calidad esperada de la información, si se espera una información de calidad igual y conviene declarar los tipos de acuerdo a su valor esperado, en mi caso esto no fue así.

* 22 Comentarios Email Imprimir

is_numeric en Oracle

Esta esta muy facilita, resulta que necesitaba saber si una cadena, proveniente de un archivo contenía solo datos numéricos o alfanuméricos, en Oracle no existe una función para saberlo ( al menos no la conozco ), buscandole un poquito en la red no tarde mucho en encontrar la solución, la dejo aquí:

1
2
3
4
5
6
7
8
9
CREATE OR REPLACE FUNCTION is_numeric (p_num IN VARCHAR2)
  RETURN BOOLEAN IS
  x NUMBER;
BEGIN
  x := TO_NUMBER (p_num);
  RETURN TRUE;
EXCEPTION WHEN OTHERS THEN 
  RETURN FALSE;
END;
* 3 Comentarios Email Imprimir

Forms, Reports, Designer        Statement of Direction

Llevo trabajando con Oracle alrededor de 6 años, especialmente con Oracle Designer, Oracle Reports y Oracle Forms, en estos años aunque he aprendido otras herramientas de Oracle como Oracle Aplication Server, Jdeveloper, Oracle Discoverer, Oracle Enterprise Manager, etc. Aunque en realidad mi fuerte es Developer Suite, el especializarme hasta el día de hoy me ha funcionado muy bien.

Hace algún tiempo ya había leído sobre que va a pasar con estas herramientas en algunos años, lo que Oracle llama “Oracle developer suite Statement of Direction“, que no es mas que el análisis del mismo Oracle sobre el futuro de estas herramientas. En estos últimos días retome la lectura del documento ya que una pregunta en una entrevista fue relacionada sobre mi propio futuro con Oracle Developer, la respuesta ya la vislumbraba desde hace tiempo, me interesa dar el siguiente paso formalmente, Líder de proyecto por un lado, por otro lado también me interesa la administración de la base de datos o lo que llamamos DBA, apenas reconocí otra área de interés que es el Oracle Application Server.

En los tiempos que leí sobre el tema, no recuerdo que Oracle considerara la versión 11g de Developer Suite, por lo que el tiempo de soporte para estas herramientas se acortaba para finales de esta década, ahora considerando que se desarrolle una versión 11g el tiempo de soporte se alarga un poco, mas o menos a principios de la década que viene, pero ya no se habla de versiones siguientes, aquí el “tools product plan” de Developer Suite:

developer suite tool product plan

Que significa todo esto? Pues para los que no trabajan con Oracle Developer ni piensan trabajar con el en los próximos años nada, para los que si, que haciendo cuentas, mas o menos a principios del 2010 se acaba el soporte normal para la ultima versión de Oracle Developer, esto es, ya no habrá nuevas versiones ( creo que el “extended support” incluye también la parte de parches aunque este acaba en el 2013, de ahí ya ni parches abra ), considerando que ya casi estamos en el 2007, entonces hablamos de 3 años para que Oracle formalmente termine los nuevos desarrollos para estas herramientas, después solo es labor de soporte, no significa que las empresas hasta el 2010 estén pensando en desarrollar sus últimos proyectos con Oracle Developer, una empresa con directores cuerdos sabrán que ya a estas alturas un desarrollo con Oracle Developer no resulta factible ( aunque muchas empresas no tienen directores cuerdos )

Así que señoras y señores desarrolladores, a pensar en diversificar su aprendizaje por otros lares, especialmente a los especializados como yo o atenerse a las consecuencias del desempleo por falta de oferta con estas herramientas, empresas, pues creo que no hay mas para Oracle, Java es lo siguiente, el mismo Oracle lo dice muy claramente al final de documento:

Recommendations for Oracle’s Customers

Oracle recommends that Forms, Reports and Designer customers follow a similar path that it took with its own E-Business Suite of applications: (i) Move to the Internet, (ii) Upgrade to the latest versions of Oracle Forms, Oracle Reports, and Oracle Designer; and (iii) Interoperate and coexist these applications with new J2EE applications using Oracle’s Application Server.

For customers who are facing new requirements such as a move to a self service model or a market pressure to provide an HTML user interface, the Java2 Enterprise Edition (J2EE) specification has opened up a whole new set of options for application development not previously available to the developer. As such, we fully expect customers to be exploiting these opportunities and to take advantage of J2EE to build extensions to their applications. Thus, our strategy is also to provide a modeling and J2EE development environment familiar to Forms, Reports and Designer developers.

Oracle JDeveloper 10g provides a visual and declarative development experience as well as an end-to-end application development framework (Oracle ADF) designed to simplify J2EE development and bring the productivity and ease of use of Oracle forms to the J2EE platform. The Oracle E-Business Suite has successfully standardized the development of all the J2EE applications on this development environment.

Oracle JDeveloper 10g with ADF is the tool of choice for Forms, Reports and Designer customers because it carries over a similar development model. However, given the architecture difference between J2EE and Forms or Reports, Oracle has no plans to offer a complete migration solution that would attempt to migrate applications built with these tools to J2EE. Instead, Oracle’s strategy is to provide a J2EE development environment exposing similar concepts as Forms and Reports, giving to Forms and Reports developers the opportunity to become productive in a new, but familiar environment.

* 10 Comentarios Email Imprimir

Oracle Discoverer o Java       o Reports o cual?

Hace algunos días tuvimos una presentación con un cliente, se esta tratando de cambiar sus actuales sistemas hechos en plataformas muy viejas a nuevas como las que ofrece Oracle, todavía no se definen herramientas especificas pero es un hecho que van con Oracle.

El punto de partida fue: ¿como sustituir la aplicación que utilizamos para explotar la información contable? ( aplicación que extrae sus movimientos contables de una base de datos para después de un largo procesamiento, entregar en forma de archivos planos reportes internos de contabilidad) esto claro, sin perder de vista que la herramienta debe de cumplir con este y con todos los demás requerimientos de la empresa.

La herramienta que propusimos fue Oracle Discoverer, ya que nos pareció la mejor herramienta para este y muchos otros problemas de manejo de información de la empresa. Al final de la presentación empezamos con las clásicas preguntas, que precios, que integración, que aprendizaje, que reducción de tiempos, etc. Todo normal hasta que un usuario plantea las preguntas:

¿Discoverer me sirve para imprimir mis cheques o mis formas pre-impresas?
¿Tenemos un proceso muy largo de impresión (proceso batch), nos sirve?

Por un momento lo pensamos, una sencilla pregunta pero no se me había ocurrido pensarla antes, al final la respuesta fue ¡definitivamente no! (mi teoría me decía que, aunque no lo había experimentado, muy probablemente podemos llegar a solucionarlo con la herramienta, aunque no muy fácilmente, aparte la herramienta no esta hecha para eso, por lo tanto se quedo en un “NO” rotundo)

El usuario de repente se quedo como diciendo, “no que muy buena su herramienta y no puede hacerlo”, “ya que me estaban convenciendo”, etc.

La respuesta fue clara: lo que te estamos ofreciendo es una herramienta para explotación de tu información, la puedes mover, verla de un lado, del otro, filtrarla, acomodarla por x o por y, sumas, totales, condiciones, etc. Y esto a su vez llevarlo a un ambiente web sin tanto problema, y mejor aun, integrarlo completamente en un portal gracias a Oracle Portal, en fin, solo enumeramos las principales características de una aplicación con el enfoque hacia la “inteligencia de negocio“, para hacer lo que necesitas esta Java con Jdeveloper de preferencia ( según se también se puede ) u Oracle Reports ( que es el que conozco ) simplemente estamos hablando de herramientas complementarias no excluyentes.

* 4 Comentarios Email Imprimir

Fireworks para prototipos

En mi actual proyecto en el FCE estoy trabajando en la realización de algunos módulos “custom” para las Oracle Applications

Antes de realizar un modulo con Oracle Forms me pidieron generar dos documentos:

  • Documento de Análisis
  • Documento de Diseño

Dentro del documento de diseño del modulo me pidieron un prototipo para el modulo, para los que no saben del tema, esto no es mas que una vista previa de la presentación del modulo para que el usuario se de una idea (lo mas cercana posible) de lo que será y podrá hacer en el modulo.

Preguntando sobre la manera de realizar este prototipo, resulta que, considerando las herramientas que tiene al alcance el equipo, se viene realizando con ayuda de Microsoft Visio que es una muy buena herramienta para todo lo relacionado con la diagramación, logrando prototipos como el siguiente:

Prototipo visio

Aunque es una muy buena herramienta, considero que le hace falta muchas cosas específicas para un proyecto con Oracle Forms, por lo que preferí tomar un camino alterno para conseguir mi prototipo.

Este camino, aunque no muy ortodoxo, me llevo a Macromedia Fireworks con el cual ya llevo trabajando alrededor de 2 años, especialmente en mis desarrollos para la Web.

Los resultados son, por mucho, mejores a los logrados con Visio, aunque eso si hay que dejar en claro, esta herramienta no esta hecha para este tipo de tareas pero por el momento satisface mis requerimientos totalmente:

prototipo fireworks

Sin comentarios Email Imprimir

Pagina 4 de 6« Primera...3456