text: ﻿--Función que devuelve al jefe de personal las especificaciones de un permiso.
  -- IN: P_ID_PERMISO
  -- OUT: P_NOMBRE_COMPLETO, P_TIPO_AUSENCIA, P_FECHA_SOLICITUD, P_FECHA_INICIO, P_FECHA_FIN, DESCRIPCION, 
  --	P_NOMBRE_JEFE, P_F_CAMBIO_ESTADO_JEFE
  CREATE OR REPLACE FUNCTION "PERMISOS".F_DEVOLVER_ESPECIF_PERMISO_JPERSONAL(IN P_ID_PERMISO INTEGER, 
  									   OUT P_NOMBRE_COMPLETO TEXT,
  									   OUT P_TIPO_AUSENCIA CHARACTER VARYING(70),
  									   OUT P_FECHA_SOLICITUD TIMESTAMP WITHOUT TIME ZONE,
  									   OUT P_FECHA_INICIO TIMESTAMP WITHOUT TIME ZONE, 
  									   OUT P_FECHA_FIN TIMESTAMP WITHOUT TIME ZONE,
  									   OUT DESCRIPCION CHARACTER VARYING(60),
  									   OUT P_NOMBRE_JEFE TEXT,
  									   OUT P_F_CAMBIO_ESTADO_JEFE TIMESTAMP WITHOUT TIME ZONE) 
  RETURNS SETOF record AS 
  $BODY$
   BEGIN     
      RETURN query SELECT CONCAT(B."PRIMER_SEGUNDO_NOMBRE",' ',B."PRIMER_SEGUNDO_APELLIDO") AS NOMBRE_COMPLETO,
  			C."TIPO_AUSENCIA", 
  			A."FECHA_SOLICITUD", 
  			A."FECHA_INICIO", 
  			A."FECHA_FIN", 
  			A."DESCRIPCION_PERMISO",
  			CONCAT(D."PRIMER_SEGUNDO_NOMBRE",' ',D."PRIMER_SEGUNDO_APELLIDO") AS P_NOMBRE_JEFE,
  			A."F_CAMBIO_ESTADO_JEFE"
  		FROM "PERMISOS"."TBL_PERMISOS" A
  		INNER JOIN "PERMISOS"."TBL_EMPLEADOS" B
  		ON (A."ID_EMPLEADO" = B."ID_EMPLEADO")
  		INNER JOIN "PERMISOS"."TBL_TIPOS_AUSENCIAS" C
  		ON(A."ID_TIPO_AUSENCIA" = C."ID_TIPO_AUSENCIA")
  		INNER JOIN "PERMISOS"."TBL_EMPLEADOS" D
  		ON(A."ID_JEFE" = D."ID_EMPLEADO")
  		WHERE A."ID_PERMISO" = P_ID_PERMISO;
     
   END;
  $BODY$ 
  LANGUAGE 'plpgsql';
  
  --Ejecutar la función
  SELECT * 
  FROM "PERMISOS".F_DEVOLVER_ESPECIF_PERMISO_JPERSONAL(5);