I dont why you have used Definer. can you please explain.
And as for the procedure, the above replies are accurate. A good practice would perhaps be to use modes. As in, iMode=1, iMode=2 so on.
Purpose of using modes is to write different queries in each mode.
Do not forget to declare @iMode int=-1