hola edwin9012
Si no estoy mal, la ejecución de operaciones DDL no se pueden hacer al interior de una función por lo que se estaría haciendo un COMMIT implicito por la sentencia y que por seguridad no debería dejar realizar.
Para esto, puedes utilizar a cambio un PROCEDURE que haga esta misma tarea.
Otra cosa que veo, es que como lo tienes, te va a crear una tabla llamada nombretabla ya que si está entre comillas no toma el valor que le ingresas por defecto.
Para esto debes hacer uso de SQL dinamico.
quedaría algo así:
Código SQL:
Ver originalEXECUTE IMMEDIATE 'create table ' || nombretabla || ' AS select * from emp';
De esta forma si toma el nombre que le ingresas en el parametro de entrada.
saludos