Algo como?
select t.*, round(dbms_random.value() * 8) + 1 from foo t;
Edit:David apontou que isso dá distribuição desigual para 1 e 9.
Como ele aponta, o seguinte dá uma melhor distribuição:
select t.*, floor(dbms_random.value(1, 10)) from foo t;
select t.*, round(dbms_random.value() * 8) + 1 from foo t;
select t.*, floor(dbms_random.value(1, 10)) from foo t;
Adicionando recursos mais avançados, como gerenciar categorias e votar em tópicos e postagens
Como usar a cláusula ORDER BY no SQL?
Fundamentos de Expressões de Tabela, Parte 11 - Visualizações, Considerações de Modificação
Como obter informações estatísticas do SQL Server usando funções estatísticas do sistema