Variable Substitution
define/&amp; is a simple text substitution mechanism that does not know anything about sql. And sql and the Oracle Database server do not know anything about the text processing mechanism. So the text that results from the 'define/&amp;'substitutuin must be valid sql statement. Otherwise you get an error. 

 CREATE TABLE P747||_MU as Select percent from Source_Table 


is not a valid sql statement.

 CREATE TABLE P747_MU as Select percent from Source_Table 


is  the valid statement, an so

Define PROJECT = 'P747';
Create table &amp;&amp;Project._MU as Select 
percent
from Source_Table;


Avariable name like &amp;&amp;Project must be followed by a whitespace or and end of file or by a dot (.). The dot is removed after variable substitution.

Define PROJECT = 'P747';
Create table &amp;&amp;Project_MU as Select
percent
from Source_Table;


will not work, because the variable is &amp;&amp;Project_MU and not &amp;&amp;Project.

you mix up simple text substituion in the Toad editor ( 'define/&amp;)  with sql string functions (to_char, ||). That are different things.