Tarkibga o'tish

028. Funksiyalar va PL/pgSQL

Bu mavzuda SQL va PL/pgSQL funksiyalari, protseduralar bo'yicha 30 ta masala bor. Har bir masala oldida qavs ichida sxema nomi va qiyinlik darajasi ko'rsatilgan. Sxemalar Sxemalar va tayyorlov sahifasida berilgan.

Masalani o'zingiz yechib, natijani Kutilgan natija bilan solishtiring. O'zgartiruvchi masalalarda (INSERT, UPDATE, DELETE, DDL) natija shartda aytilgan tekshiruv so'rovidan olingan. Natija 10 qatordan ko'p bo'lsa, birinchi 10 qator ko'rsatilgan.

1. (dokon, oson) Funksiya: kvadrat(x int) qaytaradi x*x; kvadrat(7) ni chaqiring.

Kutilgan natija
49

2. (dokon, oson) Funksiya qqs(narx numeric) -> narx*1.12; qqs(1000).

Kutilgan natija
1120.00

3. (dokon, oson) PL/pgSQL funksiya: salom(ism text) 'Salom, !' qaytarsin.

Kutilgan natija
Salom, Ali!

4. (dokon, oson) Funksiya: mijoz_soni() — mijozlar soni (SQL funksiya).

Kutilgan natija
30

5. (dokon, o'rta) IF/ELSE: toifa(narx numeric) 'arzon' (<100000), 'qimmat' (>=100000) qaytarsin; toifa(50000), toifa(200000).

Kutilgan natija
arzon | qimmat

6. (dokon, o'rta) Funksiya faktorial(n int) (tsikl bilan, PL/pgSQL); faktorial(6).

Kutilgan natija
720

7. (dokon, o'rta) RETURNS TABLE: kategoriya_mahsulotlar(k int) — shu kategoriya mahsulotlari (id, nom). kategoriya 1, birinchi 3.

Kutilgan natija
1 | Telefon 1
6 | Sut 6
11 | Telefon 11

8. (dokon, o'rta) DEFAULT parametr: chegirma(narx numeric, foiz numeric DEFAULT 10) -> narx*(1-foiz/100); chegirma(1000) va chegirma(1000,20).

Kutilgan natija
900.00000000000000000000 | 800.00000000000000000000

9. (dokon, o'rta) OUT parametrlar: min_maks(OUT mn numeric, OUT mx numeric) mahsulot narxlari min va maks.

Kutilgan natija
190000.00

10. (dokon, o'rta) PL/pgSQL: buyurtma_summa(b int) — buyurtma jami summasini SELECT INTO bilan hisoblasin; buyurtma 1.

Kutilgan natija
761300.00

11. (dokon, qiyin) RAISE EXCEPTION: manfiy narx bilan chaqirilganda xato beradigan tekshiruv funksiyasi 'musbat(x)'; musbat(5) natijasi va tekshiruv uchun EXCEPTION blokli o'ram 'xavfsiz_musbat(-1)' 'xato' qaytarsin.

Kutilgan natija
5 | xato

12. (dokon, qiyin) Qaytaradigan SETOF: RETURN QUERY bilan shahar_mijozlari(sh text); shahar 'Buxoro', soni.

Kutilgan natija
5

13. (dokon, qiyin) Dinamik SQL: EXECUTE format bilan jadval_soni(t text) — jadvaldagi qatorlar soni; 'mijoz'.

Kutilgan natija
30

14. (dokon, qiyin) Protsedura: CREATE PROCEDURE narx_oshir(foiz numeric) barcha narxni oshiradi; CALL qiling va yig'indini ko'rsating.

Kutilgan natija
2967140

15. (maktab, oson) Funksiya baho_soz(b int): 5 'a''lo', 4 'yaxshi', 3 'qoniqarli', else 'yomon'; baho_soz(4).

Kutilgan natija
yaxshi

16. (maktab, o'rta) Funksiya ortacha(o int): o'quvchining o'rtacha bali; 1-o'quvchi (2 xona).

Kutilgan natija
1.00

17. (maktab, o'rta) FOR tsikl bilan qatorlar: RETURNS TABLE yordamida sinf_royxati(s int) o'quvchi ismlari; sinf 1 soni.

Kutilgan natija
8

18. (maktab, qiyin) Funksiya yosh(t date, d date): to'liq yoshni hisoblasin; yosh(DATE '2008-06-15', DATE '2025-01-01').

Kutilgan natija
16

19. (maktab, qiyin) Protsedura: oqituvchi_maosh_oshir(foiz) va OUT natija emas: CALL qilib maosh yig'indisi.

Kutilgan natija
61050000

20. (bank, oson) Funksiya oylik_tolov(summa numeric, oy int): foizsiz bo'lib to'lashda oylik to'lov (summa/oy). oylik_tolov(1200000, 6).

Kutilgan natija
200000.000000000000

21. (bank, o'rta) Funksiya balans(h int): hisobdagi tranzaksiyalardan qoldiq (kirim +, boshqasi -). balans(1).

Kutilgan natija
6951800.00

22. (bank, o'rta) Pul o'tkazish PL/pgSQL funksiyasi otkaz(a int, b int, s numeric) — yetarli bo'lmasa xato; 1->2 ga 1000 o'tkazing, ikki balansni ko'rsating.

Kutilgan natija
1 | 1233567.00
2 | 2470134.00

23. (bank, qiyin) Funksiya qolgan_qarz(summa numeric, oy int, tolangan int): foizsiz qarzning qolgan qismi (summa - summa/oy*tolangan); qolgan_qarz(12000000,12,5).

Kutilgan natija
7000000.00

24. (bank, qiyin) Funksiya xavf(mijoz int) — mijozning kechikkan qarzlari soniga qarab 'yuqori' (>=1) yoki 'past'; mijoz 1..10 dan yuqorilar soni.

Kutilgan natija
2

25. (kutubxona, oson) Funksiya jarima(kun int): kechikkan kun*500; jarima(7).

Kutilgan natija
3500

26. (kutubxona, o'rta) Funksiya kitob_nusxa(k int): nusxa ni qaytaradi (1-kitob).

Kutilgan natija
2

27. (kutubxona, o'rta) PL/pgSQL: ijaraga_ber(k, a) — nusxa >0 bo'lsa ijara qo'shib nusxani kamaytirsin; 1-kitobni a'zo 1 ga bering; ijaralar soni va kitob nusxasi.

Kutilgan natija
71 | 1

28. (kutubxona, qiyin) Rekursiv funksiya: fib(n) (n<=2 uchun 1); fib(15).

Kutilgan natija
610

29. (kutubxona, qiyin) Agregat funksiya: o'rta_geometrik emas, oddiy: SQL funksiya bilan ushlab turish kunlari (qaytarilgan - olingan) hisoblab, 14 kundan ortiq ijaralar soni (funksiyadan foydalaning).

Kutilgan natija
8

30. (dokon, qiyin) Window ichida funksiya: kategoriya_narx_ortacha(k) funksiyasi va uni o'z kategoriyasidan qimmat mahsulotlar soni uchun ishlating.

Kutilgan natija
11