SQL Serverda protseduralarni saqlash.

Kontaktlar / topshirish

Golovna

Qo'shimcha funksionallik

MySQL 5 ko'plab yangi funksiyalarga ega, eng muhimlaridan biri saqlangan protseduralarni yaratishdir.

Ushbu darsda men hidlar nima ekanligini, shuningdek, hayotingizni osonlashtiradigan hidlar haqida bilib olaman.

Kirish

  • Jarayon saqlanadi - bu takrorlanadigan harakatlarni inkapsulatsiya qilish usuli.
  • Saqlangan protseduralarda siz o'zgarishlarni ovozli qilishingiz, ma'lumotlar oqimini boshqarishingiz va boshqa dasturlash usullarini amalga oshirishingiz mumkin.
  • Yaratilish sababi aniq va ba'zi faktlar bilan tasdiqlangan.
  • Boshqa tomondan, agar siz ular bilan tartibsiz ishlayotganlar bilan gaplashsangiz, fikrlaringiz ikkita ekstremal qanotga bo'linadi.

Bu haqda unutmang.

  • uchun
  • Boshqa dasturlar bilan mantiq bo'limi.
  • Saqlash protseduralari funksionallikni qamrab oladi;
  • Bu turli dasturlar o'rtasida ma'lumotlarga kirish va boshqarish uchun ulanishni ta'minlaydi.

Mijozlarni ma'lumotlar bazasi jadvaliga ajratish.

Gapirishdan oldin men jadvalning elementar tuzilishini aytib berdim, shunda siz ushbu mavzu bo'yicha osongina harakat qilishingiz mumkin.

Jadvalning katta hajmli tuzilishini tushunishingiz uchun men sizga saqlanadigan protseduralar va katlama hidi haqida ham aytib beraman.

Krok 1: chegaralarni qo'yish

Chegara MySQL mijoziga SQL virusini yozishni tugatganingizni bildirish uchun foydalaniladigan belgi yoki belgilar qatoridir.

Abadiylik uchun biz dog' va koma ramzini ajratamiz.

Tim kam emas, muammolar paydo bo'lishi mumkin, saqlangan protsedura bo'laklari, terisi bir nuqtada tugashi uchun mas'ul bo'lgan bir qator viruslar bo'lishi mumkin.

Ushbu darsda men “//” qatorini chegara sifatida vikorista qilaman.

2-dars: Qanday qilib oldini olish uchun protseduralarni bajarish kerak

Saqlangan protsedurani yaratish

  • CHEGIRLASH // PROSEDURNI YARATISH `p2` () TILI SQL DETERMINISTIC SQL XAVFSIZLIK TA'RIFINI Izoh "Protsedura" BOSHLASH TANLASH "Salom Dunyo!";
  • OXIRI//
  • Kodning birinchi qismi saqlanadigan protsedurani yaratadi.
  • Advance - kerakli parametrlarni o'zgartirish.

Keyin, ism bilan birga, protseduraning o'zi tanasini topasiz.

Saqlangan va registrga sezgir bo'lgan protseduralarni nomlang. Shuningdek, siz yangi nom bilan bir qator protseduralarni yarata olmaysiz. Jarayonning o'rtasida saqlangan ma'lumotlar bazasini o'zi o'zgartirish mumkin emas.

Jarayonning 4 ta xarakteristikasi saqlanib qoladi:

Til: portativlikni ta'minlash uchun til uchun SQL ko'rsatilgan.

Deterministik: chunki protsedura doimiy ravishda bir xil natijani aylantiradi va bir xil parametrlarni qabul qiladi.

Bu replikatsiya va ro'yxatga olish jarayoni uchun.

Yuvish uchun ahamiyati - DETERMINISTIC EMAS.

Bu oddiy buyruq.

IF EXISTS virusi o'ldirishni ushlaydi, chunki bunday protseduralar zarur emas.

Croc 3: Parametrlar

  • Keling, protseduraga saqlangan parametrlarni qanday o'tkazish mumkinligini ko'rib chiqaylik.
  • CREATE PROCEDURE proc1(): bo'sh parametrlar ro'yxati
  • CREATE PROCEDURE proc1 (IN varname DATA-TYPE): bitta kirish parametri.
  • IN so'zi shart emas, shuning uchun ulanishlar uchun parametrlar IN (kirishlar).

CREATE PROCEDURE proc1 (OUT varname DATA-TYPE): aylantirish uchun bitta parametr.

CREATE PROCEDURE proc1 (INOUT varname DATA-TYPE): darhol kiritiladigan va aylantiriladigan bitta parametr.

Tabiiyki, siz turli xil turdagi bir qator parametrlarni o'rnatishingiz mumkin.

Butt parametri IN

CHEGIRLASH // PROSEDUR YARASH `proc_IN` (IN var1 INT) BEGIN SELECT var1 + 2 AS natija;

OXIRI//

Butt parametri OUT

DELIMITER // PROCEDURE YARATISH `proc_OUT` (OUT var1 VARCHAR(100)) BEGIN SET var1 = "Tim ê";

OXIRI //

INOUT parametri butt

CHEGIRLASH // PROSEDUR YARASH `proc_INOUT` (OUT var1 INT) BEGIN SET var1 = var1 * 2;

OXIRI //

Croc 4: O'zgarishlar

Endi men sizga qanday o'zgartirishlar kiritishni va ularni protseduralar o'rtasida saqlashni o'rgataman.

Siz ularni ma'lumotlar turlari bilan birga BEGIN/END blokida aniq ayblashingiz kerak.

O'zgartirish uchun ovoz berganingizdan so'ng, u erda o'zgartirish seanslari, harflar yoki ustun nomlari uchun ovoz berishingiz mumkin.

Ajoyib o'zgarish sintaksisi quyidagicha ko'rinadi:

varname DATA-TYPE DEFAULT standart qiymatni E'lon qiling;

Keling, bir nechta mashhurlarga ovoz beraylik:

a, b INT DEFAULT 5;

CHEGIRLASH // PROSEDURI YARATING `proc_IF` (IN param1 INT) BOSHLASH O'zgaruvchi1 INT;<>SET o'zgaruvchisi1 = param1 + 1;

AGAR o'zgaruvchi1 = 0 bo'lsa, keyin o'zgaruvchi1ni tanlang;

ENDIF; AGAR param1 = 0 bo'lsa, "Parametr qiymati = 0" ni tanlang; BOSHQA TANLASH "Parametr qiymati

0"; END IF; END //

CASE dizayni

