Você já deve ter resolvido isso agora, mas a primeira coisa que notei sobre seu procedimento armazenado é que você tem uma variável local com o mesmo nome da variável de saída (
parent_id
). Parece-me que você está definindo o valor da variável local em vez da variável de retorno, para que o chamador nunca veja o valor correto. Talvez removendo o
parent_id
local declaração de variável resolverá seu problema.