Wie deklariere und verwende ich Variablen in Oracle?

18

Meine Hauptfähigkeiten sind mit SQL Server, aber ich wurde gebeten, eine Oracle-Abfrage zu optimieren. Ich habe folgendes SQL geschrieben:

declare @startDate int
select @startDate = 20110501

Und ich bekomme diesen Fehler:

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

Wie deklariere und verwende ich Variablen in Oracle?

Mark Allison
quelle

Antworten:

18

Innerhalb pl / sql block:

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

Verwenden einer Bindevariable:

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

PL / SQL-Prozedur erfolgreich abgeschlossen.

SQL> print startdate

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

in einer Abfrage:

select object_name 
from user_objects 
where created > to_date (:startdate,'yyyymmdd');  /*prefix the bind variable wïth ":" */
ik_zelf
quelle
Das funktioniert bei mir leider nicht. var my_num NUMBER; BEGIN SELECT 12345 INTO my_num FROM dual; ENDE; / select * from my_table sa where sa.my_col =: my_num;
Matthew
welchen fehler bekommst du (gerade getestet und funktioniert)
ik_zelf
Ich habe tatsächlich die von Jon of All Trades veröffentlichte Lösung ausprobiert, die für meine Anforderungen perfekt funktionierte - dh DEFINE verwenden und die Variable mit & referenzieren.
Matthew
3

SQL * Plus unterstützt ein zusätzliches Format:

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

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

Beachten Sie das kaufmännische Und, bei dem die Ersetzungen innerhalb der Abfrage durchgeführt werden sollen.

Jon aller Berufe
quelle
Dies hat bei mir in Toad für Oracle funktioniert, wenn eine der folgenden Funktionen verwendet wurde: Execute as scriptoder Execute via Toad script runneroder Execute via SQL*Plus. Wenn Sie jedoch versuchen, mit dem Execute/compile statement at caretauszuführen, wird folgende Fehlermeldung zurückgegeben: "ORA-009000: Ungültige SQL-Anweisung".
SherlockSpreadsheets