Как мне объявить и использовать переменные в Oracle?

18

Мои основные навыки связаны с SQL Server, но меня попросили немного настроить запрос Oracle. Я написал следующий SQL:

declare @startDate int
select @startDate = 20110501

И я получаю эту ошибку:

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

Как мне объявить и использовать переменные в Oracle?

Марк Эллисон
источник

Ответы:

18

Внутри блока pl / sql:

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

используя переменную связывания:

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

Процедура PL / SQL успешно завершена.

SQL> print startdate

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

в запросе:

select object_name 
from user_objects 
where created > to_date (:startdate,'yyyymmdd');  /*prefix the bind variable wïth ":" */
ik_zelf
источник
Это, к сожалению, не работает для меня. var my_num NUMBER; НАЧАЛО ВЫБРАТЬ 12345 В my_num FROM dual; КОНЕЦ; / выберите * из my_table sa, где sa.my_col =: my_num;
Матфея
Какая у вас ошибка? (только что протестировано и работает)
ik_zelf
Я на самом деле попробовал решение, опубликованное Джоном на все руки, и оно отлично подошло для моих нужд - то есть с помощью DEFINE и обращения к переменной с помощью &.
Мэтью
3

SQL * Plus поддерживает дополнительный формат:

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

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

Обратите внимание на амперсанды, где в запросе должны выполняться замены.

Джон на все руки
источник
Это сработало для меня в Toad for Oracle при использовании любой из этих функций: Execute as scriptили Execute via Toad script runnerили Execute via SQL*Plus. Однако, если вы попытаетесь запустить Execute/compile statement at caretего, он выдаст сообщение об ошибке: «ORA-009000: неверный оператор SQL».
SherlockSpreadsheets