KULLANICI TANIMLI FONKSİYONLAR

Benzer belgeler
Kullanıcı tanımlı fonksiyonlar SQL2000 ile gelen özelliklerden biridir. Fonksiyonlar tek bir değer veya tablo döndürmek için kullanılır.

KULLANICI TANIMLI FONKSİYONLAR (Devam)

KULLANICI TANIMLI FONKSİYONLAR (Devam)

Fonksiyonlar istenilen deger tipinde dönüs yapabilir. INT, VARCHAR deger döndürebileceğiniz gibi bir tablo da döndürebilirsiniz.

Sorgudan elde edilen değerin değişkenlere aktarılmasını sağlar. Sorgudan tek satır dönmesi gerekir. Çok satır dönerse hata verir.

VERİ TABANI ve YÖNETİMİ

Sorgudan elde edilen değerin değişkenlere aktarılmasını sağlar. Sorgudan tek satır dönmesi gerekir, aksi durumda hata olur.

STORED PROCEDURE LER (Saklı Yordamlar)

«BM364» Veritabanı Uygulamaları

8 Oracle da tablo yapısı içinde otomatik artan kolon yoktur. (identity kolon

ORACLE DA KÜRSÖRLER. Gerekli sistem değişkenleri

Sayfa 1 / 8. Tabo yapıları

Öğr. Gör. Cansu AYVAZ GÜVEN VERİTABANI-II. Değişken Tanımlama Ve Akış Kontrol Deyimleri

SQL PROGRAMLAMA. Bir batch, bir arada bulunan bir dizi SQL deyimidir. Batch ayıracı GO deyimidir.

Öğr. Gör. Cansu AYVAZ GÜVEN VERİTABANI-II. Değişken Tanımlama Ve Akış Kontrol Deyimleri

SAKLI YORDAM (Stored Procedure) Sibel Somyürek

Güz Yarıyılı MT 487 Bilgisayarda Veri Yapıları Final Çalışma Soruları

Oracle da kullanılan veri tipleri:

EXISTS VE NOT EXISTS fonksiyonları

TESİ. indeks. söylenebilir?? bir ilişkidir d) Hiçbiri. veya somutlaştırılmış. düzeyidir? sağlayabilir? sına. d) Hepsi. olabilir? c) Verilerin d) Hepsi

SQL Komutları (2) Uzm. Murat YAZICI

SQL veri tabalarına erişmek ve onları kullanmak için geliştirilmiş bir lisandır.

SQL Stored Procedure

Veri Tabanı SQL Server ve Management Studio kurulum linkleri:

Bir çeşit prosedür. Ancak bu prosedür kendiliğinden çalışır. Çalışması için tabloya veri eklemek, veri silmek, veri değiştirmek yeterlidir.

PostgreSQL ve PL/pgSQL

MT487_2005guz_final_cevaplar (cevaplar vurgulu ve koyu yazılmıştır)

BLG4134 Görsel Programlama III. Öğr. Grv. Aybike ŞİMŞEK

TRIGGER. Trigger lar, tablo üzerinde tanımlanabilen ve bu tablo üzerinde bir işlem gerçekleştiğinde tetiklenen programlama ögeleridir.

SQL TRIGGERS (Tetikleyiciler)

PostgreSQL ve PL/pgSQL

2- Total de 8000 byte yer tutup 4000 karakter olarak kullanabildiğimiz tip aşağıdakilerden hangisidir?

1. Araçların tüm bilgilerini ve bağlı oldukları kiralama noktasının adres ve telefonunu içeren tam listesi:

T.C GAZİ ÜNİVERSİTESİ BİLİŞİM ENSTİTÜSÜ YÖNETİM BİLİŞİM SİSTEMLERİ ANA BİLİM DALI MS SQL KOMUTLARI VE MS SQL KOMUTLARI İLE İLGİLİ UYGULAMALAR

T-SQL NEDİR? Microsoft T-SQL Transact-SQL

Veritabanına Uygulanması

-- işareti tek satırlık açıklamalarda kullanılır. Açıklama olarak yazılan satırın önüne konulması yeterlidir.

