Você pode dinamizar os dados assim em qualquer versão do Oracle.
SELECT id,
MAX( CASE WHEN key = 'name' THEN value ELSE null END ) name,
MAX( CASE WHEN key = 'height' THEN value ELSE null END ) height,
MAX( CASE WHEN key = 'awesomeness' THEN value ELSE null END ) awesomeness
FROM facts
WHERE id IN (1,2,3)
GROUP BY id
Se você estiver usando 11g, também poderá usar o
PVOT
operador. No entanto, se isso for representativo do seu modelo de dados, esse tipo de modelo de dados de atributo de entidade geralmente será bastante ineficiente. Você geralmente seria muito melhor servido com uma tabela que tivesse colunas para
name
, height
, awesomeness
, etc