martes, 17 de marzo de 2015

Funciones con Fechas

Cuando trabajamos con fechas, se debe tener en cuenta que la aritmética de fechas en Oracle trabaja en función de un día. Aunque podemos trabajar con cualquier fecha,  Oracle dispone de varias funciones que operan con tipos de datos "date".  

SYSDATE() es la función de fecha más utilizada Oracle. La función devuelve la fecha y la hora en el formato de fecha de Oracle por defecto.

Para adicionar y sustraer días a una fecha, simplemente usamos los signos + o - respectivamente. Algunos ejemplos: 

SELECT sysdate + 7 FROM dual;
SELECT sysdate - 30 FROM dual;
SELECT to_char(sysdate - 14, 'MM/DD/YYYY HH:MI AM') FROM dual;

En el primer ejemplo, vemos que la consulta retorna la fecha siete días a partir de hoy. La segunda retorna la fecha de hace 30 días. En la tercera, se ha usado la función de conversión to_char, para ver las horas y minutos. Esto nos muestra que mientras la fecha, ha cambiado, el tiempo no cambia.

ADD_MONTHS(f,n): agrega a una fecha, un número de meses. Si el segundo argumento es positivo, se le suma a la fecha enviada tal cantidad de meses; si es negativo, se le resta a la fecha enviada tal cantidad de meses.

select add_months('10/06/2015',5) from dual; --retorna "10/11/2015"
select add_months('10/06/2015',-5) from dual; --retorna "10/01/2015"


LAST_DAY(f): retorna el ultimo día del mes de la fecha enviada como argumento.

select last_day('10/02/2015') from dual;-- "28/02/2015"
select last_day('10/08/2015') from dual;-- "31/08/2015"

MONTHS_BETWEEN(X,Y): retorna el numero de meses entre las fechas enviadas como argumento. 

select months_between('21/05/2015','21/06/2015') from dual;-- retorna 1

NEXT_DAY(fecha,dia): retorna una fecha correspondiente al primer día especificado en "dia" luego de la fecha especificada. 

select next_day('10/08/2015','LUNES') from dual;

miércoles, 11 de marzo de 2015

Ruteos de Mantenimiento

Un Ruteo de Mantenimiento es el conjunto de operaciones o trabajos necesarios para llevar a cabo una actividad. Cuando se crea un Pedido de trabajo para una actividad, El  Ruteo de mantenimiento debe contener todas las operaciones especificadas de mantenimiento las cuales se copian en el Pedido de trabajo como sus operaciones.

Rutas de mantenimiento no son Ruteos de Activos. Las Operaciones de Actividades difieren de las operaciones de fabricación porque estas operaciones  deben realizarse de forma secuencial, mientras que las operaciones de Mantenimiento no necesitan ser realizadas de forma secuencial. En el Modulo de EAM , las operaciones no pueden ser secuenciales. Puede especificar que una sola operación dependa de otro. Además, es posible que dos operaciones no relacionadas pueden ocurrir al mismo tiempo. Una operación puede ser dependiente de múltiples operaciones. Operaciones múltiples pueden ser dependientes de una sola operación. La dependencia no puede ser totalmente relacionada.

Definir un Ruteo de Mantenimiento
Navegar a una responsabilidad de EAM >> Actividades >> Ruteos de Mantenimiento. En la pantalla de Ruteo seleccionar la actividad para la que desea crear una ruta de Operaciones. En la región de Operaciones  tendrá la pestaña principal donde ingresar una secuencia de operación, o dejar que el sistema genere uno automáticamente. Para copiar o hacen referencia a operaciones estándar en una ruta, debe usar la lista de códigos de operación del juego de  valores. Se puede definir una nueva operación estándar seleccionando Operaciones estándar en el menú Herramientas.


Si utiliza un código de operación estándar, la información de operación para el código se copiará en la operación actual. A continuación, puede actualizar esta información si lo desea.


Seleccionar un Departamento de la lista de valores, donde se realizará la operación. Luego seleccione la casilla Referido para indicar que cualquier cambio en las operaciones estándar se reflejarán en el enrutamiento. Si se selecciona la operación estándar, esta casilla está seleccionada por defecto. Seleccionar la pestaña Descripción para poder ingresar una descripción por cada operación. Finalmente grabar



Si lo desea, dar clic al botón Red Ruteo  para ver las dependencias de cada operación para la ruta activo corriente. Si lo desea, seleccione una operación y luego seleccionar Recursos de Operación para ver los recursos asociados con el departamento que actualmente se atribuye a esta operación. Opcionalmente, puede modificar la lista de recursos.

domingo, 8 de marzo de 2015

Excepciones del paquete UTL_FILE

Hay situaciones en las que el paquete UTL_FILE deja de funcionar debido problemas en los datos o problemas en la lectura de los archivos. Aparte de errores como NO_DATA_FOUND y VALUE_ERROR, UTL_FILE mantiene una  lista de excepciones predefinidas que se enumeran a continuación.

INVALID_PATH
Lanzado si la ubicación del archivo no es válido

INVALID_MODE
Lanzado cuando un parámetro es no válido en  FOPEN 

INVALID_FILEHANDLE 
Lanzado cuando identificador de archivo no es válido

INVALID_OPERATION
Lanzado cuando se intenta una operación no válida en un archivo

READ_ERROR 
Lanzado cuando el sistema operativo falla en la operación completa de lectura

WRITE_ERROR 
Lanzado cuando el sistema operativo falla en la operación completa de escritura

INTERNAL_ERROR 
Lanzado debido a un error no especificado

CHARSETMISMATCH 
Lanzado debido a la falta de coincidencia en los juegos de caracteres de FOPEN y PUTF

GET_LINE FILE_OPEN 
Lanzado cuando el archivo ya está abierto

INVALID_MAXLINESIZE
Lanzado cuando MAX_LINESIZE cruza su rango es decir 1..32767

INVALID_FILENAME 
Lanzado si el nombre de archivo no es válido y se intenta  abrir

ACCESS_DENIED
Lanzado si el directorio no es accesible para el usuario

INVALID_OFFSET 
Lanzado  bajo la siguiente condiciones  ABSOLUTE_OFFSET = NULL y RELATIVE_OFFSET = NULL, o ABSOLUTE_OFFSET <0, o de cualquier condición que provoca falla  en el archivo

DELETE_FAILED
Lanzado  cuando falla la operación de eliminación en el archivo

RENAME_FAILED
Lanzado  cuando falla la operación de cambio de nombre en el archivo

Por ejemplo podemos hacer un bloque de excepciones que puede contener  todos los controladores de excepciones de UTL_FILE. Puede utilizar RAISE_APPLICATION_ERROR para personalizar el mensaje de error a mostrar.

EXCEPTION
WHEN utl_file.invalid_path THEN
raise_application_error(-20001,'Directorio o nombre de archivo invalido');
WHEN utl_file.invalid_mode THEN
raise_application_error(-20002,'Parametro invalido al abrir archivo');
WHEN utl_file.invalid_filehandle THEN
raise_application_error(-20002,'Identificador de archivo invalido');
WHEN utl_file.invalid_operation THEN
raise_application_error(-20003,'Operación invalida');
WHEN utl_file.read_error THEN
raise_application_error(-20004,'Error de lectura');
WHEN utl_file.write_error THEN
raise_application_error(-20004,'Error de escritura');
WHEN utl_file.internal_error THEN
raise_application_error(-20006,'Error interno no especificado');

END;