00911. 00000 - "invalid character" I am completely new to Oracle DB Administration an PL/SQL.

I get an "invalid character" error trying to execute the following code in Oracle SQL Developer.
This is my first statement in PL/SQL.

SET SERVEROUTPUT ON


DEF username = 'cuser2'

DECLARE

   i_matching NUMBER(1) := null;
  --  username Varchar(20) := 'cuser2';

BEGIN

   SELECT COUNT (1) INTO i_matching FROM dba_users WHERE username = UPPER('&amp;username');

  DBMS_OUTPUT.put_line(i_matching);

   IF i_matching = 0 THEN

    EXECUTE IMMEDIATE ('
    create user &amp;username IDENTIFIED BY &amp;username;
    GRANT CONNECT,RESOURCE,UNLIMITED TABLESPACE TO &amp;username;
    ALTER USER &amp;username DEFAULT TABLESPACE USERS;
    ALTER USER &amp;username TEMPORARY TABLESPACE TEMP;
    ');

   END IF;

END
;
/


I definitely lack knowledge about the PL/SQL syntax and created this code from examples in the web.
I guess the error is because of a misplaced ';' somewhere but I don't get it.
It would be great to get a hint on what I am missing here.

This kind of code pretty much seems to be the only way to implement a 'create and alter user if not exists' behaviour. At least it's the only method I found on the web.

Coming from sripting languages I naively expected something like the following to work but I guess nothing similar is implemented in Oracle:

-- create and alter user if not exists
IF (NOT EXISTS user cuser1) THEN

create user cuser1 IDENTIFIED BY cuser1;
GRANT CONNECT,RESOURCE,UNLIMITED TABLESPACE TO cuser1;
ALTER USER cuser1 DEFAULT TABLESPACE USERS;
ALTER USER cuser1 TEMPORARY TABLESPACE TEMP;

END IF;


Thank you in advance for any hints.
Thanks to Phil's comment the correct statement looks like this:

SET SERVEROUTPUT ON

DEF username = 'cuser2'

DECLARE

   i_matching NUMBER(1) := null;

BEGIN

   SELECT COUNT (1) INTO i_matching FROM dba_users WHERE username = UPPER('&amp;username');

  DBMS_OUTPUT.put_line(i_matching);

   IF i_matching = 0 THEN

    EXECUTE IMMEDIATE ('create user &amp;username IDENTIFIED BY &amp;username');
    EXECUTE IMMEDIATE ('GRANT CONNECT,RESOURCE,UNLIMITED TABLESPACE TO &amp;username');
    EXECUTE IMMEDIATE ('ALTER USER &amp;username DEFAULT TABLESPACE USERS');
    EXECUTE IMMEDIATE ('ALTER USER &amp;username TEMPORARY TABLESPACE TEMP');

   END IF;

END
;
/