Stored procedure — ma’lumotlar bazasi serverida nom bilan saqlanadigan va chaqirilganda server ichida bajariladigan buyruqlar to‘plami. U SQL so‘rovlari, parametrlar, shartlar, sikllar, xato qayta ishlash va transaction boshqaruvini bir operatsion birlikka birlashtirishi mumkin. Imkoniyat va sintaksis database management systemga bog‘liq.
Tuzilishi
Procedure odatda input, output yoki input-output parametrlarini e’lon qiladi. Tana ichida jadvaldan o‘qish, yozish va local variable bilan hisoblash bajariladi. Quyidagi umumiy ko‘rinish muayyan DBMS sintaksisini aynan takrorlamaydi:
CREATE PROCEDURE transfer_funds(
IN source_id BIGINT,
IN target_id BIGINT,
IN amount DECIMAL(18,2)
)
BEGIN
-- balansni tekshirish va ikki yozuvni transactionda yangilash
END;
Procedure functiondan farqli ravishda faqat bitta expression qiymatini qaytarish bilan cheklanmasligi mumkin. U result set, bir nechta output parametr yoki status code qaytaradi. Ayrim DBMSlarda function query ichida chaqiriladi, procedure esa alohida CALL yoki EXEC orqali ishga tushadi.
Server ichida bajarilish
Bir nechta ketma-ket so‘rovni bitta procedure chaqirig‘iga birlashtirish application va database orasidagi network round-triplarni kamaytirishi mumkin. Server query planlarni cache qilishi ham mumkin. Biroq performance avtomatik ravishda yaxshi bo‘lmaydi: noto‘g‘ri join, katta cursor yoki uzoq transaction procedure ichida ham qimmat.
Parameter qiymatiga qarab optimal plan keskin farq qilsa cached plan ayrim chaqiriqlarda sust ishlashi mumkin. Bu hodisa ko‘pincha parameter sniffing bilan bog‘lanadi. Statistikalar, recompile yoki queryni qayta tuzish DBMS xususiyatiga qarab qo‘llanadi.
Transaction va xatolar
Procedure mavjud transaction ichida chaqirilishi yoki o‘zi transaction boshlashi mumkin. Nested transaction atamasi har DBMSda bir xil semantikaga ega emas. Xato yuz berganda qaysi statement rollback bo‘lishi, butun transaction abort bo‘lishi va exception callerga qanday qaytishi aniq loyihalanadi.
Pul o‘tkazish kabi invariantli amal bir transactionda bajarilsa oraliq yarim holat boshqa transactionga ko‘rinmaydi. Shu bilan birga, uzoq davom etuvchi procedure locklarni ushlab turib contention va deadlock ehtimolini oshiradi.
Ruxsat modeli
Foydalanuvchiga jadvalga bevosita yozish huquqi bermasdan, faqat tasdiqlangan procedure’ni bajarish huquqi berilishi mumkin. Procedure owner yoki caller kontekstida ishlashi DBMS sozlamasiga bog‘liq. Dynamic SQL noto‘g‘ri birlashtirilsa procedure chegarasi SQL injectiondan himoya qilmaydi; qiymatlar bind parameter orqali uzatiladi va obyekt nomlari allowlist bilan tekshiriladi.
Procedure ichida maxfiy ma’lumot qaytarilmasligi, row-level security chetlab o‘tilmasligi va audit caller identity’ni saqlashi zarur. Elevated privilege bilan yozilgan routine kichik va tekshiriladigan bo‘ladi.
Versiyalash va bog‘liqlik
Stored procedure application kodi kabi source control va migration orqali boshqariladi. Jadval yoki ustun nomi o‘zgarsa routine dependency’si buzilishi mumkin. Deploy tartibi eski va yangi application versiyalari bir muddat parallel ishlashini hisobga oladi; avval backward-compatible schema va procedure, keyin clientlar yangilanadi.
Unit va integration test normal qiymatlar bilan birga NULL, limit, permission error, concurrency va rollback holatlarini tekshiradi. Observability chaqiruv soni, davomiylik, lock wait va xatolarni procedure nomi bo‘yicha ajratadi, ammo parameterlarda shaxsiy yoki maxfiy qiymatlarni log qilmaydi.
Portability ham cheklangan: procedural til, exception va temporary table sintaksisi vendorlar orasida farq qiladi. Database ko‘chirilsa routine’lar alohida qayta yozilishi mumkin. Bu stored procedure noto‘g‘ri degani emas; arxitektura serverga yaqin bajarilish foydasini vendor bog‘liqligi bilan ongli ravishda taqqoslaydi.
Bog‘liq tushunchalar
SQL, Database function, Parameter, Transaction, Query plan, Trigger, Dynamic SQL, Database privilege