CASE - bu fikrni o'zgartirish va maqbul echimni tanlashning yana bir usuli.

Tse

Tashqi usul< param1 DO INSERT INTO table1 VALUES (param1); SELECT COUNT(*) INTO variable2 FROM table1; SET variable1 = variable1 + 1; END WHILE; END //

shaxssizlikni IF konstruktsiyasi bilan almashtiring.

Dizaynni ikkita usulda tasvirlash mumkin, bu ruhiy infektsiyalarni nazorat qilishda moslashuvchanlikni beradi.

CHEGIRLASH // PROSEDURNI YARASH `proc_CASE` (IN param1 INT) BOSHLASH O`zgaruvchi1 INT;

SET o'zgaruvchisi1 = param1 + 1;

CASE o'zgaruvchisi1 QAChON 0 KEYIN 1-jadval QIYMATLARIGA QO'RISH (param1);

QACHON 1 KEYIN 1-jadvalga QIYMATLARNI QO'RISH (o'zgaruvchi1);

Kursorlarda nomuvofiq natijalarga yo'l qo'ymaslik uchun tushunishingiz kerak bo'lgan uchta kuch bor:

  • Sezuvchan emas: bir marta ochilgan kursor keyinroq kiritilgan jadvaldagi o'zgarishlarni ko'rsatmaydi.
  • Aslida MySQL kursorning yangilanishiga kafolat bermaydi, shuning uchun unga ishonmang.
  • O'qish uchun kamroq foydalanish mumkin: kursorlarni o'zgartirib bo'lmaydi.

Orqaga aylantirmasdan: bino kursori faqat bitta yo'nalishda harakatlanadi - oldinga, siz ularni tanlamasdan qatorlarni o'tkazib yubora olmaysiz.

Visnovok

Ushbu darsda men sizni ishning asoslari, amal qilish kerak bo'lgan tartib-qoidalar va u bilan bog'liq har qanday maxsus boshqaruv elementlari bilan tanishtirdim.

Albatta, siz xavfsizlik, SQL tili va optimallashtirish kabi sohalarda bilimga ega bo'lishingiz kerak bo'ladi, birinchi navbatda MySQL protseduralarining ma'lumotnoma gurusi.

Siz o'zingizning maxsus qo'shimchangiz uchun mavjud bo'lgan protseduralarni tanlash imkoniyatini berishning afzalliklariga e'tibor qaratishingiz va keyin keraksiz protseduralarni bajarishingiz kerak. Men Vikorist protsedurasini buyurdim; Menimcha, ular xavfsizlik, kodni saqlash va tashqi dizayn uchun loyihaga kiritilishi kerak.

Bundan tashqari, MySQL protseduralari ustida ish hali ham olib borilayotganligini unutmang.

Funktsionallik va yaxshilanishlarga oid yaxshilanishlarni tekshiring.

Yana bir muhim jihat - mahsuldorlik.

Saqlash tartib-qoidalari quyi, past darajadagi SQL bayonotlari bilan bajarilishi kerak.

Bularning barchasi protsedura kodi birinchi ishga tushirilganda bir marta kompilyatsiya qilinadi va keyin kompilyatsiya qilingan shaklda saqlanadi.

Saqlangan protsedurani yaratish uchun CREATE PROCEDURE yoki CREATE PROC buyrug'idan foydalaning.

Shunday qilib, saqlangan protsedura uchta asosiy xususiyatga ega: kodning soddaligi, xavfsizlik va mahsuldorlik.

Masalan, ma'lumotlar bazasida mahsulotlar haqidagi ma'lumotlarni saqlaydigan jadval mavjud deylik:

CREATE TABLE Mahsulotlar (Id INT IDENTITY PRIMARY KEY, ProductName NVARCHAR(30) NOT NULL, Manufacturer NVARCHAR(20) NOT NULL, ProductCount INT DEFAULT 0, Price MONEY NOT NULL);

Keling, ushbu jadvaldan ma'lumotlarni olish uchun ishlatiladigan protsedurani yarataylik:

USE productsdb;

TANLASH TARTIBINI YARATING. Mahsulot Xulosasini Mahsulot nomi, Ishlab chiqaruvchi, Mahsulotlardan Narx sifatida Tanlang

Joriy paketni tanlash uchun CREATE PROCEDURE buyrug'i kerak bo'lganligi sababli joriy ma'lumotlar bazasini o'rnatuvchi USE buyrug'idan so'ng yangi paketni tanlash uchun GO buyrug'idan foydalaniladi.

Jarayon nomidan keyin AS kalit so'zi bo'lishi mumkin. Skript yechimida protsedura tanasini mustahkamlash uchun protsedura kodi ko'pincha BEGIN...END blokiga joylashtiriladi::

USE productsdb;

BOTISH TARTIBINI YARATING Mahsulotning xulosasi Mahsulot nomini mahsulot, ishlab chiqaruvchi, narxlari SOHIYIB TANGLASH;

Jarayonni qo'shgandan so'ng, biz pastki tugundan SQL Server Management Studio'dan ma'lumotlar bazasi tuguniga kirishimiz mumkin

Dasturlash imkoniyati -> Saqlangan protseduralar

Biz protsedurani vizual interfeys orqali ham kuzatishimiz mumkin.

Vikonannya protseduralari

Saqlangan protseduradan chiqish uchun EXEC yoki EXECUTE buyrug'ini bering:

EXEC mahsulot xulosasi Ko'rib chiqilgan protseduralar Masofaviy protsedurani ko'rish uchun DROP PROCEDURE buyrug'idan foydalaning:

Qo'shimcha funksionallik

Ularning turli xil protseduralarga o'xshashligi muhim (aniq, MS SQL-dan tashqari).

Balki rostdir.

Ular o'xshash parametrlarga ega va o'xshash qiymatlarga ega bo'lishi mumkin.

Bundan tashqari, ba'zi hollarda hid to'planadi.

Masalan, ular DDL va DML ma'lumotlar bazalari bilan, shuningdek, backend (kod nomi - UDF) funktsiyalari bilan ishlaydi.

Ushbu ma'lumotlar bazasi ob'ektlarini turli usullar bilan dasturlash mumkin.

Bu foydalanuvchilarga eng mos keladigan va vaqtini tejaydigan tanlov usuli turini tanlash imkonini beradi.

