SQL Select Into Kullanımı (Detaylı Anlatım) | SQL

SQL Select Into Deyimi

SQL Select into kullanımı ile , sorguladığımız tablodaki verileri tanımladığımız bir değişkene atarız. Bu sayede değerleri atanmış değişkenlerimizi PL/SQL kodumuz içerisinde kullanabiliriz. Söz dizimi;

SELECT kolon_adi
INTO degisken_adi
FROM tablo_adi
WHERE kosullarimiz;

Şeklindedir.

Söz dizimini biraz genişletirsek;

SELECT kolon_adi1,kolon_adi2,kolon_adiN

INTO degisken_adi1,degisken_adi2,degisken_adiN

FROM tablo_adi1, tablo_adi2 WHERE tablolari_esleyen_kosullarimiz AND diger_kosullarimiz

ORDER BY siralama_kolon_adlari Group By gruplama_kolon_adlari;

Şeklinde de tanımlayabiliriz. Tüm Select sorgusu söz dizimini rahatlıkla kullanabiliyoruz.

Into kullanımındaki amacımız tablodan sorguladığımız verileri, daha sonra kullanmak üzere, önceden tanımlanan değişken veya değişkenlere atamaktır. Örnek ile anlatacak olursak öncelikle daha iyi anlamanız için kendi tablomuzu oluşturalım. İçerisine kullanacağımız verileri ekleyelim.

create table calisanlar (
ad VARCHAR2(100),
id number,
maas number)

insert into calisanlar values ('Uğur',3453,1500);
insert into calisanlar values ('Sinan',5334,1100);
insert into calisanlar values ('Eyüp',3434,1600);

Select Into SQL Örnekleri

Örrneklerimizi yukarıda oluşturduğumuz tablo üzerinde gerçekleştireceğiz.

DECLARE
calisan_adi varchar2(100);
BEGIN
SELECT
ad
INTO
calisan_adi
FROM
calisanlar
WHERE
id = 3453;
DBMS_OUTPUT.PUT_LINE( calisan_adi );
END;

Çıktısı:

 Uğur

olacaktır.

3453 id’sine sahip çalışanımızın ad bilgisini, declare bloğunda tanımladığımız calisan_adi adlı değişkenimize atadık.

Eğer bu id değerine sahip bir çalışanımız olmasaydı ne olacaktı ?

Oracle bize NO_DATA_FOUND hatası verecekti.

Dikkat etmemiz gereken bir diğer durum ise 3453 id’sine sahip birden fazla çalışanımızın olmasıdır.

Yani eğer select sorgusu birden çok çalışan adı döndürseydi, Oracle bu durum için bize TOO_MANY_ROWS hatası verecekti.

Şimdi bir güzel örnek ile buraya kadarki kısmı pekiştirelim.

DECLARE
calisan_adi varchar2(100);
calisan_maasi number;
BEGIN
SELECT
ad,maas
INTO
calisan_adi,calisan_maasi
FROM
calisanlar
WHERE
id = 3453;
DBMS_OUTPUT.PUT_LINE( calisan_adi || ' : ' || calisan_maasi ||' TL ' || 'Maaş almaktadır.' );
END;

Örneğimizde, birden çok veriyi değişkenlerimize atadık. PL/SQL Declare Anonim bloğumuzda DBMS_OUTPUT.PUT_LINE() metodu içersinde değişkenlerimizi rahatlıkla kullanabildik.

PL/SQL Declare Anonim Bloğu için TIKLAYIN.

Çıktısı:

Uğur : 1500 TL Maaş almaktadır.

Şeklinde olacaktır.

Into Deyimi ile Tüm Satırı Değişkene Atama Örneği

DECLARE
r_calisanlar calisanlar%rowtype;
BEGIN
SELECT
*
INTO
r_calisanlar
FROM
calisanlar
WHERE
id = 3453;
DBMS_OUTPUT.PUT_LINE( r_calisanlar.ad || ' : ' || r_calisanlar.maas ||' TL ' || 'Maaş almaktadır.' );
END;

Örneğimizde r_calisanlar değişkeni, çalışanlar tablosunun satırları tipinde bir değişkendir. Bunu “%rowtype” özelliği ile başarabildik.

“%rowtype” attribute kullanımı ve detaylı bilgi için Tıklayabilirsiniz.

Yani calisanlar tablosunun 1 satır verisini içerisinde barındırabilir. Örneğimizde 3453 id’li çalışanımızın “*” tüm verilerini r_calisanlar değişkenimize atadik.

Daha sonrasında ise r_calisanlar.ad ve r_calisanlar.maas sözdizimi ile, edindiğimiz verileri,  DBMS_OUTPUT.PUT_LINE() metodu içerisinde rahatlıkla kullanabildik.

Bu sayede çalışanlar tablosunda bir satir veriyi bir değişkene atamış olduk.

 

SQL Into Kullanımı Sırasında Karşılaşabileceğimiz Hatalar

 

Eğer tablodan sorguladığımız veri sayısı, into deyiminde değer atamak istediğimiz değişken sayısından fazla ise;

 ORA-00947: not enough values The INTO list contains fewer variables than the SELECT list.
SQL Select Into Kullanımı
SQL Select Into Kullanımı

Hatasını alırız.

 

Eğer değer atamak istediğimiz değişken sayisi, select ile tablodan sorguladığımız veri sayısından az fazla ise;

ORA-00913: too many values The INTO list contains more variables than the SELECT list.
SQL Select Into Kullanımı
SQL Select Into Kullanımı

Hatasını alırız.

 

Bir diğer çok karşılaştığımız hata ise;  sorguladığımız veri tipleri ile değer atamak istediğimiz değişkenlerin veri tipleri uyuşmuyorsa;

 ORA-06502: PL/SQL: numeric or value error
SQL Select Into Kullanımı
SQL Select Into Kullanımı

Hatasını alırız.

 

Yazımızın sonuna geldik. Daha iyi yazılarda görüşmek dileğiyle 🙂

Diğer Kaynaklar

Diğer PLSQL yazılarıma göz atmak için TIKLAYIN.