salida - Asignación de SQL variable de Oracle simple
procedimientos y funciones oracle pl/sql (5)
Para lograr lo que estás intentando en Toad, no necesitas declarar la variable en absoluto. Simplemente incluya su variable precedida de dos puntos y Toad le pedirá el valor de la variable cuando ejecute la consulta. Por ejemplo:
select * from all_tables where owner = :this_is_a_variable;
Si esto no funciona inicialmente, haga clic derecho en cualquier lugar del editor y asegúrese de que esté marcado "Preguntar por variables de sustitución".
Si realmente desea hacerlo de forma similar a la forma en que SQL Server maneja las variables (o si desea poder hacer lo mismo en SQL * Plus), puede escribirlo de la siguiente manera:
var this_is_a_variable varchar2(30);
exec :this_is_a_variable := ''YOUR_SCHEMA_NAME'';
print this_is_a_variable;
select * from all_tables where owner = :this_is_a_variable;
Sin embargo, para hacer que esto funcione en Toad, tendrá que ejecutarlo a través de "Ejecutar como script", en lugar del típico comando "Ejecutar declaración".
A pesar de haber pasado una hora investigando, parece que no puedo entender cómo definir correctamente una variable y luego usarla en tu SQL.
Esto es lo que he producido hasta ahora:
DECLARE startDate DATE := to_date(''03/11/2011'', ''dd/mm/yyyy'');
de lo cual obtengo la respuesta:
ORA-06550: línea 1, columna 63: PLS-00103: Encontró el símbolo "fin de archivo" cuando esperaba uno de los siguientes:
comience el paquete de funciones pragma procedimiento subtipo tipo uso formulario actual cursor
Detalles: DECLARE startDate DATE: = to_date (''03 / 11/2011 '','' dd / mm / aaaa ''); Error en la línea 1 ORA-06550: línea 1, columna 63: PLS-00103: Encontró el símbolo "fin de archivo" cuando esperaba uno de los siguientes:
comience el paquete de funciones pragma procedimiento subtipo tipo uso formulario actual cursor
¡Me encantaría saber cómo hacer una tarea tan simple!
Tenga en cuenta que el PL / SQL de Oracle no es SQL.
PL / SQL es un lenguaje de procedimientos. SQL no es de procedimiento, pero puede definir "variables" que el usuario puede ingresar mediante la sintaxis "& var" (consulte http://www.orafaq.com/node/515 ).
¿Puedes por favor probar esto?
DEF startDate = to_date(''03/11/2011'', ''dd/mm/yyyy'');
Select &startDate from dual;
Tu declaración de variable es correcta.
La palabra clave DECLARE
se usa para definir variables con un alcance en un bloque PL / SQL (cuyo cuerpo está delimitado por BEGIN
y END;
). ¿Cómo quieres usar esta variable?
El siguiente PL / SQL funciona bien para mí:
DECLARE
startDate DATE := to_date(''03/11/2011'', ''dd/mm/yyyy'');
reccount INTEGER;
BEGIN
SELECT count(*) INTO reccount
FROM my_table tab
WHERE tab.somedate < startDate;
dbms_output.put_line(reccount);
END;
También puede usar la sentencia DEFINE
para usar variables simples de sustitución de cadenas. Son adecuados para un cliente como SQL / PLUS o TOAD.
DEFINE start_date = "to_date(''03/11/2011'', ''dd/mm/yyyy'')"
SELECT COUNT(*) from my_table tab where tab.some_date < &start_date;
Esta es una publicación anterior, pero en caso de que alguien se tropiece con esto (como acabo de hacer), puede manejar esto con un CTE:
with params as (
select date ''2011-11-03'' as startdate
from dual
)
select . . .
from params cross join
. . .
Casi la misma sintaxis funciona en SQL Server (menos la date
-específicamente y from dual
).