Bundan tashqari, protseduraning o'zi yakunlandi, bu sizga server va server o'rtasida almashish uchun katta soatlik xarajatlardan qochish imkonini beradi. Modulni istalgan vaqtda qayta dasturlash va o'zgartirish ham mumkin. Saqlangan SQL protsedurasini bajarish tezligini ta'kidlash ayniqsa muhimdir: bu jarayon uni qo'lda va universal qilish uchun unga o'xshash boshqalarga o'xshaydi.

Xavfsizlik

Axborotni qayta ishlashning bu turi o'xshash jarayonlardan kafolatlanishi uchun farqlanadi

yaxshilangan xavfsizlik

.

Bu boshqa mijozlarning protseduralarga kirishini butunlay o'chirib qo'yishini ta'minlaydi.

Bu administratorga ma'lumotlarning ortiqcha yuklanishi yoki ma'lumotlar bazasiga ruxsatsiz kirishdan qo'rqmasdan, ular bilan mustaqil ravishda operatsiyalarni amalga oshirish imkonini beradi.

Ma'lumotlarni uzatish

Saqlangan SQL protsedurasi va mijoz ilovasi o'rtasidagi bog'liqlik aylantirilgan bir qator parametr va qiymatlarga ta'sir qiladi.

Qolganlari saqlanadigan, himoyalangan ma'lumotlar (asosan mijoz so'rovidan keyin) va SQL uchun qayta ishlanadigan protseduraga ma'lumotlarni uzatish shart emas.

O'ng tomonda tananing mahalliy o'zgarishlar, unda o'zgartirilgan va mahalliy o'zgarishlar, shuningdek, protseduralar bilan bog'liq bo'lishi mumkin.

Boshqacha qilib aytganda, ularni faqat Microsoft SQL Server protsedurasi tanasining o'rtasida ko'rish mumkin.

Saqlash tartib-qoidalari har doim mahalliy ahamiyatga ega.

Shunday qilib, protsedura yaratish uchun bizga protsedura nomi va protsedura tanasida kamida bitta parametr kerak bo'ladi.

E'tibor bering, ushbu turdagi muqobil variant klassifikatordan sxemalarni olish tartibini yaratish va yakunlashdir.

Bu protsedura har qanday ko'rinishda bo'lishi mumkin, masalan, jadval yaratish, jadvalning bir yoki bir nechta qatorlarini kiritish, ma'lumotlar bazasining turi va xarakterini belgilash va hokazo.

Jarayonning butun tanasi bir qator boshqa operatsiyalar bilan o'ralgan.

Muhim chegaralarga ega bo'lgan harakatlar quyida ko'rsatilgan:

Tananing oldini olish kerak bo'lgan boshqa protseduralardan o'tishi shart emas;

Tana ob'ekt haqida yolg'on bayonot berganlikda aybdor emas;

Juda murakkab vaziyatlarda odamlar saqlanishi va oldini olish mumkin bo'lgan oddiy tartiblarni yaratishni namoyish etadilar.

Biroq, protsedura shunday parametrlarni qabul qilishi mumkinki, uni chaqiradigan jarayon, shuning uchun qiymatlar yangisiga yaqin (yoki bir xil emas).

Xushbo'y hidning oldini olish bilanoq, tananing o'rtasida turli jarayonlar boshlanadi.

Misol uchun, siz qo'ng'iroq qilgan abonentning joylashuvi va mintaqasini oladigan va joylashuv va mintaqaga qancha mualliflar ulanganligi haqidagi ma'lumotlarni aylantiradigan protsedurani bajarishingiz mumkin.

Jarayon standartdan biroz farq qilishi mumkin.

Bu avvalgi holatda bo'lgani kabi, lekin faqat bu erda parametrlar yo'q qilinadi.

Keyin aktsiyalarning qiymatlaridan avval @City parametri, ikkinchidan esa @State saqlanadi.

Standart parametr kattaroq ko'rinadi.

SQL protseduralarini saqlash oddiygina parametrlar bo'yicha amalga oshiriladi.

Bunday holda, "UT" parametri "SA" parametrining qiymatini almashtiradi.

Boshqa viki @City parametri uchun faqat bitta argument qiymatini oladi va @State parametri "CA" qiymatini oladi.

Iltimos, sozlamalardagi barcha o'zgarishlar parametrlar ro'yxati oxirigacha bajarilishi uchun tugallangan dasturlar to'ldirilganligiga ishonch hosil qiling.

Boshqa holatda, yozish mumkin emas, keyin esa nomlangan dalillarni uzatish bilan shug'ullanishingiz kerak, bu esa yanada murakkab va murakkab.

4. SQL Server protseduralarini saqlash: ularni qaytarish usullari

Saqlangan bosish protsedurasiga ma'lumotlarni yuborishning uchta muhim usuli mavjud.

Ilovamiz ikkita login nomiga ega bo'ladi: @ TotalAuthors va @ TotalNoContract. Ular parametrlar ro'yxatida ko'rsatilgan. Ushbu o'zgarishlar protseduraning o'rtasida ma'no beradi.

Agar biz chiqish parametrlarini tanlasak,

g'olib abonent

Tana protsedurasining o'rtasida o'rnatilgan ko'plab ma'nolar bo'lishi mumkin. Bundan tashqari, birinchi stsenariyda MS SQL Server protseduralarini tejashni chiqish parametriga o'rnatadigan qiymatlarni oshirish uchun ikkita o'zgaruvchiga ovoz beriladi. Keyin protsedura CA parametrining normal qiymatini ta'minlash jarayoni bilan yakunlanadi.

Joriy parametrlar chiqariladi va shuning uchun o'zgarishlar tartibda uzatiladi.

E'tibor bering, o'zgartirish tugallangach, kalit so'z ham shu erda o'rnatiladi.

Microsoft SQL Server amalga oshirish va avtomatlashtirish uchun kuchli algoritmlardan foydalanadi ( rozrahunkiv) Siz saqlangan tartib-qoidalarga rioya qilishingiz mumkin, shuning uchun bugun biz siz bilan hidlarning qanday yaratilishi, o'zgarishi va yo'q qilinishi haqida gaplashamiz.

Keling, T-SQL da qanday protseduralar qo'llanilishi, nima saqlanganligi va ular nima uchun kerakligini tushunishingiz uchun kichik nazariyadan boshlaylik.

Eslatma! Yangi boshlanuvchi dasturchilar uchun men T-SQL mavzusi bo'yicha ushbu foydali materiallarni tavsiya qilaman:

  • Batafsil tavsif uchun film T-SQL Shuningdek, men kitobni o'qishni tavsiya qilaman - T-SQL dasturchisining yo'li.
  • Transact-SQL bo'yicha o'z-o'zini o'qituvchi;

