Oracle'da değişkenleri nasıl bildirir ve kullanırım?


18

Temel becerilerim SQL Server ile, ancak bir Oracle sorgusu ayarlaması istendi. Aşağıdaki SQL yazdım:

declare @startDate int
select @startDate = 20110501

Ve bu hatayı alıyorum:

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'da değişkenleri nasıl bildirir ve kullanırım?

Yanıtlar:


18

İç pl / sql bloğu:

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

bağlama değişkeni kullanarak:

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

PL / SQL prosedürü başarıyla tamamlandı.

SQL> print startdate

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

bir sorguda:

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

Bu maalesef benim için çalışmıyor. var benim_sayım NUMBER; BEGIN SEÇ 12345 çiftten my_num'a; SON; / select * dan my_table sa burada sa.my_col =: my_num;
Matthew

Hangi hatayı alıyorsun? (yeni test edildi ve çalışıyor)
ik_zelf

Aslında tüm esnaf Jon tarafından yayınlanan çözüm denedim ve bu benim ihtiyaçları için mükemmel çalıştı - yani DEFINE kullanarak ve & ile değişken referans.
Matthew

3

SQL * Plus ek bir formatı destekler:

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

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

Değiştirmelerin sorgu içinde gerçekleştirileceği ve işaretlerini not edin.


Bu, şu işlevlerden herhangi birini kullanırken Oracle için Toad'da benim için çalıştı: Execute as scriptveya Execute via Toad script runnerveya Execute via SQL*Plus. Ancak, onunla çalışmayı denerseniz Execute/compile statement at caretbir hata iletisi döndürür: "ORA-009000: geçersiz SQL deyimi".
SherlockSpreadsheets
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.