Because CREATE TABLE
is a DDL statement, and you may not execute DDL statements from PL/SQL (at least not directly).
If (and that's a big if) you really need to do that, you can either use the DBMS_SQL
package or EXECUTE IMMEDIATE
(easier):
create or replace procedure do_it as
begin
execute immediate 'CREATE TABLE foo(pk number not null)';
end;
But this is usually not necessary. People coming from a SQL Server background often are trained to create lots of temporary tables from their stored procedures - in Oracle, you'd normally use a Global Temporary Table for that.