Jak deklarować i używać zmiennych w Oracle?

18

Moje główne umiejętności dotyczą SQL Server, ale zostałem poproszony o dostrojenie zapytania Oracle. Napisałem następujący SQL:

declare @startDate int
select @startDate = 20110501

I pojawia się ten błąd:

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

Jak deklarować i używać zmiennych w Oracle?

Mark Allison
źródło

Odpowiedzi:

18

Wewnątrz bloku pl / sql:

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

za pomocą zmiennej bind:

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

Procedura PL / SQL została pomyślnie zakończona.

SQL> print startdate

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

w zapytaniu:

select object_name 
from user_objects 
where created > to_date (:startdate,'yyyymmdd');  /*prefix the bind variable wïth ":" */
ik_zelf
źródło
To niestety dla mnie nie działa. var my_num NUMBER; ROZPOCZNIJ WYBIERZ 12345 INTO my_num FROM dual; KONIEC; / select * z my_table sa gdzie sa.my_col =: my_num;
Matthew
jaki masz błąd? (tylko przetestowane i działa)
ik_zelf
W rzeczywistości wypróbowałem rozwiązanie opublikowane przez Jona z All Trades, które działało idealnie dla moich potrzeb - tj. Używając DEFINE i odwołując się do zmiennej za pomocą &.
Matthew
3

SQL * Plus obsługuje dodatkowy format:

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

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

Zwróć uwagę na znaki handlowe, w których należy wykonać podstawienia w zapytaniu.

Jon of All Trades
źródło
Działa to dla mnie w Toad for Oracle podczas korzystania z którejkolwiek z tych funkcji: Execute as scriptlub Execute via Toad script runnerlub Execute via SQL*Plus. Jeśli jednak spróbujesz uruchomić z Execute/compile statement at caretnim, zwróci komunikat o błędzie: „ORA-009000: niepoprawna instrukcja SQL”.
SherlockSpreadsheets