Is there some way to bind uniform with dynamic size to shader?

I have shader with constant size of uniform array looks like next:

Code :

#version 430 // maximum version that can be supported by my ATI card with open source mesa driver.
const int MAX_POINT_LIGHTS = 5;
...
uniform PointLight pointLights[MAX_POINT_LIGHTS];
struct Attenuation {
float constant;
float linear;
float exponent;
float distance;
};
struct PointLight {
vec3 colour;
vec3 position;
float intensity;
Attenuation att;
};
...

May I use in some way dynamic size of uniform array with my own structs?

I mean:

1 - On the CPU side I calculate "point light" number as three items.

2 - I bind them those three lights to the shader.

3 - On the shader side I have array with 3 items with known size.

That is so cool if it possible! :)

Tank you for answer!