T-SQL bilan professional onlayn kurslar

T-SQL da qanday protseduralar saqlanadi? Saqlash tartiblari

– bu maʼlumotlar bazasi obʼyektlari boʻlib, unda algoritm SQL koʻrsatmalari toʻplami sifatida oʻrnatilgan.

Boshqacha qilib aytganda, saqlangan protseduralar ma'lumotlar bazasining o'rtasida joylashgan dasturlardir, deb aytishimiz mumkin. Saqlash protseduralari serverda qayta tiklangan kodni saqlash uchun ishlatiladi, masalan, siz algoritm, ketma-ket tartib yoki uzun SQL bayonotini yozdingiz va bu algoritmga kiritilgan barcha ko'rsatmalarni takrorlashingiz shart emas. Nima saqlashingiz mumkinligini ko'rish uchun ushbu protsedurani bajarishingiz mumkin. Bunday holda, siz SQL protsedurasini yaratganingizda, server kodni kompilyatsiya qiladi va keyin siz ushbu protsedurani bajarganingizda, SQL server uni qayta kompilyatsiya qilmaydi.

SQL Serverda saqlanadigan protsedurani bajarish uchun uning nomidan oldin EXECUTE buyrug'ini yozish kerak yoki EXEC buyrug'ini yorliq sifatida ham yozishingiz mumkin.

Saqlash protseduralari juda qiziq, ular bizga ko'plab operatsiyalarni avtomatlashtirish yoki soddalashtirishga yordam beradi, masalan, siz doimiy ravishda wiki-dan turli xil murakkab tahliliy hisobotlarni shakllantirishingiz kerak. yulduzlar jadvali, keyin. PIVOT operatori. Ushbu operatordan so'rovlarni shakllantirishni soddalashtirish uchun (

Ma'lumki, PIVOT moslashuvchan sintaksisga ega

), Siz ma'lumotlarni dinamik ravishda formatlaydigan protsedurani yozishingiz mumkin, masalan, "Dynamic PIVOT in T-SQL" materialida buni qanday amalga oshirishga misol bor, chunki protsedura saqlanishi mumkin.

Microsoft SQL Serverda saqlangan protseduralarni qo'llang

Ilovalar uchun ma'lumotlarni chop etish


Quyidagi barcha ilovalar Microsoft SQL Server 2016 Express-ga o'rnatiladi.

Haqiqiy ma'lumotlar bilan protseduralar qanday ishlashini ko'rsatish uchun bizga ushbu ma'lumotlar kerak, keling ularni yarataylik.

Misol uchun, test jadvalini yaratamiz va unga bir nechta yozuvlarni qo'shamiz, faraz qilaylik, bu ularning narxi bo'yicha mahsulotlar ro'yxatini o'z ichiga olgan jadval bo'ladi. Jadval yaratish bo'yicha ko'rsatma CREATE TABLE TestTable( INT IDENTITY(1,1) NOT NULL, INT NOT NULL, VARCHAR(100) NOT NULL, MONEY NULL) GO -- Ma'lumotlarni qo'shish bo'yicha ko'rsatma INSERT INTO TestTable(CategoryId, ProductName, Price) QIYMATLAR (1 , “Misha”, 100), (1, “Klaviatura”, 200), (2, “Telefon”, 400) GO --Tanlovga yozib olish SELECT * FROM Test Table Ha, endi saqlash tartib-qoidalarini yaratishga o'tamiz.

T-SQL da saqlangan protsedurani yaratish - CREATE PROCEDURE ko'rsatmasi Saqlash protseduralari qo'shimcha ko'rsatmalarga muvofiq amalga oshirilishi mumkin. TARTIBI YARATISH Ushbu ko'rsatmalardan so'ng siz protsedura nomini yozishingiz kerak, so'ngra qutilarga kirish va chiqish parametrlarini tanlang.), kimning maqsadi uchun biz kiyimning ma'nosini tayinladik. Demak, bu protseduraning parametrlari. BEGIN ... END blokida siz xuddi asl o'zgarishlar kabi vikorist qilishingiz mumkin ( Ma'lumki, o'zgarishlar @ belgisi bilan belgilanadi).

).

Agar siz chiqish parametrlarini belgilashingiz kerak bo'lsa, parametr nomidan keyin OUTPUT kalit so'zini kiriting ( yoki qisqartirilgan OUT).

BEGIN...END blokida biz ma'lumotlarni qo'shish bo'yicha ko'rsatmalarni, shuningdek protsedura oxirida SELECT ko'rsatmalarini yozamiz, shunda saqlangan protsedura bizga toifadagi mahsulotlar haqidagi jadval ma'lumotlarini qaytaradi. yangi, kuchli daromadli yangi mahsulot bilan.


Xuddi shu tartibda, men kiritish parametrini qayta ishlashni va matn qatorining boshida va oxirida oxirgi tozalashlarni tanlashni, agar bir qator tozalashlar tasodifan kiritilgan bo'lsa, vaziyatni o'chirish usuli bilan qo'shdim.

Ushbu protseduraning eksa kodi ( Yogo men ham izoh berdim Biz CREATE PROCEDURE TestProcedure (--Kirish parametrlari @CategoryId INT, @ProductName VARCHAR(100), @Price MONEY = 0) protsedurasini yaratamiz. start ku i matn qatorining oxirida SET @MahsulotName = LTRIM(RTRIM(@MahsulotName)); --Yangi yozuv qo'shing. Test jadvaliga INSERT INTO(CategoryId, ProductName, Price) VALUES (@CategoryId, @MahsulotName, @Price) --Ma'lumotlarni aylantiring SELECT * FROM TestTable WHERE CategoryId = @CategoryId END GO).

T-SQL - EXECUTE buyrug'ida saqlanadigan protsedurani bajarish

Siz yuqorida aytganimdek, qo'shimcha EXECUTE yoki EXEC buyrug'i yordamida ushbu protsedurani bajarishingiz mumkin.

1. Narxni ko'rsatmasdan protsedurani bosing EXECUTE TestProcedure @CategoryId = 1, @ProductName = "Test mahsuloti 1"-2.


Belgilangan narxdan protsedurani bosing EXEC TestProcedure @CategoryId = 1, @ProductName = "Test mahsuloti 2", @Price = 300-3.

Parametrlar nomini ko'rsatmasdan protsedurani bosing EXEC TestProcedure 1, "Test mahsuloti 3", 400 T-SQL - ALTER PROCEDURE yo'riqnomasida saqlangan protsedurani o'zgartirish Qo'shimcha ko'rsatmalar yordamida algoritm va protseduraga o'zgartirishlar kiritishingiz mumkin.

