Foydalanuvchi tomonidan belgilangan funktsiya - User-defined function

A foydalanuvchi tomonidan belgilangan funktsiya (UDF) a funktsiya dastur yoki atrof-muhit foydalanuvchisi tomonidan, odatdagi taxminlar funktsiyalar dasturga yoki atrof-muhitga o'rnatilganligi kontekstida taqdim etiladi.

BASIC tili

Ning ba'zi eski dasturlarida ASOSIY dasturlash tili, foydalanuvchi tomonidan aniqlangan funktsiyalar "DEF FN" sintaksisidan foydalanib aniqlanadi. BASICning zamonaviy shevalari ta'sirida tizimli dasturlash paradigma, bu erda kodning katta qismi yoki barchasi foydalanuvchi tomonidan belgilangan funktsiyalar yoki protseduralar sifatida yoziladi va kontseptsiya amalda ortiqcha bo'lib qoladi.

Ma'lumotlar bazalari

Yilda relyatsion ma'lumotlar bazasini boshqarish tizimlari, foydalanuvchi tomonidan belgilangan funktsiya. funktsiyasini kengaytirish mexanizmini taqdim etadi ma'lumotlar bazasi serveri standart so'rovlar tilida baholanishi mumkin bo'lgan funktsiyani qo'shish orqali (odatda SQL ) bayonotlar. The SQL standart orasidagi farqni ajratib turadi skalar va jadval funktsiyalari. Skalyar funktsiya faqat bitta qiymatni qaytaradi (yoki NULL ), jadval funktsiyasi esa har bir satr bir yoki bir nechta ustunli nol yoki undan ortiq qatorni o'z ichiga olgan (munosabat) jadvalni qaytaradi.

SQL-da foydalanuvchi tomonidan belgilangan funktsiyalar Funktsiyani yarating bayonot. Masalan, Selsiyni Farengeytga o'zgartiradigan funktsiya quyidagicha e'lon qilinishi mumkin:

YARATMOQ FUNKSIYA dbo.CtoF(Selsiy FLAT)  Qaytish FLAT  QAYTISH (Selsiy * 1.8) + 32

Yaratgandan so'ng foydalanuvchi tomonidan belgilangan funktsiyadan foydalanish mumkin iboralar SQL bayonotlarida. Masalan, boshqa ichki funktsiyalarga ruxsat berilgan joyda uni chaqirish mumkin. Bu shuningdek o'z ichiga oladi Bayonotlarni tanlang, bu erda funktsiyani ma'lumotlar bazasidagi jadvallarda saqlangan ma'lumotlarga qarshi ishlatish mumkin. Kontseptsiya jihatidan funktsiya bunday foydalanishda har bir satrda bir marta baholanadi. Masalan, ma'lum bo'lgan har bir kimyoviy element uchun satr bo'lgan, ELEMANS nomli jadvalni faraz qiling. Jadvalda Selsiy bo'yicha ushbu elementning qaynash nuqtasi uchun BoilingPoint nomli ustun mavjud. So'rov

SELECT Ism, CtoF(BoilingPoint)  Dan Elementlar

har bir satrdan nom va qaynash nuqtasini olib chiqadi. Ustundagi qiymatni Farengeytdagi qiymatga aylantirish uchun CtoF foydalanuvchisi tomonidan belgilangan funktsiyani yuqorida e'lon qilinganidek bajaradi.

