As "Unsupported Command" suggests, "set define on" doesn't work in LiveSQL. The ampersand indicates a substitution variable.
To use these you need to use an interactive environment link SQLcl, SQL*Plus or SQL Developer.
For example, when I run it in SQLcl I get:
SQL> SET DEFINE ON
SQL>
SQL> DECLARE
2 age VARCHAR2(2);
3 BEGIN
4 age:= &age;
5 dbms_output.put_line('Your age is:' || age);
6 END;
7 /
Enter value for age: 21
old:DECLARE
age VARCHAR2(2);
BEGIN
age:= &age;
dbms_output.put_line('Your age is:' || age);
END;
new:DECLARE
age VARCHAR2(2);
BEGIN
age:= 21;
dbms_output.put_line('Your age is:' || age);
END;
Your age is:21
They're called substitution variables because the client replaces the &variable with the value you pass. Then sends that to the database.
LiveSQL has no back-and-forth to do this.
Substitution variables are handy for command line scripts where you want users to supply some of their own values.
But it's rare for people to call PL/SQL from the command line. The vast majority of the time it's called via an application written in some other language (C, Java, ...).
In these applications, you can't use substitution variables. You need to use bind variables instead. These are placeholders. So the user input never becomes part of the executed statement. These are critical for security and performance.
If you want to know more about these, the following articles give a good comparison:
https://community.oracle.com/docs/DOC-915518 https://oracle-base.com/articles/misc/literals-substitution-variables-and-bind-variables PS - your LiveSQL link appears to be invalid...