Meu amigo, essa frase de "o Oracle não aceita atribuir dados resultantes de uma query, à uma variável" é uma Enorme Asneira : QUALQUER banco de dados digno do nome possui BIND VARIABLES...... O grande lance pelo que entendi é que vc *** NÃO *** quer usar uma variável Local do PL/SQL (definida num DECLARE) pois quando o bloco termina de executar a variável Some e vc quer usar o valor dela em OUTROS SQLs da mesma sessão : vc quer usar uma variável PÚBLICA, né ? Para que vc tenha uma variável Pública, ela deve ser assim definida, okdoc ? E o MODO DE DEFINIR uma variável pública por sessão pode VARIAR de acordo com o client Oracle que vc está usando, E SE vc quer definir uma variável NO BANCO ou NO CLIENT .... Por exemplo, usando sql*plus como client , uma das opções é o comando VARIABLE, segue o exemplo :
==> uso o comando sql*plus pra criar uma variável permanente na sessão : SYSTEM:@XE:SQL>variable V_MAX number; => preencho o valor nela via SELECT (que é possível SIM , ÓBVIO ULULANTE) : SYSTEM:@XE:SQL>BEGIN select max(sal) into :V_MAX from scott.emp; END; 2 / PL/SQL procedure successfully completed. => prontinho , vou exibir : SYSTEM:@XE:SQL>print V_MAX V_MAX ---------- 5000 => vou usar o valor num SQL qualquer : SYSTEM:@XE:SQL>select :V_MAX from dual; :V_MAX ---------- 5000 => vou usar num outro SQL : SYSTEM:@XE:SQL>select empno, ename from scott.emp where sal=:V_MAX; EMPNO ENAME ---------- ---------- 7839 KING SYSTEM:@XE:SQL> c.q.d. , legal ??? COM CERTEZA a tua tool cliente deve ter recurso pra criar variável local, se não estiver usando sql*plus... Uma ** OUTRA ** opção é ao invés de criar a variável no client, vc criar dentro do banco mesmo : pra isso vc pode usar uma PACKAGE, um CONTEXT.... OU SEJA, só de cara dei 3 opções pra fazer o que vc acha que "o Oracle não faz", tá legal ?? []s Chiappa