I noticed that you used 'variable'. How is it different to 'define'?
They are quite different. VARIABLEs are true bind variables that can be used in SQL and PL/SQL, and can have values assigned to them within SQL or PL/SQL (as in my example).
DEFINE creates "substitution" variables which are meaningful only to the SQL Plus program. They are simply substituted with their defined values BEFORE SQL Plus sends the SQL or PL/SQL to the server. Silly example:
SQL> define x = dbms_output.put_line('Hello');
SQL> exec &x