SORGULAR. Öğr.Gör.Volkan Altıntaş

Yukarıdakilerden hangileri DML (Data Manipulation Language) ile gerçekleştirilir?

Mysql Veritabanı Komutları

VERİ TABANI YÖNETİM SİSTEMLERİ II. 5. SQL PROGRAMLAMADA CURSOR (İMLEÇ) ve TRIGGERS (TETİKLEMELER)

Genel Kavramlar. Bilgisayar ortamında işlenebilecek durumda bulunan kayıtlar. Birbiri ile ilişkili veriler topluluğu ve veriler arası ilişkiler

5 SQL- Yapısal Sorgulama Dili. Veritabanı 1

SQL'e Giriş. SELECT Deyimi. SQL Komutları. Yardımcı Deyimler

Data Programming SQL Language. Elbistan Meslek Yüksek Okulu Bahar Yarıyılı

BAYİLERİMİZE ÖZEL. 13 Ağustos İlgili Modül/ler : Genel. İlgili Versiyon/lar : ETA:SQL, ETA:V.8-SQL

DĐNAMĐK ve STATĐK SQL KULLANMANIN PERFORMANSA ETKĐSĐ

YAPISAL SORGULAMA DİLİ (SQL)

VERİ TABANI YÖNETİM SİSTEMLERİ II. 4. SQL PROGRAMLAMADA PROCEDURE ve FUNCTION

20461C Querying Microsoft SQL Server Modül Seviye Belirleme Testi

VERĐTABANI YÖNETĐM SĐSTEMLERĐ

Tetikleyiciler (TRIGGER) Tetikleyiciler ne zaman kullanılırlar. Ardı Sıra Tetikleyiciler (After Triggers) Örnek

Veritabanı sistemlerinde veri bütünlüğünü sağlayabilmek için CONSTRAINTS olarak adlandırılan bazı zorlayıcı ifadeler kullanılabilir.

Veri Tabanı Programlamaya Giriş

Veritabanı Tasarımı COUNT, DISTINCT, NVL

SQL Deyimleri. Öğr.Gör.Volkan ALTINTAŞ Volkanaltintas.com

DML işlemleri. Elbistan Meslek Yüksek Okulu Bahar Yarıyılı May Öğr. Gör. Murat KEÇECĠOĞLU

TEMEL SQL SORGU ÖRNEKLERİ. Yukarıdaki sorguyu yazıp çalıştırdığımızda db_market adında bir veritabanı oluşturulur.

ACCESS PLATFORMUNDA SQL

Veritabanı Tasarımı. Sütun Değerlerini Güncelleme ve Satırları Silme

Nesneler üzerinde değişiklik yapmak için kullanılır. Veri tabanındaki nesnelerin oluşturulabilmesi için CREATE komutu kullanılır.

Üst Düzey Programlama

VERİ TABANI YÖNETİM SİSTEMLERİ II. 3. SQL PROGRAMLAMA BLOKLARI ve AKIŞ DENETİMİ

YAPISAL SORGULAMA DİLİ. BARIŞ ARIBURNU barisariburnu.com

VERİTABANI. SQL (Structured Query Language)

Maltepe Üniversitesi Bilgisayar Mühendisliği Bölümü Veri Tabanı ve Yönetimi (BİL 301)

SELÇUK ÜNİVERSİTESİ BOZKIR MESLEK YÜKSEKOKULU VERİTABANI-II DERSİ FİNAL SINAVI

BÖLÜM- 13: ALT SORGULAR İLE VERİ İŞLEME

Veri Tabanı-I 9.Hafta

08221 Veri Tabanı II. Elbistan Meslek Yüksek Okulu GÜZ Yarıyılı Eki Öğr. Gör. Murat KEÇECĠOĞLU

Tablolar Arası İlşikiler ve Alan Özellikleri Siparis.musteri_no musteri.musteri_no Siparis.urun_kodu musteri.urun_kodu

Tablolar Arası İlşikiler ve Alan Özellikleri. Şekil 1. Magaza veritabanının tabloları ve tablolar arasındaki ilişkiler