TARTIBINI O‘ZGARTIRISh

.

Boshqacha qilib aytganda, xuddi shu protsedurani o'zgartirish uchun CREATE PROCEDURE o'rniga faqat ALTER PROCEDURE yozishingiz va kerak bo'lganda qolgan hamma narsani o'zgartirishingiz kerak.

Aytaylik, test jarayonidan oldin o'zgartirishlar kiritishimiz kerak, keyin @Price parametrini ayting. narx, biz majburiyatimiz bor, buning uchun biz hisob-kitoblar uchun qiymatni olamiz va biz ma'lumotlarning natija to'plamini olishimiz kerakligi aniq, buning uchun biz shunchaki protseduradan SELECT iborasini olamiz, shuning uchun Mening nazarimda..

Protsedurani o'zgartiring ALTER PROCEDURE TestProcedure (--Kirish parametrlari @CategoryId INT, @ProductName VARCHAR(100), @Price MONEY) BOSHLADI --Algoritmingizni amalga oshirish bo'yicha ko'rsatmalar --Kirish parametrlarini qayta ishlash --Boshqadagi bo'shliqlarni olib tashlash yakuniy matn satrlari SET @MahsulotName = LTRIM(RTRIM(@MahsulotName));

--Yangi rekord qo'shing INSERT INTO TestTable(CategoryId, ProductName, Price) VALUES (@CategoryId, @MahsulotName, @Price) O'TISH

T-SQL-da saqlanadigan masofaviy protseduralar turlari - DROP PROCEDURE bayonoti

Agar kerak bo'lsa, siz saqlamoqchi bo'lgan protsedurani o'chirishingiz va qo'shimcha ko'rsatmalar so'rashingiz mumkin.

TOSHLASH TARTIBI

Saqlangan kengaytirilgan protseduralar - bu ODS API va WIN32 API-dan C/C++ da yozilgan asosiy funktsiyalar bo'lib, ular dinamik havolalar kutubxonasi (dll) ko'rinishida ishlab chiqilgan va yuqorida aytib o'tganimdek, bosishlar SQL server funksiyalarini kengaytiradi.

