martes, 23 de mayo de 2017

ORACLE: Paquetes, Funciones y Procedimientos

No voy a dar una catedra de conceptos de cada una, pero voy a tratar de explicarlo de forma muy simple.

Paquete: Conjunto de Funciones y/o Procedimientos almacenados de PL/SQL (select, insert, update, delete, etc)
Función: conjunto de instrucciones (Código PL/SQL) que puede estar dentro de un paquete para realizar cierta tarea, este código siempre debe devolver un valor (ya sea resultado de una oepración o no).
Procedimiento: conjunto de instrucciones (Código PL/SQL), que puede estar dentro de un paquere para realizar cierta tarea especifica, este sepuede utilizar para realizar tareas que no requieren enviar un resultado de su ejecución.

Ambos permiten parametros IN/OUT sin embargo las funciones son las idoneas para retornar grandes resultados, como resultados de una buqueda, en cambio los procedimientos son mas ad hoc para los tradicionales metodos CRUD (Create, Read, Update and Delete).

Ejemplo de Funcion:
Definición en un paquete:  
    FUNCTION get_persona(p_nombre       poblacion.persona.nombre%TYPE DEFAULT '%')
    RETURN ref_cursor;
Definición del Body:
FUNCTION get_persona(p_nombre poblacion.persona.nombre%TYPE DEFAULT '%')
   RETURN REF_CURSOR
   AS
           V_CURSOR        REF_CURSOR;
   BEGIN
           OPEN V_CURSOR FOR
           SELECT ID, NOMBRE, APELLIDOS, EDAD FROM POBLACION.PERSONAS
           WHERE APELLIDOS LIKE P_FREIGHTER_ID
           ORDER BY NOMBRE, APELLIDOS;


           RETURN V_CURSOR;
   END get_persona;
Ejemplo de procedimiento:

PROCEDURE UPD_EDAD_PERSONA(P_ID  IN POBLACION.PERSONA.ID%TYPE, P_EDAD    IN OUT POBLACION.PERSONA.EDAD%TYPE);
PROCEDURE UPD_EDAD_PERSONA(P_ID  IN POBLACION.PERSONA.ID%TYPE, P_EDAD    IN OUT POBLACION.PERSONA.EDAD%TYPE)
   IS
   BEGIN
           SELECT POBLACION.PERSONA.EDAD +1 INTO P_EDAD FROM
POBLACION.PERSONA WHERE ID = P_ID;

           UPDATE POBLACION.PERSONA SET EDAD = P_EDAD WHERE ID = P_ID;


   END
UPD_EDAD_PERSONA;
Realmente creo no hay mucho que explicar de los ejemplos, en el ejemplo d ela función es una busqueda por nombre y en el de procedimientos es la actualización de la edad, dicho procedimiento se puede ejecutar de muchas formas sin necesidad de que retorne un valor.

Recuerden la definición del curso es en la creación del paquete:

create or replace PACKAGE    personas_rpt_pkg
AS
    /** Java Compliant ready */
    TYPE ref_cursor IS REF CURSOR;


Espero les sirva este pequeño ejemplo.

lunes, 21 de abril de 2014

Webservice para validación de CFDI

Método: Consulta
Parámetros: expresionImpresa, Cadena que contiene los parámetros de consulta: re = rfc Emisor, rr = RFC Receptor y id= UUDI, la cadena puede variar dependiendo del lenguaje, en el caso de C# la cadena a enviar es:

"?re=RFC0101321AB&rr=RFC0202321XY&tt=99999.99&id=FJKF0950-F3JF-41DF-A362-5C971EA9E997"


No sé si aplica igual para todos los lenguajes de programación, quiero suponer que sí.

Código:
ConsultaCFDIServiceClient _ConsultaCFDI = new ConsultaCFDIServiceClient();
            Acuse temp = _ConsultaCFDI.Consulta("?re=RFC0101321AB&rr=RFC0202321XY&tt=99999.99&id=FJKF0950-F3JF-41DF-A362-5C971EA9E997");
           
            MessageBox.Show("Estado:" + temp.Estado);

Este es un ejemplo muy sencillo, espero le sirva a algunos.

Saludos

lunes, 26 de noviembre de 2012

Oracle: Numero del dia del Año

Muchas ocasiones necesitamos saber en numero de dia estamos o que numero de día es una fecha determinada, con ORACLE es muy sencillo:

Si ejecutamos la siguiente sentencia:
select to_char(sysdate, 'DDD') from dual;
Resultado:

De una fecha especifica:
 select to_char(to_date('05/01/2017','dd/mm/yyyy'), 'DDD') from dual;
Resultado:

Eso estodo por hoy!!!!