BÖLÜM- 8: DİĞER ŞEMA NESNELERİNİ OLUŞTURMA

PostgreSQL Veritabanı Sunucusu. 8.2 neler getiriyor?

TETİKLEYİCİ. Tetikleyici Ne Zaman Kullanılır? Çeşitli amaçlara uygun olarak tetikleyiciler kullanılabilir.

VERİ TABANI YÖNETİM SİSTEMLERİ I

VERİ TABANI ve YÖNETİMİ

1 - Adi A Harfi İle Biten Kişilerin Listesi İçin Hangisi Kullanılmalıdır? Select * From Kisiler Where Adi End A Select * From Kisiler Where Adi Like

BİLİŞİM TEKNOLOJİLERİ

Aşağıdaki tabloyu inceleyin. Sorgulama işlemlerini bu tabloya göre yapacağız.

C#.Net & Linq (Language Integrated Query)

SQL Kod ile Tablo Oluşturma

BÖLÜM- 11: BÜYÜK VERİ KÜMELERİ

Elbistan Meslek Yüksek Okulu GÜZ Yarıyılı. Öğr. Gör. Murat KEÇECĠOĞLU

Elbistan Meslek Yüksek Okulu GÜZ Yarıyılı. Öğr. Gör. Murat KEÇECĠOĞLU

SQL'e Giriş 2. CREATE TABLE tabloadı (kolon isimleri ve veri türleri) (BOLUM_NO NUMBER, BOLUM_ADI CHAR(10));

VİEW (SANAL TABLO) 1. View Nedir? 2. View ler ile Çalışmak 3. View Oluşturmanın Yararları Veri güvenliği; Birim dönüştürmeleri;

Cursor. Bir veri tipi olarak da ele alınabilen Transact-SQL Sunucu Cursor şu aşamalardan geçirilerek kullanılır.

Gruplama (aggregate) fonksiyonları bir dizi değer üzerinde hesaplama yaparlar ve bir sonuç

Aşağıdaki şemaya dikkat edin. Sorgulamalarımızı genellikle bu şemaya göre yapacağız.

SQL e Giriş. Uzm. Murat YAZICI

IN ve NOT IN Tablodaki alan içeriklerine ulaşmak için IN deyimi kullanılır.

//bu ifadelerin ikisi de gerçekleşiyorsa havale işlemi gerçekleşmiştir fakat 1 tanesini çalışmazsa havale olmamıştır.

EBE-368 Veri Tabanı Yönetim Sistemleri İlişkisel Model (The Relational Model)

Veri Tabanı ve Yönetimi

SQL (Structured Query Language) kendisi bir programlama dili olmamasına rağmen bir çok kişi tarafından programlama dili olarak bilinir.

Veri Tabanı II Alt Sorgular

Bu işleçlerin dışında, aşağıda belirtilen karşılaştırma işleçlerinden de yararlanılır.

SQL'e Giriş. SELECT Deyimi. SQL Komutları. 1. DDL (Data Definition Language - Veri Tanımlama Dili)

Transkript:

KULLANICI TANIMLI FONKSİYONLAR Kullanıcı tanımlı fonksiyonlar SQL2000 ile gelen özelliklerden biridir. Fonksiyonlar tek bir değer veya tablo döndürmek için kullanılır. Fonksiyonları veritabanı programlamada nereye koymak gerektiğini anlamak biraz zor olabilir. Bu nedenle, fonksiyonları view ve stored procedurlerle karşılaştıralım. *Dışarıdan parametre alan bir view tanımlamaz. Bu türden ihtiyaçlar için kullanıcı tanımlı fonksiyonlar kullanılır. *Stored procedure leri bir sorgunun parçası olarak kullanamayız. Bir select ifadesi içinde prosedürler bulunamaz ama kullanıcı tanımlı fonksiyonlar bulunabilir. Kullanıcı tanımı fonksiyonlar, tablo gibi, view gibi sorgulanabilir. *Bir tek select ifadesi ile view oluşturamadığımız durumda, kullanıcı tanımlı fonksiyon kullanılır. * Sql serverda bulunmayan, örneğin replace() gibi fonksiyonları tanımlamak için kullanıcı tanımlı fonk. kullanılır. Fonksiyonlar SQL SERVER 2008 Object Explorer ekranında tanımlamış olduğunuz veri tabanı içerisinde Programmability klasörü içerisindeki Function alt klasöründe bulunur. 1

