Oracle, in its infinite wisdom, had 2 SQL engines - one for SQL and one for PL/SQL. And using even more intelligence, they put new features in the SQL-SQL engine before the PL/SQL-SQL engine. Therefore, in order to use analytical functions and case statements in 8i, you need to do dynamic SQL so that the SQL-SQL engine is used insted of the PL/SQL-SQL engine. Brilliant, eh? Mind you, it finally dawned on them that this was not such a good idea and they now have only one engine in 9i.