Isso não pode ser feito diretamente, porque a saída de uma seleção ilimitada em um procedimento armazenado é um conjunto de resultados enviado ao cliente, mas não tecnicamente uma tabela.
A solução é deixar o proc colocar os dados em uma tabela temporária depois de criar a tabela para você. Esta tabela estará disponível apenas para sua conexão quando o procedimento terminar. Não causará conflito se outra pessoa executar o proc ao mesmo tempo e não ficará visível para nenhuma outra conexão.
Adicione isso ao procedimento:
DROP TEMPORARY TABLE IF EXISTS foo;
CREATE TEMPORARY TABLE foo SELECT ... your existing select query here ...;
Quando seu procedimento terminar,
SELECT * FROM foo;
lhe dará o que você teria obtido do proc. Você pode se juntar a ele praticamente como qualquer mesa. Quando terminar, solte-o ou ele desaparecerá sozinho quando você desconectar. Se você executar o proc novamente, ele será descartado e recriado.