3 çeşit kullanıcı tanımlı fonksiyon vardır. * Scaler değerli (tek değer veren) fonksiyonlar * Tablo döndüren fonksiyonlar * Çok deyimli tablo döndüren fonksiyonlar Scaler değerli kullanıcı tanımlı fonksiyonlar Scaler değerli fonksiyonlar, bir tek değer döndüren fonksiyonlardır. Örnek getdate() bir scaler fonksiyondur, çünkü tek bir değer yani şu anın tarihi ve saatini döndürür. Bazı durumlarda, buna benzer fonksiyonlara ihtiyaç duyulur. Örneğin, bir müşterinin sepetinde kaç ürünün bulunduğu, kaç sipariş verdiğini döndüren fonksiyonlar tanımlanabilir. Genel ifade: CREATE FUNCTION fonksiyonadi(varsaparametreler) RETURNS geridonustipi SQL deyimleri RETURN geridönüşdeğeri 1,2 gibi ay numarası gireceğiz, Ocak, Şubat gibi ay adını veren bir fonksiyon yazınız. Ay değeri 12 den büyük girilirse Tanımsız yazsın. Çözüm CREATE FUNCTION AyAdi(@ay int) RETURNS varchar(20) RETURN( SELECT case @ay WHEN 1 THEN Ocak WHEN 2 THEN Şubat WHEN 3 THEN Mart WHEN 4 THEN Nisan WHEN 5 THEN Mayıs WHEN 6 THEN Haziran WHEN 7 THEN Temmuz WHEN 8 THEN Ağustos 2

) end WHEN 9 THEN Eylül WHEN 10 THEN Ekim WHEN 11 THEN Kasım WHEN 12 THEN Aralık ELSE Tanımsız Müşteri tablosu(musterino,urunno,miktar) Bir müşteri no girildiğinde, bu müşterinin sepetinde toplam kaç ürün olduğunu bulan, bir kullanıcı tanımlı fonksiyon oluşturunuz ve bu fonksiyonu çalıştırınız. Çözüm: CREATE FUNCTION sepeturunsayi(@mno int) RETURNS float RETURN ( SELECT sum(miktar) FROM Sepet WHERE mno=@mno ) Yukarıdaki fonksiyonu çalıştırmak için aşağıdaki sorguyu yazalım -- 1 nolu müşterinin sepetindeki toplam ürün miktari SELECT dbo.sepeturunsayi(1) Yukarıdaki fonksiyonu kullanarak, sepetinde 10 dan fazla ürün bulunan müşterileri listele. SELECT *, dbo.sepeturunsayi(mno) as urunsayi FROM musteri WHERE dbo.sepeturunsayi(mno) >10 Herhangi bir gruba ait müşteri sayısını veren fonksiyon yazınız. (Grup parametre olacak) Çözüm: CREATE FUNCTION MusteriSayisi (@Grup varchar(10)) RETURNS int 3

RETURN (SELECT count(*) FROM musteri WHERE Grubu=@Grup) Her kayıt, farklı bir müşteridir. Kayıt sayısı bize müşteri sayısını verir. Yukarıdaki kodu çalıştırmak için aşağıdaki sorguyu yazalım. -- A grubundaki müşteri sayısı select dbo.musterisayisi('a') -- B grubundaki müşteri sayısı select dbo.musterisayisi('b') Herhangi bir personelin maaşını veren bir fonksiyon oluşturunuz ve bu fonksiyonu çalıştırınız.parametre sicilno olacak CREATE FUNCTION Maas(@sicilno varchar(10)) returns money RETURN (SELECT MA FROM Personel WHERE SicilNo=@sicilno) Go Çalıştırmak SELECT dbo.maas('2053') Parametre müşteri grubu olacak, eğer grubu parametresi değeri NULL olursa tüm müşteri sayısını, NULL değilse verilen gruptaki müşteri sayısını veren bir fonksiyon oluşturunuz. Çözüm: CREATE FUNCTION fnmusterisayisi (@Grubu varchar(10)) RETURNS int DECLARE @sayi int IF @Grubu IS NULL SELECT @sayi=count(*) FROM musteri 4

