A partir da pesquisa que fiz, parece que você não pode declarar e definir variáveis como esta em instruções Select. Isso está certo ou estou perdendo alguma coisa?
Dentro do Oracle PL/SQL e SQL são duas linguagens separadas com dois mecanismos separados. Você pode incorporar SQL DML dentro de PL/SQL, e isso lhe dará variáveis. Como o seguinte bloco PL/SQL anônimo. Observe o
/
no final não faz parte do PL/SQL, mas diz ao SQL*Plus para enviar o bloco anterior. declare
v_Date1 date := to_date('03-AUG-2010', 'DD-Mon-YYYY');
v_Count number;
begin
select count(*) into v_Count
from Usage
where UseTime > v_Date1;
dbms_output.put_line(v_Count);
end;
/
O problema é que um bloco equivalente ao seu código T-SQL não funcionará:
SQL> declare
2 v_Date1 date := to_date('03-AUG-2010', 'DD-Mon-YYYY');
3 begin
4 select VisualId
5 from Usage
6 where UseTime > v_Date1;
7 end;
8 /
select VisualId
*
ERROR at line 4:
ORA-06550: line 4, column 5:
PLS-00428: an INTO clause is expected in this SELECT statement
Para passar os resultados de uma consulta de uma PL/SQL, seja um bloco anônimo, procedimento armazenado ou função armazenada, um cursor deve ser declarado, aberto e depois retornado ao programa chamador. (Além do escopo de responder a esta pergunta. EDIT: consulte Obter conjunto de resultados do procedimento armazenado do Oracle)
A ferramenta cliente que se conecta ao banco de dados pode ter suas próprias variáveis de ligação. No SQL*Plus:
SQL> -- SQL*Plus does not all date type in this context
SQL> -- So using varchar2 to hold text
SQL> variable v_Date1 varchar2(20)
SQL>
SQL> -- use PL/SQL to set the value of the bind variable
SQL> exec :v_Date1 := '02-Aug-2010';
PL/SQL procedure successfully completed.
SQL> -- Converting to a date, since the variable is not yet a date.
SQL> -- Note the use of colon, this tells SQL*Plus that v_Date1
SQL> -- is a bind variable.
SQL> select VisualId
2 from Usage
3 where UseTime > to_char(:v_Date1, 'DD-Mon-YYYY');
no rows selected
Observe que o acima está em SQLPlus, pode não funcionar (provavelmente não funcionará) no desenvolvedor Toad PL/SQL, etc. As linhas que começam com variável e exec são SQL Mais comandos. Eles não são comandos SQL ou PL/SQL. Nenhuma linha selecionada porque a tabela está vazia.