Variáveis requerem PL/SQL; não está claro na sua pergunta se o seu código é um bloco PL/SQL adequado. Em PL/SQL, as variáveis são preenchidas a partir de consultas usando a sintaxe INTO em vez da sintaxe de atribuição que você está usando.
declare
txt varchar2(128);
n pls_integer;
begin
-- this is how to assign a literal
txt := 'your message here';
-- how to assign the output from a query
SELECT dbms_random.value(1,10) num
into n
FROM dual;
end;
Embora, você não precise usar a sintaxe de consulta. Isso é válido e uma melhor prática:
declare
n pls_integer;
begin
n := dbms_random.value(1,10);
end;