Case in select statment --> part of SQL language (but no a PL/SQL language).
There are 2 different languages.

In 9i version of PL/SQL language CASE constraction in select support, in 8i not.

When u wrote :
5 select case when 1=1 then '1'
6 else '2'
7 end as "xyz"
8 INTO v_1
9 FROM dual;
10 dbms_output.put_line('The value is : '||v_1);
11 END;
...
U used PL/SQL language.

When u wrote :
...
6 v_sql := 'select case when 1=1 then ''1''
7 else ''2''
8 end
9 FROM dual ';
10 execute immediate v_sql into v_1 ;
...
U used SQL language.