ODS API dasturchiga asosiy yozuvlar to'plami sifatida har qanday tashqi ma'lumot manbalaridan (ma'lumotlar manbalaridan) tashqari, mijozga ma'lumotlarni uzatish imkonini beruvchi boy funktsiyalar to'plamini taqdim etadi.

  • Shuningdek, kengaytirilgan saqlangan protsedura OUTPUT parametrini o'tkazish orqali qiymatlarni aylantirishi mumkin.
  • Saqlangan ilg'or protseduralarni qanday bajarish kerak.
  • Mijoz dasturi kengaytirilgan protsedurani chaqirganda, ma'lumotlar saqlanadi va TDS formatida Net-Libraries va Open Data Service orqali MS SQL SERVER yadrosiga uzatiladi.

SQL Sever kengaytirilgan saqlash protsedurasi bilan bog'liq DLL kutubxonasini taniydi va agar u ilgari joylashtirilmagan bo'lsa, uni o'z kontekstiga joylashtiradi va o'rta dll faylida joylashgan funksiya sifatida amalga oshirilgan kengaytirilgan saqlangan protsedurani chaqiradi.

  • Serverda kerakli harakatlarni saqlash, saqlash va saqlash va natijalar to'plamini mijoz dasturiga, ODS API tomonidan taqdim etilgan vikoryst xizmatiga o'tkazish uchun protsedura kengaytirildi. Saqlangan kengaytirilgan protseduralarning xususiyatlari. Saqlangan kengaytirilgan protseduralar - bu funktsiyalar MS SQL Serverning manzil maydoniga va xavfsizlik kontekstiga birlashtirilgan.
  • mintaqaviy ro'yxatga olish
    uning ostida MS SQL Server xizmati ishlamoqda;
  • Saqlangan kengaytirilgan protseduralar bilan DLL kutubxonasi xotirada saqlanganidan so'ng, u SQL Server to'xtatilmaguncha yoki administrator quyidagi buyruqdan foydalana olmaguncha yo'qoladi:
    DBCC DLL_name (BEPUL).
    Saqlangan protsedura kengaytirildi va saqlangan asl protsedura kabi kompyuterda ishga tushirildi:
    xp_extendedProcName @param1, @param2 OUTPUT ISHLATISH
@param1 kirish parametri
@param2 kirish/chiqish parametri Hurmat! Saqlangan kengaytirilgan protseduralar bo'laklari MS SQL Server xizmat ko'rsatish jarayonining manzil maydonida saqlanadi.

muhim foyda

Ularning robotlari server yadrosining noto'g'ri ishlashiga sabab bo'lishi mumkinligi sababli, DLL-ni ishlab chiqarish serveriga o'rnatishdan oldin uni sinchiklab tekshirish tavsiya etiladi.

Saqlangan kengaytirilgan protseduralarni yaratish.

Ushbu funktsiyani joriy prototipda saqlab qolish uchun protsedura kengaytirildi: SRVRETCODE xp_extendedProcName(SRVPROC * pSrvProc); Muayyan mijoz ulanishi uchun tutqich bo'lgan SRVPROC strukturasidagi ko'rsatkich.
Ushbu tuzilmaning maydonlari hujjatsiz va ODS kutubxonasi Open Data Services server ilovasi va mijoz oʻrtasidagi aloqa va maʼlumotlarni boshqarish uchun foydalanadigan maʼlumotlarni oʻz ichiga oladi.
Qanday bo'lmasin, siz ushbu tuzilishga qaytishingiz shart emas va uni endi o'zgartira olmaysiz.
ODS API-ning har qanday funktsiyasini chaqirganda ushbu parametr ko'rsatilishi kerak, shuning uchun men uning tavsifi bilan bezovta qilmayman. Xp_ prefiksidan foydalanish shart emas, lekin favqulodda holatlarda saqlangan protseduraning ko'rinishini oshirish uchun saqlangan kengaytirilgan protsedurani boshlash muhim, ularning nomlari odatda sp_ prefiksi bilan boshlanadi. Shuni ham yodda tutish kerakki, saqlangan kengaytirilgan protseduralar nomlari katta-kichik harflarga sezgir. Agar siz saqlangan kengaytirilgan protseduradan foydalansangiz, bu haqda unutmang, aks holda olingan natija o'rniga siz tuzatish haqidagi bildirishnomani bekor qilasiz. Agar dll faylini ishga tushirish/initializatsiya qilish uchun kod yozishingiz kerak bo'lsa, iltimos, qaysi ekanligini tekshiring
standart funksiya

  • DllMain().
  • Agar sizda bunday ehtiyoj bo'lmasa va DLLMain() ni yozishni xohlamasangiz, kompilyator hech narsa qilmasdan DLLMain() funksiyasining o'z versiyasini tanlaydi, shunchaki TRUE qiymatini qaytaradi.
Dll (protsedurani saqlash kengaytmasi) dan chaqiriladigan barcha funktsiyalar eksport qilingan deb e'lon qilinadi.

Agar siz MS Visual C++ da yozsangiz, direktivani vikorize qiling
{
__declspec(dllexport)
}

.

Agar kompilyator ushbu direktivani qo'llab-quvvatlamasa, DEF faylining EXPORTS bo'limida eksport qilingan funktsiyani tavsiflang.

Shunday qilib, loyihani yaratish uchun bizga quyidagi fayllar kerak bo'ladi:
Srv.h sarlavha fayli, ODS API funksiyalari va makroslarining tavsifini o'z ichiga oladi;

DLL-ni sinab ko'rish va yaxshilash uchun SQL Server -a ni o'rnatish talab qilinadi. Imkoniyat va farovonlik chegarasida, lekin hech kimni talon-taroj qilmasdan va shu bilan hamma narsani o'z-o'zidan qo'yish mahalliy disk

.
Microsoft Visual C++ 7.0 Interprise Edition kengaytirilgan saqlangan protsedura DLL ustasini o'z ichiga oladi.
Printsipial jihatdan, tabiatda hech narsa qilish kerak emas, lekin faqat saqlanadigan kengaytirilgan protsedura uchun shablonni yaratadi. ;
Agar siz fakhivtsi yoqsangiz, siz yogoni vikoristovvat qilishingiz mumkin.

Menda hamma narsani o'z qo'llarim bilan qilishga iroda bor va bu hech kimga ko'rinadigan muammo emas.
Endi tekshirish uchun:
- Visual C++ dasturini ishga tushiring va yangi loyiha yarating - Win32 Dynamic Link Library.

- Loyiha sarlavhasi faylini qo'shing - #include

- Asboblar => Variantlar menyusiga o'ting va qo'shish va kutubxona fayllari uchun parametrlarni qo'shing.

Agar siz MS SQL Serverni o'rnatishda hech narsani o'zgartirmagan bo'lsangiz, quyidagilarni belgilang:

C:Program FilesMicrosoft SQL Server80ToolsDevToolsInclude sarlavhali fayllar uchun; - Kutubxona fayllari uchun C: Program FilesMicrosoft SQL Server80ToolsDevToolsLib.- Bog'lovchi parametrlarida opends60.lib kutubxona fayli nomini belgilang.

Tayyorgarlik bosqichi tugagach, siz birinchi kengaytirilgan saqlangan protsedurani yozishni boshlashingiz mumkin.

Muammoning bayonoti.


Dasturlashni boshlashdan oldin, siz qaerdan boshlashni, yakuniy natija qanday bo'lishini va unga qanday erishishni aniq tushunishingiz kerak.

Xo'sh, bizga ko'proq texnik bilim kerak:
Xo'sh, bizga ko'proq texnik bilim kerak:
MS SQL Server 2000 uchun kengaytirilgan protsedurani ishlab chiqish, uni olib tashlaydi
so'nggi ro'yxat


__declspec(dllexport) SERVRETCODE xp_GetGroupList(SRVPROC* pSrvProc)
{

//O'tkazilgan parametrlar sonini tekshirish

//O'tkazilgan parametrlar turini tekshirish

//2-parametr OUTPUT parametri ekanligini tekshiring

//2-parametrda qiymatni saqlash uchun yetarli zaxira borligini tekshiring

//Kirish parametrlarini olib tashlash

//Ottrimanya ro'yxati koristuvachi

// Ma'lumotlarni mijozga standart yozuvlar to'plami sifatida yuboring

//OUTPUT parametrining qiymatini belgilash

qaytish (XP_NOERROR);
}


Kirish parametrlari bilan ishlash

Ushbu bo'limda men uchinchi tomon nutqlariga bo'lgan hurmatingizni yo'qotmoqchi emasman, lekin men uni parametrlar bilan saqlanadigan kengaytirilgan protseduraga o'tkazilgan ishga qaratmoqchiman.

Shuning uchun, keling, texnik bilimlarimizni ko'rib chiqamiz va faqat kirish parametrlari bilan bog'liq bo'lgan qismni tahlil qilamiz.

Avvaliga ko'p nazariya yo'q
Qabul qilinishi mumkin bo'lgan birinchi harakat bu bizning kengaytirilgan saqlangan protseduramiz - chaqirilganda unga uzatilgan parametrlarni olish.
Induktsiya qilingan algoritmga rioya qilgan holda, biz quyidagi harakatlarni bartaraf etishimiz kerak:
O'tkazilgan parametrlar sonini hisoblang;
- uzatilgan parametrlar to'g'ri ma'lumotlar turini o'z ichiga olganligini tekshirish;

- OUTPUT parametrining yetarli qiymatga ega ekanligini tekshiring, yangi qiymatni saqlash uchun kengaytirilgan saqlangan protseduramizdan foydalaning.

- uzatilgan parametrlarni bekor qilish;

- kengaytirilgan saqlangan protseduraning muvaffaqiyatli/muvaffaqiyatsiz bajarilishi natijasida chiqish parametrining qiymatini belgilash.

Endi teri nuqtasini batafsil ko'rib chiqaylik:


Translyatsiyalar soni saqlangan kengaytirilgan protsedura, parametrlar bilan belgilanadi

Parametrlarni uzatish sonini olib tashlash uchun siz funktsiyani tanlashingiz kerak:

int srv_rpcparams (SRV_PROC * srvproc);

Muvaffaqiyatli bajarilgan bo'lsa, funksiya kengaytirilgan saqlangan parametrlar protsedurasidan uzatishlar sonini o'zgartiradi.
Agar kengaytirilgan saqlangan protsedura parametrlarsiz ishlatilsa - srv_rpcparams -1 ga o'rnatiladi.
Parametrlar nomi yoki pozitsiyasi (nomsiz) bo'yicha uzatilishi mumkin.
Hech qanday holatda siz ikkita usulni aralashtira olmaysiz.
Kirish parametrlarini funktsiyaga nom va pozitsiya bo'yicha darhol o'tkazishga urinish muvaffaqiyatsizlikka olib keladi va srv_rpcparams 0 ga qaytadi.
ULONG * pcbActualLen,
BYTE * pbData,
BOOL * pfNull);

