Saqlanuvchi protsedura (stored procedure) – bu ixtiyoriy hajmdagi kompilyastiyalangan SQL tilidagi dastur bo’lib, boshqa ob’ektlar bilan birgalikda ma’lumotlar bazasida saqlanadi. Saqlanuvchi protsedura ma’lumotlar bazasi bilan ishlaydigan dastur jihatidan serverda bajariladigan qism dastur hisoblanadi. Ma’lumotlar bazasi jihatidan Mbda yaratiladigan va saqlanadigan obyekt hisoblanadi. Ularga mijoz dasturlari orqali murojaat qilinadi. Bunda bitta protsedura yuzlab mijozlar tomonidan chaqirilishi mumkin. Saqlanuvchi protseduralar Saqlanuvchi protsedura Saqlanuvchi protseduralar ikkita asosiy turga bo’linadi: - tanlash protseduralari (select procedure)
Tanlash protsedurasi SELECT operatorida jadval o’rnida ishlatiladi va ma’lumotlar to’plamini ifodalaydi. - bajariluvchi protseduralar (executable procedure).
Bajariluvchi protsedura uchun bu narsa shart emas. Saqlanuvchi protseduralar CREATE PROCEDURE buyrug’i yordamida yaratiladi va DROP PROCEDURE buyrug’i yordamida o’chiriladi. Tanlash protseduralari Staff .gdb ma’lumotlar bazasida bo’yso’nuvchi bo’limlar ro’yxatini hosil qiluvchi protsedurani yaratamiz. Bu yerda, korxona ierarxik strukturali bo’limlarga ega. DEPS jadvalining ParentDeptID maydonida tegishli bo’limning identifkatori ko’rsatiladi. Agar tegishli bo’lim mavjud bo’lmasa, bo’lim ierarxiyaning yuqorisida bo’ladi va ParentDeptID maydoniga 0 qiymati kiritiladi. SET TERM ^ ; CREATE PROCEDURE ChildDeptsList (pDeptID integer) RETURNS (rDeptFullName varchar(100)) AS BEGIN WHERE ParentDeptiD =:pDeptID INTO :rDeptFullName DO SUSPEND; END Tanlash protseduralari Bu protsedurada yuqori bo’limning identifikatori bo’lgan pDeptiD parametr uzatiladi va natija sifatida bo’yso’nuvchi korxonalar ro’yxati qaytariladi. Tanlash protsedurasida qaytariluvchi ma’lumotlar RETURNS kalit so’zi orqali aniqlanadi. Kiritiluvchi parametrlar esa protsedura nomidan keyin yoziladi. Natijaviy qatorni hosil qilish uchun FOR SELECT . . . DO konstrukstiyasi ishlatiladi. SUSPEND buyrug’i keyingi so’rovgacha protsedurani to’xtatadi. To’xtashdan oldin natija chiqariladi. Bajariluvchi prostedurlar Bajariluvchi protseduralarda RETURNS operatori ishlatilmasligi mumkin. Xodim haqidagi ma’lumotlarni o’chirish protsedurasini tuzamiz. SET TERM ^ ; CREATE PROCEDURE DeleteEmp (pEmpID integer) AS BEGIN WHERE ID = :pEmpID; END Aralash protseduralar Ba’zi hollarda protseduralarni ham tanlash ham bajariluvchi sifatida ishlatish mumkin. Misol sifatida oylik ish haqini hisoblash prosedurasini olaylik. MS SQL Serverda ushbu prosedura quyidagicha bo’ladi: USE [bh] GO SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO Aralash protseduralar ALTER PROCEDURE [dbo].[hisobla] @oy int , @yil int , @tabelnomerr int, @BulimID int AS declare @xodimlarID int, @i int,@lavozim int,@ishhajmi int ,@ishhajmi1 int ,@ishkuni int,@kasalkuni int,@tatilkuni int,@safarkuni int,@oklad102 float,@tabelnomer int,@PK int select @ishkuni=ishkuni from ishkunlarish where oy=@oy and yil=@yil begin raiserror('Ушбу ой учун тўлик иш кунлари киритилмаган.',16,1) end if @tabelnomerr=0 begin select @i=count(*) from tabellarsh where oy=@oy and yil=@yil and (xodimlarID in(select XodimlarID from XodimlarLavozimlari where XodimlarLavozimlari.BulimlarID=@BulimID)) end else Aralash protseduralar begin select @i=count(*) from tabellarsh where oy=@oy and yil=@yil and tabelnomer=@tabelnomerr end declare @imtiyoz float set @imtiyoz=0 while @i!=0 begin if @tabelnomerr=0 begin select tabelnomer,lavozim,ishhajmi,kasallik,tatil,xizmatsafar,oy,yil,xodimlarID from tabellarsh where oy=@oy and yil=@yil and (xodimlarID in(select XodimlarID from XodimlarLavozimlari where XodimlarLavozimlari.BulimlarID=@BulimID)) OPEN acursor FETCH RELATIVE @i FROM acursor into @tabelnomer,@lavozim,@ishhajmi1,@kasalkuni,@tatilkuni,@safarkuni,@oy,@yil,@xodimlarID CLOSE acursor DEALLOCATE acursor end Aralash protseduralar else begin DECLARE acursor SCROLL CURSOR FOR select tabelnomer,lavozim,ishhajmi,kasallik,tatil,xizmatsafar,oy,yil,xodimlarID from tabellarsh where oy=@oy and yil=@yil and tabelnomer=@tabelnomerr OPEN acursor FETCH RELATIVE @i FROM acursor into @tabelnomer,@lavozim,@ishhajmi1,@kasalkuni,@tatilkuni,@safarkuni,@oy,@yil,@xodimlarID CLOSE acursor DEALLOCATE acursor end set @i=@i-1 exec nachisleniyalavozim @tabelnomer,@lavozim,@oy,@yil ……………………………………………………………………………………………. va hokazo.
Do'stlaringiz bilan baham: |