Uno de los problemas q ue tiene el parser de MySQL es que determina la ubicación del error como nacida en el punto siguiente al último que pudo parsear. En este caso, linea 4: "DECLARE ocupacion INT;". Pero eso no quiere decir que ESE sea el punto del error. A veces hay que cavar bastante hacia adelante o hacia atrás, para poder encontrarlo.
Por caso: Fíjate que en la línea 7 tienes esta comparación:   
 Cita:  IF ocupacion <=> NULL THEN
        return 0;
    ELSE 
        return ocupacion;
    END IF;
    Eso no tiene sentido. Ese caso comparativo no existe en ningún lenguaje. 
En todo caso, si lo que quieres es definir "diferente de", deberías poner  
Código:
     IF ocupacion <> NULL THEN
        return 0;
    ELSE 
        return ocupacion;
    END IF;
  Es muy probable que ese sea el error.
Prueba y me cuentas.