Як я декларую і використовую змінні в 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

Всередині блоку пл / кв.м:

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

На жаль, це не працює для мене. var my_num НОМЕР; НАЧАЙТЕ ВИБІР 12345 В my_num ВІД подвійного; КІНЧ; / select * з 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
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.