A partir de la búsqueda que he hecho, parece que no se puede declarar y establecer las variables de este tipo en las sentencias SELECT. ¿Es correcto o me estoy perdiendo algo?
Dentro de Oracle PL/SQL y SQL hay dos idiomas separados con dos motores separados. Puede incrustar SQL DML dentro de PL/SQL, y eso le dará variables. Como el siguiente bloque anónimo de PL/SQL. Tenga en cuenta que el /
al final no es parte de PL/SQL, pero le dice a SQL * Plus que envíe el bloque 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;
/
El problema es que un bloque que es equivalente a su código de T-SQL no 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 pasar los resultados de una consulta de un PL/SQL, ya sea un anónimo bloque, procedimiento almacenado o función almacenada, un cursor debe ser declarado, abierto y luego devuelto al programa que realiza la llamada. (Más allá del alcance de responder a esta pregunta EDIT:. ver Get resultset from oracle stored procedure)
La herramienta de cliente que se conecta a la base de datos puede tener sus propias variables de enlace. En 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
cuenta que lo anterior es en SQL Además, puede que no (probablemente no) trabajar en sapo PL/SQL Developer, etc. Las líneas que comienzan con la variable y ejecutivo son SQL Plus comandos. No son comandos SQL o PL/SQL. No hay filas seleccionadas porque la tabla está vacía.
+1: ¡Esa no es una respuesta, es una * disertación *! –
+1 de acuerdo con @OMG Ponies :) – ThinkJet
+1 también TJ! –