MySQL'de depolanan işlevler, bir SQL sorgusundan alınan ve ortak görevler veya iş kuralları olan kayıtlar ve veri alanları ile hesaplamaları veya işlemleri kapsüllemek için kullanılır.
Büyük bir avantaj, yeniden kullanılabilir olmaları ve işlevlerin geliştirildiği programlama dilinin SQL ifadeleri ve koşullu veya tekrarlayan yapılar aracılığıyla olmasıdır.
Saklı yordamın aksine, koşullu kurallar oluşturmanıza izin veren bir ifade kullandığınız SQL deyimlerinde saklı bir işlev kullanabilirsiniz.
Bir okulun veritabanını oluşturduğumuz bir örnek görelim:
VERİTABANI OLUŞTUR 'kolej'Sonra öğrenci test puanlarıyla bir tablo oluşturuyoruz
- - `examnotes` tablosu için tablo yapısı - CREATE TABLE` sınav notları` (`id` INT (11) NOT NULL AUTO_INCREMENT,` idalumno` INT (11) NOT NULL, `material id` INT (11) NOT NULL, `note1 ` DECIMAL (10,2) NULL DEĞİL,` note2` DECIMAL (10,2) NULL DEĞİL, `note3` DECIMAL (10,2) NULL DEĞİL, `ortalama` DECIMAL (10,2) NULL DEĞİL, `state' VARCHAR (100) NULL DEFAULT NULL, BİRİNCİL ANAHTAR (` id`)) COLLATE = 'latin1_swedish_ci' MOTOR = InnoDB - `notaseams` tablosunun dizinleri - ALTER TABLE` notasetest` ADD PRIMARY KEY (`id` ); Daha sonra, sınav notları tablosuna bazı veriler ekliyoruz - `notasensam` INSERT INTO` notasyon sınavı` tablosu için veri dökümü (`id`,` idalumno`, `subjectid`,`note1`, `note2`,`note3`,` ortalama`,` durum`) DEĞERLER (1, 1000, 1, '8.00', '9.25', '7.00', '0.00', ''), (2, 1001, 1, '6.33', '8.50' , '8.00', '0.00', ''), (3, 1002, 1, '10.00 ',' 7.50 ',' 8.33 ',' 0.00 ',' '), (4, 1003, 2,' 4.50 ' , '2.00', '5.50', '0.00', ''), (5, 1004, 1, '3.50', '2.00', '4.00', '0.00', '');
Daha sonra, tüm not tablosunu gözden geçirecek ve her öğrencinin konuya göre ortalama notunu hesaplayacak ve tablonun Geçti mi Kaldı mı olduğunu gösterecek şekilde güncelleyecek kayıtlı bir fonksiyon oluşturacağız.
İşlevi Phpmyadmin'den veya SQL kodu yazmamıza izin veren herhangi bir düzenleyiciden oluşturabiliriz;
CREATE DEFINER = `root` @` localhost` PROSEDÜR `ortalama hesapla` () DİL SQL DETERMİNİSTİK DEĞİL SQL SQL GÜVENLİK TANIMLAYICI AÇIKLAMASI İÇERİR '' BEGIN / * İşlev için değişkenler bildiririm * / DECLARE final BOOL DEFAULT FALSE; DECLARE kimliği INT; DECLARE INT öğrencisi; DECLARE INT meselesi; DECLARE note1 FLOAT; DECLARE note2 FLOAT; DECLARE note3 FLOAT; BİLDİRİM balo FLOAT; / * sql sorgusundan gelen verilerle bir kayıt kümesi veya imleç bildiriyorum * / DECLARE rslist CURSOR FOR SELECT id, öğrenci kimliği, malzeme kimliği, not1, not2, not3 test notlarından; / * Yinelenen bir döngünün sonunu algılamak için bir değişken bildiriyorum DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET final = TRUE; / * Veri geçişini bir döngü ile başlatmak için kayıt kümesini açıyorum * / OPEN rslista; döngü: LOOP FETCH rslist INTO id, öğrenci, konu, sınıf1, sınıf2, sınıf3; / * Ortalamayı hesaplıyorum * / ortalamayı ayarla = (not1 + not2 + not3) / 3; / * Tabloyu güncelleyerek kaydediyorum * / sınav notasyon seti ortalamasını güncelle = d burada idalumno = öğrenci ve idmateria = konu; / * Not 7'den büyük veya 7'ye eşitse, durumu Onaylandı olarak güncellerim, aksi takdirde durum Başarısız olur * / EĞER av> = 7 SONRA güncelleme notaseams set status = 'Onaylandı' burada idalumno = öğrenci ve idmateria = konu; ELSE güncelleme sınavı notasyon seti durumu = 'Başarısız' burada öğrenci kimliği = öğrenci ve konu kimliği = konu; EĞER SON; IF finalSONRA KAPAT rslist; AYRILMA döngüsü; EĞER SON; SON DÖNGÜ; SONArdından aşağıdaki komutu kullanarak işlevi çalıştırabiliriz:
CALL `ortalamayı hesapla` ()Sonuç, ortalama ve durum sütunlarının otomatik olarak güncellenmesi olacaktır.
MySQL'de depolanan işlevler normalde hesaplamalar ve işlemler için kullanılırken, saklı prosedürler normalde iş kurallarını yürütmek için kullanılır.
Fonksiyonlar genellikle veritabanının yapısını etkilemez, ancak bazı hesaplamalar yapmak, karşılaştırmak ve bir sonuç döndürmek veya veritabanındaki bir tablodaki bir veriyi değiştirmek için, bir fonksiyonun yaptığı değişiklikleri kontrol etmek veya denetlemek için bir tetikleyici de oluşturabiliriz.
Bu Eğitimi beğendiniz ve yardım ettiniz mi?Yazara olumlu puan vermek için bu düğmeye basarak yazarı ödüllendirebilirsiniz.