¿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?

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 ":" */

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.


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
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.