Você poderia tentar um formatador como este
Eles sempre serão limitados porque não sabem (e não podem) saber quais funções definidas pelo usuário você pode ter definido em seu banco de dados (ou quais funções internas você tem ou não tem acesso).
Você também pode olhar para o ANTLR (mas isso seria uma solução offline)