Come dichiaro e utilizzo le variabili in Oracle?


18

Le mie competenze principali sono con SQL Server, ma mi è stato chiesto di eseguire alcune ottimizzazioni di una query Oracle. Ho scritto il seguente SQL:

declare @startDate int
select @startDate = 20110501

E ottengo questo errore:

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

Come dichiaro e utilizzo le variabili in Oracle?

Risposte:


18

All'interno del blocco pl / sql:

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

usando una variabile bind:

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

Procedura PL / SQL completata correttamente.

SQL> print startdate

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

in una query:

select object_name 
from user_objects 
where created > to_date (:startdate,'yyyymmdd');  /*prefix the bind variable wïth ":" */

Questo purtroppo non funziona per me. var my_num NUMBER; INIZIA SELEZIONA 12345 IN my_num FROM dual; FINE; / seleziona * da my_table sa dove sa.my_col =: my_num;
Matteo,

che errore ricevi? (appena testato e funziona)
ik_zelf

In realtà ho provato la soluzione pubblicata da Jon of All Trades e che ha funzionato perfettamente per le mie esigenze, ovvero usare DEFINE e fare riferimento alla variabile con &.
Matteo

3

SQL * Plus supporta un formato aggiuntivo:

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

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

Nota le e commerciali in cui le sostituzioni devono essere eseguite all'interno della query.


Questo ha funzionato per me in Toad for Oracle quando ho usato una di queste funzioni: Execute as scripto Execute via Toad script runneroppure Execute via SQL*Plus. Tuttavia, se si tenta di eseguire con Execute/compile statement at caretesso, viene restituito un messaggio di errore: "ORA-009000: istruzione SQL non valida".
SherlockSpreadsheets
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.