pBayt kirish parametrining turi haqida o'zgaruvchan tarkib ma'lumotlari uchun ko'rsatkich;
pbType parametrning seriya raqamini ko'rsatadi.
Birinchi parametrning raqami birinchisidan boshlanadi. pcbMaxLen
O'zgartirishni ko'rsating, har qanday funktsiyadan oldin maksimal parametrning maksimal qiymatini kiriting. Ushbu qiymat o'tkazilgan parametrning o'ziga xos ma'lumotlar turi bilan belgilanadi, shuning uchun biz OUTPUT parametri uzatilgan ma'lumotlarni saqlash uchun etarli ekanligini tekshiramiz.
pcbActualLen Kengaytirilgan protseduraga o'tgan parametrning haqiqiy qiymatining ko'rsatkichi, chaqirilganda saqlanadi.
Agar uzatilgan parametr nol qiymatga ega bo'lsa va pfNull bayrog'i FALSE ga o'rnatilgan bo'lsa, (* pcbActualLen) ==0. pbData

- xotirasi srv_paraminfo bosilishidan oldin ko'rinadigan buferga tayinlash.

Kimning buferiga funksiya kengaytirilgan ketma-ket protseduradan kirish parametrlarini joylashtiradi.

Baytlardagi bufer hajmi pcbMaxLen qiymati bilan bir xil.
Agar kengaytirilgan saqlangan protsedura parametrlarsiz ishlatilsa - srv_rpcparams -1 ga o'rnatiladi.
Agar ushbu kiritish parametri NULL bo'lsa, ma'lumotlar buferga yozilmaydi, lekin funksiya *pbType, *pcbMaxLen, *pcbActualLen, *pfNull qiymatlarini to'g'ri aylantiradi.
);

Shuning uchun, siz srv_paraminfo-ni ikki marta bosishingiz kerak: avval pbData=NULL bilan, so'ngra pcbActualLen ga teng bufer uchun kerakli xotira hajmini ko'rib, m'yati ko'rish bloki uchun pbData indikatorini o'tkazib, srv_paraminfo-ni yana bosing.
pfNull

NULL-ensign-da vkazivnik.

Agar kirish parametrining qiymati hali ham NULL bo'lsa, srv_paraminfo uni TRUE ga o'rnatadi.

Boshqa OUTPUT parametri bilan tekshiring.
srv_paramstatus() funktsiyasi o'tkazilgan parametr holatini ko'rsatish uchun mo'ljallangan:
Parametrlar nomi yoki pozitsiyasi (nomsiz) bo'yicha uzatilishi mumkin.
int srv_paramstatus (
int n
n qo'ng'iroq ostida kengaytirilgan saqlangan protseduraga o'tgan parametr raqami.
);

Sizga eslatib o'taman: parametrlar har doim 1 bilan raqamlangan. yangi qiymat tayinlanadigan parametrning seriya raqami.
pcbActualLen Bu OUTPUT parametridir.
Chiqish parametrining qiymatini belgilash uchun mijozga yuboriladigan ma'lumotlarga ega buferdagi indikator. cbLen
Dovzhina bufer o'lpon, scho posylayutsya. O'tkazilgan OUTPUT parametrining ma'lumotlar turi doimiy ma'lumot bo'lsa va NULL qiymatlarni saqlashga imkon bermasa (masalan, SRVBIT yoki SRVINT1), funktsiya cbLen parametrini e'tiborsiz qoldiradi.
cbLen=0 qiymati nol qiymatni bildiradi, bu fNull parametri FALSE ga o'rnatilganligini bildiradi.
fNull

Xo'sh, bizga ko'proq texnik bilim kerak:

MS SQL Server 2000 uchun kengaytirilgan protsedurani ishlab chiqish, uni olib tashlaydi
buni TRUE ga o'rnating, chunki aylantiriladigan parametrga NULL qiymati berilishi kerak, bunda cbLen qiymati 0 ga teng bo'lishi mumkin, aks holda funksiya baxtli tugaydi.

Yil oxirida fNull=FALSE.
Muvaffaqiyatli bo'lsa, funktsiya SUCCEED ni qaytaradi.

Agar aylanadigan qiymat FAIL ga o'xshash bo'lsa, u holda bosish uzoq bo'lmaydi.

Hammasi oddiy va tushunarli
Endi biz o'z parametrimiz orqali o'tgan qiymatning qiymatini saqlaydigan o'z kengaytirilgan protseduramizni yozish uchun etarli ma'lumotga egamiz. Keling, an'analardan chetga chiqaylik, Salom dunyo qatori bo'ladi!
Buttning moslashtirilgan versiyasini bu yerdan yuklab olish mumkin.

#XP_XATOSI 1ni aniqlang

Hammasi oddiy va tushunarli
}
#MAX_SERVER_ERROR 20000 ni aniqlang

#XP_HELLO_ERROR MAX_SERVER_ERROR+1ni aniqlang
{
void printError(SRV_PROC*, CHAR*);
#ifdef __cplusplus
tashqi "C" (
#endif
SRVRETCODE __declspec(dllexport) xp_helloworld(SRV_PROC* pSrvProc);

#endif
SRVRETCODE xp_helloworld(SRV_PROC* pSrvProc)
char szText = "Salom dunyo!";
{
BYTE bType;
ULONG cbMaxLen;
}

ULONG cbActualLen;
BOOL fNull;
/* Kengaytirilgan jamg'armalardan o'tkazmalar sonining qiymati
{
parametr tartibi */
agar (srv_rpcparams(pSrvProc) != 1)
ULONG cbMaxLen;
}

printError(pSrvProc, "Parametrlar soni noto'g'ri!");
qaytish (XP_ERROR);
{
parametr tartibi */
/* Ma’lumotlar turi va uzatilgan parametrlar soni haqida ma’lumot olish */
ULONG cbMaxLen;
}

agar (srv_paraminfo(pSrvProc, 1, &bType, &cbMaxLen,
&cbActualLen, NULL, &fNull) == FAIL)
{
printError(pSrvProc,
ULONG cbMaxLen;
}

"Kirish parametrlari haqida ma'lumotni olish mumkin emas...");
/* OUTPUT parametrini */ parametri bilan uzatish sonini tekshiradi.< strlen(szText))
{
parametr tartibi */
agar ((srv_paramstatus(pSrvProc, 1) va SRV_PARAMRETURN) == FAIL)
ULONG cbMaxLen;
}

