Bagaimana cara mendeklarasikan dan menggunakan variabel di Oracle?

18

Keahlian utama saya adalah dengan SQL Server, tetapi saya telah diminta untuk melakukan sejumlah pencarian Oracle. Saya telah menulis SQL berikut:

declare @startDate int
select @startDate = 20110501

Dan saya mendapatkan kesalahan ini:

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

Bagaimana cara mendeklarasikan dan menggunakan variabel di Oracle?

Mark Allison
sumber

Jawaban:

18

Di dalam blok pl / sql:

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

menggunakan variabel bind:

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

Prosedur PL / SQL berhasil diselesaikan.

SQL> print startdate

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

dalam kueri:

select object_name 
from user_objects 
where created > to_date (:startdate,'yyyymmdd');  /*prefix the bind variable wïth ":" */
ik_zelf
sumber
Sayangnya ini tidak bekerja untuk saya. var my_num NUMBER; BEGIN SELECT 12345 KE my_num DARI dual; AKHIR; / select * from my_table sa where sa.my_col =: my_num;
Matius
kesalahan apa yang kamu dapatkan? (baru diuji dan bekerja)
ik_zelf
Saya benar-benar mencoba solusi yang diposting oleh Jon dari Semua Perdagangan dan yang bekerja dengan baik untuk kebutuhan saya - yaitu menggunakan DEFINE dan merujuk variabel dengan &.
Matius
3

SQL * Plus mendukung format tambahan:

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

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

Catat ampersand tempat penggantian dilakukan dalam kueri.

Jon dari Semua Perdagangan
sumber
Ini bekerja untuk saya di Toad untuk Oracle ketika menggunakan salah satu fungsi ini: Execute as scriptatau Execute via Toad script runneratau Execute via SQL*Plus. Namun, jika Anda mencoba menjalankannya Execute/compile statement at caretakan mengembalikan pesan kesalahan: "ORA-009000: pernyataan SQL tidak valid".
SherlockSpreadsheets