ELSE SELECT @sayi=count(*) FROM musteri WHERE Grubu=@Grubu RETURN @sayi -- tüm müşteri sayısı SELECT dbo.fnmusterisayisi (NULL) -- A grubundaki müşteri sayısı SELECT dbo.fnmusterisayisi ( A ) -- C grubundaki müşteri sayısı SELECT dbo.fnmusterisayisi ( C ) 5

TABLO DÖNDÜREN FONKSİYONLAR Bu tip fonksiyonlar viewlere çok benzerler. Bir tek select ifadesi içerir. Bu ifadenin sonucunu gösterir. View den farklı olarak dışarıdan parametre alır. Table-valued Function lar, InLine ve MultiLine olmak üzere ikiye ayrılırlar. IN-LINE Parametre alırlar. Üzerinde insert, update ve delete işlemleri yapılabilir. Geriye döndürdüğü tablo tip(kolon sayısı,boyutu vs) olarak, sorgu içerisinde return edilen tablo ile birebir aynıdır. Genel ifade: CREATE FUNCTION fonksiyonadi (varsaparametreler) RETURNS TABLE RETURN Select ifadesi Tüm müşterileri listeleyen fonksiyon oluşturunuz ve bu fonksiyonu sorgulayınız. CREATE FUNCTION fnmusteri () RETURNS TABLE RETURN select * from musteri Sorgulayalım. SELECT * FROM dbo.fnmusteri() Yukarıdaki fonksiyondan faydalanarak A ve C grubundaki müşterileri ayrı ayrı listeleyiniz. -- fnmusteri fonksiyonundan A ve C grubundaki müşteriler SELECT * FROM fnmusteri() WHERE Grubu= A SELECT * FROM fnmusteri() WHERE Grubu= C 6

Yukarıdaki fonksiyona grubu parametresi tanımlayınız ve A ve C grubundaki müşterileri listeleyiniz. -- fonksiyona parametre tanımlayalım ALTER FUNCTION fnmusteri (@grubu varchar(10)) RETURNS TABLE RETURN select * from musteri where grubu=@grubu -- A grubundaki müşteriler SELECT * FROM fnmusteri('a') -- C grubundaki müşteriler SELECT * FROM fnmusteri('c') MULTI-LINE Returns kısmında TABLE yazmak yerine, manuel olarak tablo oluşturup, sonuçları bu tabloya insert etmeye yarayan fonksiyonlardır. Yukarıdaki aynı örneği multi-line function ile yapalım. Buradaki fark; geri dönecek olan tabloyu manuel olarak set edebilmemizdir. 7

Yukarıda Scalar-Valued fonksiyonlarda oluşturmuş olduğumuz SEPET tablo yapısını kullanarak göndermiş olduğumuz grup adına göre istediğimiz alanları görüntüleyecek fonksiyon aşağıdaki gibidir. create function fngrubu (@grup varchar(5)) RETURNS @TABLO TABLE ( mno int, urunkodu int, miktar int, grubu varchar(5) ) INSERT INTO @TABLO SELECT * FROM siparis WHERE grubu=@grup RETURN Çalıştırılması: SELECT * FROM fngrubu('b') Aldığımız sonuç in-line fonksiyon ile aynı. Ancak orada, sonuç kümesindeki kolon sayısı orijinal tablodaki kolan sayısı ile aynıdır. 8

Eğer istenilen kolonlar alınmak istenirse fonksiyon aşağıdaki gibi değiştirilmelidir. alter function fngrubu (@grup varchar(5)) RETURNS @TABLO TABLE ( mno int, urunkodu int, miktar int ) INSERT INTO @TABLO SELECT mno, urunkodu, miktar FROM siparis WHERE grubu=@grup RETURN Çalıştırılması: SELECT * FROM fngrubu('b') 9