/* OUTPUT parametrining qiymatini belgilang */
agar (FAIL == srv_paramsetoutput(pSrvProc, 1, (BYTE*)szText, 13, FALSE))
{
parametr tartibi */
"OUTPUT parametrining qiymatini o'rnatolmayman...");
ULONG cbMaxLen;
}

srv_senddone(pSrvProc, (SRV_DONE_COUNT | SRV_DONE_MORE), 0, 1);
qaytish (XP_NOERROR);
}

bekor chop etish xatosi (SRV_PROC *pSrvProc, CHAR* szErrorMsg)
{
srv_sendmsg(pSrvProc, SRV_MSG_ERROR, XP_HELLO_ERROR, SRV_INFO, 1,
NULL, 0, 0, szErrorMsg, SRV_NULLTERM);

Srv_senddone(pSrvProc, (SRV_DONE_ERROR | SRV_DONE_MORE), 0, 0);
}

srv_sendmsg va srv_senddone funksiyalari e'tiborsiz yo'qoldi.

Srv_sendmsg funktsiyasi mijozga bildirishnomalarni majburlash uchun ishlatiladi.
Agar kengaytirilgan saqlangan protsedura parametrlarsiz ishlatilsa - srv_rpcparams -1 ga o'rnatiladi.
Eksa prototipi:
int srv_sendmsg (
int msgtype,
DBINT xabarnomasi,
DBTINYINT sinfi
DBTINYINT holati,
DBCHAR * rpc nomi,
int rpcnamelen,
DBUSMALLINT choyshab,
);

DBCHAR *xabar, int msglen
msgtype
mijozdan olish so'raladigan bildirishnoma turini ko'rsatadi. SRV_MSG_INFO doimiysi xabarnoma ma'lumotlarini, SRV_MSG_ERROR esa xato haqida xabar berishni anglatadi; msgnum bildirishnoma raqami; sinf
- boshlangan rahm-shafqatning zo'ravonlik darajasi. Axborot xabarnomalari
Jiddiylik darajasi 10 dan kam yoki ko'p bo'lishi mumkin;
davlat
Doimiy ma'lumot olish uchun raqamni joylashtiraman. Ushbu parametr ogohlantirish konteksti haqida ma'lumot beradi.
Qabul qilinadigan qiymatlar 0 dan 127 gacha;
rpcname hozirda vikorizatsiya qilinmayapti; rpcnamelen - bu vaqtda vikorist yo'q;
zig'ir
Bu erda siz chiqish kodining qator raqamini kiritishingiz mumkin.
Shu sabablarga ko'ra, de vinikla o'rnatish oson bo'ladi.

Agar siz ushbu xususiyatdan foydalanishni xohlamasangiz, linenum 0 ni o'rnating;

xabar mijoz nima qilishi mumkinligi qatorini ko'rsatadi;
Agar kengaytirilgan saqlangan protsedura parametrlarsiz ishlatilsa - srv_rpcparams -1 ga o'rnatiladi.
msglen
axborot qatorining baytlaridagi oxirgi daqiqani bildiradi.
Agar bu qator null belgi bilan tugasa, ushbu parametrning qiymati SRV_NULLTERM ga o'rnatilishi mumkin.
);

Nimani aylantirish kerakligining ma'nosi:
- Muvaffaqiyat bo'lgandan keyin MUVAFFAQIYAT
- Muvaffaqiyatsiz bo'lsa, MUVOFIQ.
Jarayon kengaytirilgan protseduraga ega bo'lib, mijozni sizning holatingiz haqida muntazam ravishda xabardor qilish orqali saqlanadi.
Wikonian ishlari haqida qo'shimcha ma'lumot qo'shing.
SRV_DONE_ERROR Vikory bekor qilish haqida xabar berish uchun tizimga kirgan va tugallanmagan.
ichiga band qilish uchun siz 0 ni belgilashingiz kerak.
count - mijozga yuboriladigan ma'lumotlarning natijalar to'plamining soni.
zig'ir
Bu erda siz chiqish kodining qator raqamini kiritishingiz mumkin.
O'rnatish holati SRV_DONE_COUNT ga tayinlanganligi sababli, count mijozga yuborilgan to'plamlarning to'g'ri sonini yozuvlarga kiritish uchun javobgardir.

- Muvaffaqiyatsiz bo'lsa, MUVOFIQ.

MS SQL Server 2000 da saqlangan kengaytirilgan protseduralarni o'rnatish
1.Kengaytirilgan saqlangan protsedura bilan dll kutubxonasini MS SQL Server o'rnatilgan mashinadagi binn katalogiga nusxalash.

Hujumning kamroq yo'li mavjud: C:Program FilesMicrosoft SQL ServerMSSQLBinn;
2. Quyidagi skriptni ishga tushirish orqali serverda saqlangan kengaytirilgan protsedurani ro'yxatdan o'tkazing:

Magistrdan foydalaning

SP_ADDEXTENDEDPROC xp_helloworld, xp_helloworld.dll ISHLATISH
Quyidagi skriptni ishga tushirish orqali xp_helloworld robotini sinab ko'ring:
E'lon qiling @Param varchar(33)


Orqaga aylantirmasdan: bino kursori faqat bitta yo'nalishda harakatlanadi - oldinga, siz ularni tanlamasdan qatorlarni o'tkazib yubora olmaysiz.

xp_helloworld @Param OUTPUT ISHLATISH
@Paramni OUTPUT_Param sifatida tanlang
Bu erda mening maqolamning birinchi qismi tugaydi.
Endi men qo'shiq aytyapman, siz bizning texnik bo'limlarimiz bilan 100% aloqada bo'lishga tayyormiz.
Joriy maqolada siz quyidagilarni bilib olasiz:
- ODS APIda belgilangan ma'lumotlar turlari;
- kengaytirilgan jamg'arma tartiblarini rivojlantirishning o'ziga xosligi;

- yozuvlar to'plamini qanday shakllantirish va ularni mijoz ilovasiga o'tkazish;

Brauzeringiz cookie-fayllarni qo'llab-quvvatlashi uchun ularning to'g'ri ishlashiga ishonch hosil qilish uchun foydalanishingiz mumkin bo'lgan ko'plab joriy saytlar mavjud.