Har bir foydalanuvchi tomonidan belgilangan funktsiya ma'lum xususiyatlarga yoki xususiyatlarga ega. SQL standarti quyidagi xususiyatlarni belgilaydi:

  • Til - foydalanuvchi tomonidan belgilangan funktsiya amalga oshiriladigan dasturlash tilini belgilaydi; misollarga SQL, C, C # va Java kiradi.
  • Parametr uslubi - funktsiyani bajarish va ma'lumotlar bazasi tizimi o'rtasida funktsiya parametrlari va natijalarini o'tkazish uchun ishlatiladigan konventsiyalarni belgilaydi (faqat agar til SQL bo'lmasa amal qiladi).
  • Maxsus ism - ma'lumotlar bazasi ichida yagona bo'lgan funktsiya nomi. E'tibor bering, funktsiya nomi noyob bo'lishi shart emas ortiqcha yuklangan funktsiyalar. Ba'zi SQL dasturlari funktsiyalar nomlari ma'lumotlar bazasida yagona bo'lishini talab qiladi va ortiqcha yuklangan funktsiyalarga yo'l qo'yilmaydi.
  • Determinizm - funktsiya deterministik yoki yo'qligini belgilaydi. Determinizm xarakteristikasi ta'sir qiladi so'rovlarni optimallashtiruvchi SQL bayonotini kompilyatsiya qilishda.
  • SQL-ma'lumotlarga kirish - ma'lumotlar bazasini boshqarish tizimiga funktsiya tarkibida SQL bayonotlari (NO SQL) mavjud emasligini, SQL bayonotlarini o'z ichiga olganligini, ammo biron bir jadvalga kirmaganligini yoki yo'qligini aytadi qarashlar (SQL o'z ichiga oladi), jadvallardan yoki ko'rinishlardan ma'lumotlarni o'qiydi (SQL DATA READS) yoki ma'lumotlar bazasidagi ma'lumotlarni o'zgartiradi (SQL DATA-ni o'zgartiradi).

Foydalanuvchi tomonidan belgilangan funktsiyalar bilan aralashmaslik kerak saqlangan protseduralar. Saqlangan protseduralar foydalanuvchiga SQL buyruqlar to'plamini guruhlash imkonini beradi. Protsedura parametrlarni qabul qilishi va ushbu parametrlarga qarab o'z SQL bayonotlarini bajarishi mumkin. Protsedura ifoda emas va shuning uchun foydalanuvchi tomonidan belgilangan funktsiyalar kabi ishlatib bo'lmaydi.

Ma'lumotlar bazasini boshqarish tizimlarining ba'zilari SQL-dan boshqa tillarda foydalanuvchi tomonidan aniqlangan funktsiyalarni yaratishga imkon beradi. Microsoft SQL Server, masalan, foydalanuvchiga foydalanishga imkon beradi .NET tillari shu maqsadda C #, shu jumladan. DB2 va Oracle C yoki Java dasturlash tillarida yozilgan foydalanuvchi tomonidan belgilangan funktsiyalarni qo'llab-quvvatlaydi.

SQL Server 2000

UDF ning uch turi mavjud Microsoft SQL Server 2000: skalar funktsiyalari, jadval ichidagi jadvalga kiritilgan funktsiyalar va ko'p bosqichli jadvalga mo'ljallangan funktsiyalar.

Skalyar funktsiyalar RETURNS bandi bilan bitta ma'lumot qiymatini qaytaradi (jadval emas). Skalar funktsiyalari, vaqt tamg'asi va foydalanuvchi tomonidan aniqlangan ma'lumotlar turlaridan tashqari barcha skalar ma'lumot turlaridan foydalanishi mumkin. Ichki jadval qiymatlari funktsiyani qaytaradi natija o'rnatildi bitta SELECT bayonotining. Ko'p bosqichli jadvallar uchun mo'ljallangan funktsiyalar ko'plab TRANSACT-SQL operatorlari bilan tuzilgan jadvalni qaytaradi.

Foydalanuvchi tomonidan belgilangan funktsiyalar OBJECT_ID, LEN, DATEDIFF kabi o'rnatilgan funktsiyalar kabi so'rov orqali chaqirilishi yoki saqlangan protseduralar kabi EXECUTE ifodasi orqali bajarilishi mumkin.

Ishlash bo'yicha eslatmalar: 1. Microsoft SQL Server 2000-da ko'rinishni "o'ralgan" jadvalga tegishli funktsiya View-ning o'ziga qaraganda ancha tezroq bo'lishi mumkin. Quyidagi MyFunction MyView ko'rinishiga qaraganda tezroq ishlaydigan "function-wrapper" ning misoli:

YARATMOQFUNKSIYAMyFunction()Qaytish@TblJadval(StudentIDVARCHAR(255),SAS_StudentInablesIDINT,YorliqVARCHAR(255),QiymatPUL,CMN_PersonsIDINT)ASBOSHLASHKIRITMOQ@Tbl(StudentID,SAS_StudentInablesID,Yorliq,Qiymat,CMN_PersonsID)SELECTStudentID,SAS_StudentInablesID,Yorliq,Qiymat,CMN_PersonsIDDanMyView- bu erda MyView katta jadval (lar) dan bir xil ustunlarni tanlaydi (qo'shilish bilan)QAYTISHOXIRI

2. Microsoft SQL Server 2005-da xuddi shu kodni bajarish natijasi aksincha: ko'rinish "funktsiya-o'rash" ga qaraganda tezroq bajariladi.

Foydalanuvchi tomonidan belgilangan funktsiyalar - bu bir yoki bir nechta Transact-SQL bayonotlaridan tashkil topgan subproutines, bu kodni qayta ishlatish uchun kapsulalash uchun ishlatilishi mumkin. Bu nol yoki undan ko'p argumentlarni oladi va qaytish qiymatini baholaydi. O'zining tanasida saqlangan protseduralarga o'xshash boshqarish-oqim va DML-bayonotlarga ega, ma'lumotlar bazasi yoki fayl yoki tarmoq kabi tashqi manbalarni o'zgartirish kabi biron bir global sessiya holatini o'zgartirishga yo'l qo'ymaydi, chiqish parametrini qo'llab-quvvatlamaydi. parametrning sukut qiymatini o'tkazish uchun belgilangan.UDFdagi xatolar UDF-ni bekor qilishga olib keladi, bu esa o'z navbatida UDF-ni chaqirgan bayonotni bekor qiladi.

YARATMOQFUNKSIYAKubik hajmi- Kirish o'lchamlari santimetrda(@CubeLengtho‘nli kasr(4,1),@CubeWidtho‘nli kasr(4,1),@CubeHeighto‘nli kasr(4,1))Qaytisho‘nli kasr(12,3)ASBOSHLASHQAYTISH(@CubeLength*@CubeWidth*@CubeHeight)OXIRI

Microsoft SQL Server 2000-da qo'llab-quvvatlanadigan ma'lumotlar turi, natijalarni saqlash uchun ishlatiladigan vaqtinchalik jadval singari, asosan vaqt (jadval) ning vaqtinchalik o'zgaruvchisini va UDF-ning qaytish qiymatini aniqlash uchun ishlatiladi doirasi funktsiya, saqlangan protsedura yoki u aniqlangan to'plam bilan cheklangan. (Table) o'zgaruvchilar o'rtasida ruxsat berilmaydi UDF-ni olib tashlash uchun UDFDROP FUNCTION xususiyatlarini o'zgartirish uchun UDFALTER FUNCTION yaratish uchun SELECT, INSERT, UPDATE va DELETE CREATE FUNCTION-da foydalanish mumkin

Apache uyasi

Apache uyasi oddiy foydalanuvchi tomonidan belgilangan funktsiyalardan tashqari (UDF), shuningdek foydalanuvchi tomonidan belgilangan umumiy funktsiyalar (UDAF) va jadval yaratuvchi funktsiyalarni (UDTF) belgilaydi.[1] Hive, dasturchilarga Java bilan o'zlarining maxsus funktsiyalarini yaratishga imkon beradi.[2]

Adabiyotlar

  1. ^ "LanguageManual UDF - Apache Hive - Apache Software Foundation". 2015 yil 26-iyun.
  2. ^ "HivePlugins - Apache Hive - Apache Software Foundation". 2015 yil 26-iyun.

Tashqi havolalar