Você não precisa usar
SELECT
para avaliação da função. id := to_number((SELECT code FROM buildings WHERE name = building)
|| floor || num::text,
'999999999');
outra possibilidade (e geralmente melhor) é usar a função na lista de expressões (lista de campos de resultados)
id := (SELECT to_number(code || floor || num::text, '99999999')
FROM buildings WHERE name = building)
Use
SELECT
somente quando você precisa de uma consulta aos dados, não para avaliação de função ou variável!