Ushbu misolda biz FindCourse deb nomlangan funktsiyani o'chirib tashlaymiz.
Protseduralar to’g’risida umumiy tushunchalar.
SQL tilida protseduralardan foydalanish dasturlar tuzish samaradorligini oshiradi. Saqlanuvchi protseduralar (stored protsedure) – bu SQL buyruqlar to’plamidan iborat bo’lib, bu buyruqlar to’plamini SQL SERVER bir marta kompilyatsiya qiladi. Protseduralarning keyingi ishlatilishida saqlangan protseduralar kompilyatsiya qilinmaydi. Bu protseduralar xuddi algoritmik tillardagi kabi kirish parametrlaridan iborat bo’lishi ham mumkin.
Saqlanuvchi protseduralar SQL tilida quyidagi buyruq yordamida yaratiladi:
Saqlanuvchi protseduralarning ikki turi mavjud: foydalanuvchi protseduralari va tizimli protseduralar.
Foydalanuvchi protseduralari SQL SERVERlarida qo’llanilib, serverni boshqarish, MB va foydalanuchilar haqidagi ma’lumotlarni olish uchun ishlatiladi.
Tizimli protseduralar esa, amaliy dasturlarni bajarish uchun yaratiladi. Amaliy dasturlar hech bo’lmaganda bitta modulni o’zida saqlashi kerak. Modul (MODULE) biror bir algoritmik tilda tuzilgan, uzoq muddat saqlanadigan ob’yektdir.
Modul - modul nomidan (module name), algoritmik til bo’limidan (language clause), modul bo’limi huquqidan (module authorization clause ), kursorlarni tavsiflash (declare cursor) va bir yoki bir nechta protsedura (procedure) lardan tashkil topadi.
Modullarni yaratushda quyidagi sintaktik qoidalarga rioya qilish lozim bo’ladi:
Har bir aniqlangan kursorda (cursor declare) hech bo’lmaganda bitta modul (module) va bu modulda hech bo’lmaganda bitta protsedura (protcedure) mavjud bo’lishi kerak, hamda bu protsedura ochish operatori (open statement) va tavsiflashda (cursor declare) e’lon qilinadigan kursor nomini (cursor name) o’zida aks ettishi ozim. Amaliy dastur bittadan ortig modul bilan ishlamasligi kerak.
Protsedura o’z navbatida potsedura nomidan (procedure name), parametrlar tavsifi (parametrs declaration) va hech bo’lmaganda bitta SQL operatoridan (SQL statment) tashkil topadi.
Moduldan tashkil topgan amaliy dastur potseduraga murojaat qilish uchun CALL operatoridan foydalanadi. CALL operatori potsedura nomidan (procedure name), parametr qiymatalri ketma-ketligidan, son va ma’lumotlar turidan iborat. Protseduraga murojaat protsedurada mavjud bo’lgan SQL operatorlarini bajarishni ta’minlaydi.
| Protseduralarni yaratishda quyidagi sintaktik qoidalarga amal qilish lozim:
Protsedura nomi modulda ishtirok etadigan boshqa protsedura nomlaridan
farq qilishi lozim.
Protsedura paramaetrlari ham boshqa protsedura parametrlaridan farq
qilishi lozim.
Har bir parametr nomi (parametr declaration) tavsifida ko’rsatilgan
bo’lishi ozim.
Agar SQL operatoridagi ustun nomi (column names) (parametr declation) tavsifida ko’rsatilgan parametr nomi bilan mos tushsa, bunday ustun nomlari (column specification) oldiga kvalificator (qualifier) qo’yiladi.
Til bo’limida (language clause) modulda ishlatiladifan algoritmik til nomi ko’rsatiladi. Har bir algoritmik tilni ishlatishda o’ziga xos qoidalarga rioya qilishga to’g’ri keladi. Masalan til bo’limida Pascal tili ishlatilsa, unda:
SQLCODE parametrining turi INTEGER bo’lishi kerak;
Har qanday ishlatiladigan ma’lumot turlari (data type) CHAR, INTEGER va REAL bo’lishi talab qilinadi;
Agar (parametrs declaration) tavsifida berilgan parametr turi (data type) INTEGER yoki REAL bo’lsa, shu parametrlarga mos keluvchi i-parametr turi ham INTESER yoki REAL bo’lishi kerak.
Tizimli protseduraga misol keltiramiz. MBdagi detallarni hajm jihatidan katta kichikligiga qarab Detallar jadvalidan izlash lozim bo’lsin. Buni quyidagi rekursiv protsedura yordamida amalga oshiramiz.