3-4- ish. Mavzu. Funktsiyalar va saqlangan protseduralarni yaratish, o'zgartirish, qo'llash va o'chirish (10 balli)


Saqlangan protseduralardagi ajratgichlar



Download 50,68 Kb.
bet6/12
Sana14.07.2022
Hajmi50,68 Kb.
#799422
1   2   3   4   5   6   7   8   9   ...   12
Bog'liq
1648880083 (1)

Saqlangan protseduralardagi ajratgichlar
E'tibor bering, protsedura ichidagi bayonot nuqta-vergul (;) bilan tugaydi. Ma’lumki, nuqta-vergul SQLda standart buyruq ajratuvchisi – bu buyruq matni to‘liq kiritilganligi va uni qayta ishlashni boshlash zarurligi to‘g‘risida SQL tarjimoniga signaldir. SP o'rtasida nuqta-vergulni aniqlaganida, SQL tarjimoni buyruq to'liq kiritilgan deb hisoblab, saqlangan protseduraning bir qismini bajarishga harakat qilishi mumkinmi? Bu taxmin mantiqiy. Haqiqatan ham, agar siz yuqoridagi misolni yozish uchun fayl yaratsangiz, ma'lumotlar bazasidan ulanish buyrug'ini qo'shsangiz va ushbu SQL skriptini isql tarjimoni yordamida bajarishga harakat qilsangiz, tarjimonning fikriga ko'ra, kutilmagan bilan bog'liq xatolik qaytariladi. saqlangan protsedurani yaratish buyrug'ini bajarish. Agar siz SQL skript fayllaridan foydalangan holda, maxsus InterBase ishlab chiquvchi vositalaridan foydalanmasdan saqlangan protseduralarni yaratsangiz, u holda har bir CP yaratish buyrug'idan oldin (xuddi shu narsa triggerlar uchun ham amal qiladi), skript buyrug'ini ajratuvchini nuqta-verguldan boshqa belgiga o'zgartiring va HP matnidan keyin tiklash uchun. qaytar. SQL bayonot ajratuvchisini o'zgartiruvchi isql buyrug'i quyidagicha ko'rinadi:
MUDDATNI SO‘YING
Saqlangan protsedurani yaratishning odatiy holati uchun u quyidagicha ko'rinadi:
MUDDAT ^;
PROCEDURE YARATING some_procedure
... . .
OXIRI
^
MUDDATNI O'rnatish; ^
Saqlangan protsedura chaqiruvi
Ammo bizning saqlangan protseduramizga qayting. Endi u yaratilgan, siz uni qandaydir tarzda chaqirishingiz, unga parametrlarni topshirishingiz va qaytarilgan natijalarni olishingiz kerak. Buni qilish juda oson - siz faqat quyidagi shakldagi SQL so'rovini yozishingiz kerak:
TANLASH *
FROM Sp_add (181.35, 23.09)
Bu so'rov bizga 181.35 va 23.09, ya'ni 204.44 raqamlari yig'indisini o'z ichiga olgan faqat bitta Natija maydonini o'z ichiga olgan bitta qatorni qaytaradi.
Shunday qilib, bizning protseduramiz an'anaviy tarzda ishlatilishi mumkin SQL so'rovlari kabi bajarilgan mijoz dasturlari, va boshqa HP yoki triggerlarda. Bizning protseduramizdan bu tarzda foydalanish saqlanadigan protsedura oxirida TO'KTIRISH buyrug'idan foydalanish orqali mumkin bo'ldi.
Gap shundaki, InterBase-da (va uning barcha klonlarida) ikki xil saqlanadigan protseduralar mavjud: tanlangan protseduralar va bajariladigan protseduralar. Ushbu ikki turdagi SP ning ishlashidagi farq shundaki, olish protseduralari odatda ma'lumotlar to'plami shaklida bo'lgan satr bo'yicha guruhlangan chiqish parametrlarining ko'p to'plamini qaytaradi va bajarilgan protseduralar parametrlarni umuman qaytarmasligi mumkin yoki faqat bitta chiqish parametrlari toʻplamini qaytaring. Qaytishlar roʻyxatida keltirilgan, bu erda parametrlarning bir qatori. Tanlangan protseduralar SELECT so'rovlarida, bajariladigan protseduralar esa EXECUTE PROCEDURE buyrug'i yordamida chaqiriladi.
Har ikki turdagi saqlanadigan protseduralar bir xil yaratish sintaksisiga ega va rasmiy ravishda farq qilmaydi, shuning uchun har qanday bajariladigan protsedurani SELECT so'rovida chaqirish mumkin va har qanday tanlash protsedurasini EXECUTE PROCEDURE yordamida chaqirish mumkin. Savol shundaki, HP qachon o'zini qanday tutadi turli xil turlari qo'ng'iroq qiling. Boshqacha qilib aytganda, farq qo'ng'iroqning ma'lum bir turi uchun protsedurani loyihalashda yotadi. Ya'ni, tanlash protsedurasi SELECT so'rovidan chaqirish uchun maxsus yaratilgan va bajariladigan protsedura EXECUTE PROCEDURE yordamida chaqirish uchun maxsus yaratilgan. Keling, ushbu ikki turdagi HP dizaynidagi farqlarni ko'rib chiqaylik.
Namuna olish jarayoni qanday ishlashini tushunish uchun siz nazariyaga biroz chuqurroq kirishingiz kerak. Keling, SELECT ID, NAME FROM Table_example kabi odatiy SQL so'rovini tasavvur qilaylik. Uning bajarilishi natijasida biz ikkita ustundan (ID va NAME) va ma'lum qatorlar sonidan (Jadval_misol jadvalidagi qatorlar soniga teng) iborat jadvalni olamiz. Ushbu so'rov natijasida qaytarilgan jadval SQL ma'lumotlar to'plami deb ham ataladi. Keling, ushbu so'rovni bajarish jarayonida ma'lumotlar to'plami qanday shakllanganligi haqida o'ylab ko'raylik.Server so'rovni qabul qilib, qaysi jadvallarga tegishli ekanligini aniqlaydi, keyin qaysi kichik to'plamni topadi. Ushbu jadvallardagi yozuvlar so'rov natijasiga kiritilishi kerak ... Keyinchalik, server so'rov natijalarini qondiradigan har bir yozuvni o'qiydi, undan kerakli maydonlarni tanlaydi (bizning holatlarimizda bu ID va NAME) va ularni mijozga yuboradi. Keyin jarayon yana takrorlanadi - va har bir tanlangan yozuv uchun.
Bularning barchasi aziz o'quvchi barcha SQL ma'lumotlar to'plamlari, shu jumladan saqlangan protseduralar qatorida shakllantirilishini tushunishi uchun kerak! Va olib kelish protseduralari va bajariladigan protseduralar o'rtasidagi asosiy farq shundaki, birinchisi ko'p qatorlarni qaytarish uchun mo'ljallangan, ikkinchisi esa faqat bitta. Shuning uchun ular turli usullarda qo'llaniladi: SELECT buyrug'i yordamida tanlash protsedurasi chaqiriladi, bu protseduradan qaytib kelishi mumkin bo'lgan barcha yozuvlarni berishni "talab qiladi". Bajariladigan protsedura EXECUTE PROCEDURE yordamida chaqiriladi, u CP dan faqat bitta satrni "olib tashlaydi" va qolganlarini e'tiborsiz qoldiradi (hatto ular mavjud bo'lsa ham!).
Keling, buni aniqroq qilish uchun olib kelish protsedurasining misolini ko'rib chiqaylik. Kechirimli bo'lish uchun keling, xuddi SELECT ID, NAME FROM Table_Example so'roviga o'xshab ishlaydigan saqlangan protsedura yarataylik, ya'ni u faqat ID va NAME maydonlarini butun jadvaldan oladi. Mana bu misol:
PROSEDURI YARATING Simple_Select_SP
QAYTISHLAR (
procID INTEGER,
procNAME VARCHAR (80)
AS
BOSHLASH UCHUN identifikatorni tanlang, jadval_misolidan NAME
INTO: procID,: procNAME
QILING BOSHLASH
TO'XTIRISH;
OXIRI
OXIRI
Keling, Simple_Select_SP deb nomlangan ushbu tartibning bosqichlarini ko'rib chiqaylik. Ko'rib turganingizdek, u kirish parametrlariga ega emas va ikkita chiqish parametriga ega - ID va NAME. Eng qiziqarli narsa, albatta, protsedura tanasida yotadi. FOR SELECT konstruksiyasi bu erda ishlatiladi:
UCHUN
identifikatorni tanlang, jadval_misolidan NAME
INTO: procID,: procNAME
QILING
BOSHLASH
/ * procID va procName o'zgaruvchilari bilan biror narsa qiling * /
OXIRI
Ushbu kod qismi quyidagilarni anglatadi: Table_example dan tanlangan har bir qator uchun tanlangan qiymatlarni procID va procName o'zgaruvchilariga qo'ying va keyin ushbu o'zgaruvchilar bilan ba'zi amallarni bajaring.
Siz hayron bo'lib, so'rashingiz mumkin: "O'zgaruvchilar? Yana qanday o'zgaruvchilar? 9" Ushbu bobda biz saqlangan protseduralarda o'zgaruvchilardan foydalanishimiz ajablanarli. XPS tilida siz o'zingizning mahalliy o'zgaruvchilaringizni protsedura ichida e'lon qilishingiz yoki o'zgaruvchilar sifatida kirish va chiqish parametrlaridan foydalanishingiz mumkin.
Saqlangan protsedurada mahalliy o'zgaruvchini e'lon qilish uchun siz uning tavsifini AS kalit so'zidan keyin va birinchi BEGIN so'zidan oldin joylashtirishingiz kerak. Lokal o'zgaruvchining tavsifi quyidagicha ko'rinadi:
O‘ZGARCHINI E’lon qilish ;
Masalan, Mylnt mahalliy o'zgaruvchisini e'lon qilish uchun AS va BEGIN orasiga quyidagi tavsifni kiriting.
VARIABLE E'lon qilish Mylnt INTEGER;
Bizning misolimizdagi o'zgaruvchilar ikki nuqta bilan boshlanadi. Bu ularga SQL FOR SELECT iborasida havola qilinganligi sababli amalga oshiriladi, shuning uchun SELECTda ishlatiladigan jadvallardagi maydonlarni va o'zgaruvchilarni farqlash uchun oxirgi ikki nuqtadan oldin qo'yishingiz kerak. Axir, o'zgaruvchilar jadvallardagi maydonlar bilan bir xil nomga ega bo'lishi mumkin!
Lekin o'zgaruvchi nomi oldidagi ikki nuqta faqat SQL so'rovlarida ishlatilishi kerak. Matnlardan tashqari, o'zgaruvchiga kirish ikki nuqtasiz amalga oshiriladi, masalan:
procName = "Ba'zi nomlar";
Ammo protseduramizning tanasiga qayting. FOR SELECT bandi ma'lumotlarni jadval ko'rinishida emas - ma'lumotlar to'plamini qaytaradi, lekin bir vaqtning o'zida bitta satr. Har bir qaytarilgan maydon o'z o'zgaruvchisiga joylashtirilishi kerak: ID => procID, NAME => procName. DO qismida bu o'zgaruvchilar qo'ng'iroq qilgan mijozga yuboriladi) procedure> p> to'xtatib turish buyrug'i yordamida
Shunday qilib, FOR SELECT ... DO buyrug'i buyruqning SELECT qismida tanlangan yozuvlar bo'ylab aylanadi. DO qismi tomonidan tuzilgan siklning tanasida keyingi hosil qilingan yozuv mijozga SUSPEND buyrug'i yordamida uzatiladi.
Shunday qilib, olib kelish protsedurasi bir yoki bir nechta satrlarni qaytarish uchun mo'ljallangan, buning uchun SP tanasi ichida hosil bo'lgan o'zgaruvchan parametrlarni to'ldiradigan tsikl tashkil etilgan. Va bu sikl tanasining oxirida har doim mijozga keyingi ma'lumotlar qatorini qaytaradigan TO'XTIRISh buyrug'i mavjud.

Download 50,68 Kb.

Do'stlaringiz bilan baham:
1   2   3   4   5   6   7   8   9   ...   12




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©hozir.org 2024
ma'muriyatiga murojaat qiling

kiriting | ro'yxatdan o'tish
    Bosh sahifa
юртда тантана
Боғда битган
Бугун юртда
Эшитганлар жилманглар
Эшитмадим деманглар
битган бодомлар
Yangiariq tumani
qitish marakazi
Raqamli texnologiyalar
ilishida muhokamadan
tasdiqqa tavsiya
tavsiya etilgan
iqtisodiyot kafedrasi
steiermarkischen landesregierung
asarlaringizni yuboring
o'zingizning asarlaringizni
Iltimos faqat
faqat o'zingizning
steierm rkischen
landesregierung fachabteilung
rkischen landesregierung
hamshira loyihasi
loyihasi mavsum
faolyatining oqibatlari
asosiy adabiyotlar
fakulteti ahborot
ahborot havfsizligi
havfsizligi kafedrasi
fanidan bo’yicha
fakulteti iqtisodiyot
boshqaruv fakulteti
chiqarishda boshqaruv
ishlab chiqarishda
iqtisodiyot fakultet
multiservis tarmoqlari
fanidan asosiy
Uzbek fanidan
mavzulari potok
asosidagi multiservis
'aliyyil a'ziym
billahil 'aliyyil
illaa billahil
quvvata illaa
falah' deganida
Kompyuter savodxonligi
bo’yicha mustaqil
'alal falah'
Hayya 'alal
'alas soloh
Hayya 'alas
mavsum boyicha


yuklab olish