Comment déclarer et utiliser des variables dans Oracle?


18

Mes compétences principales sont avec SQL Server, mais on m'a demandé de faire quelques réglages d'une requête Oracle. J'ai écrit le SQL suivant:

declare @startDate int
select @startDate = 20110501

Et je reçois cette erreur:

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

Comment déclarer et utiliser des variables dans Oracle?

Réponses:


18

Intérieur du bloc pl / sql:

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

en utilisant une variable de liaison:

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

Procédure PL / SQL terminée avec succès.

SQL> print startdate

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

dans une requête:

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

Cela ne fonctionne malheureusement pas pour moi. var my_num NUMBER; COMMENCER SELECT 12345 EN my_num FROM dual; FIN; / sélectionnez * dans my_table sa où sa.my_col =: my_num;
Matthew

quelle erreur obtenez-vous? (juste testé et fonctionne)
ik_zelf

J'ai en fait essayé la solution publiée par Jon of All Trades et qui fonctionnait parfaitement pour mes besoins - c'est-à-dire en utilisant DEFINE et en référençant la variable avec &.
Matthew

3

SQL * Plus prend en charge un format supplémentaire:

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

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

Notez les esperluettes où les substitutions doivent être effectuées dans la requête.


Cela a fonctionné pour moi dans Toad pour Oracle lorsque vous utilisez l'une de ces fonctions: Execute as scriptou Execute via Toad script runnerou Execute via SQL*Plus. Toutefois, si vous essayez de l'exécuter, Execute/compile statement at caretil renvoie un message d'erreur: "ORA-009000: instruction SQL non valide".
SherlockSpreadsheets
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.