¿Cómo declaro y uso variables en Oracle?

18

Mis habilidades principales son con SQL Server, pero me han pedido que realice algunos ajustes de una consulta de Oracle. He escrito el siguiente SQL:

declare @startDate int
select @startDate = 20110501

Y me sale este error:

declare @startDate int
select @startDate = 20110501
Error at line 1
ORA-06550: line 1, column 9:
PLS-00103: Encountered the symbol "@" when expecting one of the following:

   begin function package pragma procedure subtype type use
   <an identifier> <a double-quoted delimited-identifier> form
   current cursor

¿Cómo declaro y uso variables en Oracle?

Mark Allison
fuente

Respuestas:

18

Dentro del bloque pl / sql:

declare
 startdate number;
begin
  select 20110501 into startdate from dual;
end;
/

usando una variable de enlace:

var startdate number;
begin
  select 20110501 into :startdate from dual;
end;
/

Procedimiento PL / SQL completado con éxito.

SQL> print startdate

 STARTDATE
----------
  20110501

en una consulta:

select object_name 
from user_objects 
where created > to_date (:startdate,'yyyymmdd');  /*prefix the bind variable wïth ":" */
ik_zelf
fuente
Esto desafortunadamente no funciona para mí. var my_num NUMBER; COMIENCE SELECCIONE 12345 EN my_num DESDE dual; FINAL; / select * from my_table sa donde sa.my_col =: my_num;
Matthew
¿Qué error obtienes? (solo probado y funciona)
ik_zelf
De hecho, probé la solución publicada por Jon de All Trades y que funcionó perfectamente para mis necesidades, es decir, usando DEFINE y haciendo referencia a la variable con &.
Matthew
3

SQL * Plus admite un formato adicional:

DEFINE StartDate = TO_DATE('2016-06-21');
DEFINE EndDate   = TO_DATE('2016-06-30');

SELECT
    *
FROM
    MyTable
WHERE
    DateField BETWEEN &StartDate and &EndDate;

Tenga en cuenta los símbolos en los que se realizarán las sustituciones dentro de la consulta.

Jon de todos los oficios
fuente
Esto funcionó para mí en Toad for Oracle al usar cualquiera de estas funciones: Execute as scripto Execute via Toad script runnero Execute via SQL*Plus. Sin embargo, si intenta ejecutar con el Execute/compile statement at caret, devuelve un mensaje de error: "ORA-009000: instrucción SQL no válida".
SherlockSpreadsheets