Basit ifadeyle, Bir dizi SQL deyimi, güçlü işlevler, bazı daha karmaşık mantık işlevlerini gerçekleştirebilir, JAVA dilindeki yönteme benzer;
ps: Depolanan prosedürler, tetikleyicilere biraz benzer, her ikisi de bir SQL kümeleridir, ancak depolanan prosedürler aktif olarak çağrılır ve tetikleyicilerden daha güçlü işlevlere sahiptir.Tetikleyiciler, bir şey tetiklendikten sonra otomatik olarak çağrılır;
1. Dilbilgisi
PROSEDÜR OLUŞTUR sp_name () rutin_body
PROSEDÜR OLUŞTUR yordam adı () yordam gövdesi
DELIMITER // PROSEDÜR OLUŞTURMA myproc (OUT s int) BAŞLA Öğrencilerden COUNT (*) İÇERİĞİ SEÇİN; SON // DELIMITER;MySQL varsayılan olarak sınırlayıcı olarak ";" kullanır. Sınırlayıcı bildirilmezse, derleyici saklı yordamı işleme için bir SQL ifadesi olarak değerlendirir, bu nedenle derleme işlemi bir hata bildirir, bu nedenle geçerli segment sınırlayıcısını önceden "DELIMITER //" ile bildirmeniz gerekir. Derleyicinin iki "//" arasındaki içeriği saklı yordamın kodu olarak görmesine izin verin ve bu kodları çalıştırmasın; "DELIMITER;" ayırıcıyı geri yüklemek anlamına gelir.
2. Parametreler
Depolanan prosedür ihtiyaçlara göre girdi, çıktı, girdi ve çıktı parametrelerine sahip olabilir. Birden fazla parametre varsa, bunları ayırmak için "," kullanın. MySQL saklı yordamının parametreleri, saklı yordamın tanımlanmasında kullanılır.Üç tür parametre vardır, IN, OUT, INOUT:
Bunlar arasında sp_name parametresi, saklı yordamın adıdır; proc_parameter, saklı yordamın parametre listesini temsil eder; karakteristik parametre, saklı yordamın özelliklerini belirtir; rutine_body parametresi, SQL kodunun içeriğidir ve SQL kodunun başlangıcını ve sonunu işaretlemek için BEGIN ... END öğesini kullanabilirsiniz.
İpucu: Bir saklı yordam oluştururken, sistem varsayılan olarak CONTAINS SQL'i belirtir; bu, saklı yordamda SQL ifadelerinin kullanıldığı anlamına gelir. Ancak, saklı yordamda SQL deyimi kullanılmazsa, en iyisi bunu NO SQL olarak ayarlamaktır. Dahası, saklı yordamın YORUM bölümünde saklı yordamı basitçe yorumlamak en iyisidir, böylece gelecekte saklı yordamın kodunu okumak daha uygun olacaktır.
Ardından, num_from_employee adlı bir saklı yordam oluşturun.
Yukarıdaki saklı yordamın adı num_from_employee'dir; giriş değişkeni emp_id'dir; çıktı değişkeni count_num'dur. SELECT ifadesi, d_id değeri emp_id değerine eşit olan kayıtlar için çalışan tablosunu sorgular ve aynı d_id değerine sahip kayıtların sayısını hesaplamak için COUNT (*) kullanır ve son olarak hesaplama sonucunu sayım_sayısında depolar. Sonuçlar aşağıdaki gibidir:
Yürütme tamamlandıktan sonra herhangi bir hata mesajı bildirilmezse bu, depolama işlevinin başarıyla oluşturulmuş olduğu anlamına gelir. Bu saklı yordam daha sonra çağrılabilir ve saklı yordamdaki SQL deyimi veritabanında çalıştırılır.
Not: MySQL'deki varsayılan ifade bitiş karakteri noktalı virgüldür (;). Depolanan yordamdaki SQL deyiminin sona ermesi için noktalı virgül gerekir. Çakışmalardan kaçınmak için, MySQL sonlandırıcısını ayarlamak için önce "DELIMITER" kullanın. Son olarak, sonlandırıcıyı bileşen numarasına geri yüklemek için "DELIMITER;" kullanın. Bu, bir tetikleyici oluştururkenki ile aynıdır.
MySQL'de, depolanmış bir işlev oluşturmanın temel biçimi aşağıdaki gibidir:
FONKSİYON OLUŞTUR sp_name () RETURNS type rutine_bodyBunlar arasında, sp_name parametresi, depolama işlevinin adıdır; func_parameter, depolama işlevinin parametre listesini temsil eder; RETURNS türü, dönüş değerinin türünü belirtir; karakteristik parametre, depolama işlevinin özelliklerini belirtir ve bu parametrenin değeri, depolama işlemindeki değerle aynıdır; Rutine_body parametresi, SQL kodunun içeriğidir ve SQL kodunun başlangıcını ve sonunu işaretlemek için BEGIN ... END öğesini kullanabilirsiniz.
func_parameter, her biri bir parametre adı ve bir parametre türünden oluşan birden çok parametreden oluşabilir ve biçimi aşağıdaki gibidir: param_name type
Bunlar arasında, param_name parametresi, depolama işlevinin parametre adıdır; tür parametresi, MySQL veritabanının herhangi bir veri türü olabilen depolama işlevinin parametre türünü belirtir.
Çalışanın_adından_adında bir depolama işlevi oluşturalım.
Yukarıdaki depolama işlevinin adı çalışan_adından_adıdır; bu işlevin parametresi emp_id'dir ve dönüş değeri VARCHAR tipindedir. SELECT ifadesi, çalışan tablosundaki num değeri emp_id'ye eşit olan kaydı sorgular ve kaydın ad alanının değerini döndürür. Sonuçlar aşağıdaki gibidir:
Sonuç, depolanan işlevin başarıyla oluşturulduğunu gösterir. Bu işlevin kullanımı MySQL dahili işlevleriyle aynıdır.
Depolanan prosedürlerde ve işlevlerde değişkenleri tanımlayabilir ve kullanabilirsiniz. Kullanıcılar, değişkenleri tanımlamak için DECLARE anahtar sözcüğünü kullanabilir. Ardından değişkenlere değerler atayabilirsiniz. Bu değişkenlerin kapsamı BEGIN ... END bloğundadır.
1. Değişkenleri tanımlayın
MySQL'de değişkenleri tanımlamak için DECLARE anahtar sözcüğünü kullanabilirsiniz. Değişkenleri tanımlamak için temel sözdizimi aşağıdaki gibidir:
Var_name türü BİLDİRİNBunlar arasında, DECLARE anahtar sözcüğü değişkenleri bildirmek için kullanılır; var_name parametresi, aynı anda birden çok değişkenin tanımlanabildiği değişkenin adıdır; tür parametresi, değişkenin türünü belirtmek için kullanılır; DEFAULT değer deyimi, değişkenin varsayılan değerini kullanılmayan değere ayarlar DEFAULT yan tümcesinde varsayılan değer NULL'dur.
My_sql değişkeni aşağıda tanımlanmıştır, veri türü INT'dir ve varsayılan değer 10'dur.
My_sql INT DEFAULT 10 BEYAN;2. Değişkenlere değer atayın
MySQL, değişkenlere değer atamak için SET anahtar sözcüğünü kullanabilir. SET ifadesinin temel sözdizimi aşağıdaki gibidir:
SET var_name = ifade ...Bunlar arasında, SET anahtar sözcüğü bir değişkene bir değer atamak için kullanılır; var_name parametresi değişkenin adıdır; ifade parametresi bir atama ifadesidir. Bir SET ifadesi aynı anda birden çok değişkene değer atayabilir ve her değişkenin atama ifadeleri virgülle ayrılmıştır.
Aşağıdaki my_sql değişkeni için 30 değeridir.
SET my_sql = 30;MySQL'de değişkenlere değer atamak için SELECT ... INTO deyimlerini de kullanabilirsiniz. Temel sözdizimi aşağıdaki gibidir:
Tablo_adı WEHRE koşulundan var_adı İÇİNDE sütun_adı SEÇBunlar arasında, col_name parametresi sorgu alanının adını temsil eder; var_name parametresi değişkenin adıdır; table_name parametresi tablonun adını; koşul parametresi ise sorgu koşulunu ifade eder.
Daha sonra, çalışan tablosundan 2 no'lu kaydı sorgulayın ve kaydın d_id değerini my_sql değişkenine atayın.
Çalışan WEHRE'den my_sql'ye d_id SEÇİN id = 2;1. Parametresiz bir saklı yordam oluşturun.
prosedür ürünü oluştur () başla kullanıcıdan * seçin; son;Basit bir saklı yordam oluşturma ifadesi, şu anda çağrılan ifade şudur:
çağrı prosedürü ();2. Parametrelerle saklı bir prosedür oluşturun
Parametreli depolama iki parametre içerir,
Bunlardan biri parametreleri aktarmaktır;
Biri giden parametredir;
Örneğin, bir saklı yordam:
prosedür prosedürü oluşturun2 ( out p1 ondalık (8,2), out p2 ondalık (8,2), p3 int'te ) başla sipariş_adı = p3 olan kullanıcıdan p1'e toplamı (uid) seçin; kullanıcıdan p2'ye avg (uid) seçin; son;Yukarıdaki sql ifadesinden de görülebileceği gibi, p1 ve p2 değeri almak ve iletmek için kullanılır ve p3 bunu çağırarak iletilen belirli bir değere sahip olmalıdır.
Özel arama süreci:
call product (); // Parametre yok
call Proced2 (@ userSum, @ userAvg, 201708); // Parametrelerle
Kullanıldığında, userSum ve userAvg değerlerini doğrudan sorgulayabilirsiniz:
@userSum, @userAvg seçin;
Sonuçlar aşağıdaki gibidir:
3. Depolanan prosedürü silin
Sözdizimi: drop prosedürü_adı;
Daha sonra daha fazla devop ve DBA içeriği paylaşacağım ve ilgilenen arkadaşlar buna dikkat edebilir ~