Бул турдаги ўзгарувчиларига 3 хил қиймат бериш мумкин:
Масалан
DECLARE
done BOOLEAN
...
BEGIN
done: = FALLS
WHILE NOT done LOOP
...
END LOOP;
END;
ёки
done: = (count > 500);
Берилганлар базасидаги қийматлар
Берилганлар базасида жойлашган қийматларни ўзгарувчиларга бериш учун SELECT жумласидан фойдаланиш мумкин:
DECLARE
my_empno emp.empno%TYPE;
my_ename emp.ename%TYPE;
wages NUMBER(7,2);
BEGIN
...
SELECT ename, sal + comm
INTO last_name, wages FROM emp
WHERE empno = emp_id;
Аммо сиз устун қийматларини бул ўзгарувчиларигаберолмайсиз.
Ифода ва солиштириш
Ифодалар операнд ва амаллар ёрдамида тузилади. Операнд ўзгарувчи, ўзгармас, литерал ёки чақираладиган функция бўлиши мумкин. Содда арифметик ифода мисолини келтирамиз:
-X / 2 + 3
Унар амаллар (- минус амали каби) битта операнд устида бажарилади, бинар амаллар (/ бўлиш амали каби) эса иккита операнд устида бажарилади.
Амалларни бажариш тартиби
Ифодаларда амаллар қуйидаги жадвалда кўрсатилган тартибда (юқоридан пастга қараб) бажарилади.
Оператор
|
Амал
|
**, NOT
|
Даражага кўтариш, инкор қилиш
|
+, -
|
унар минус ва плюс
|
*, /
|
Кўпайтириш, бўлиш
|
+, -, ||
|
қўшиш, айириш, конкатенация амали
|
=, ! =, <, >, <=, >=,
IS NULL, LIKE, BETWEEN, IN
|
Солишитириш
|
AND
|
Мантиқий кўпайтириш
|
OR
|
Мантиқий қўшиш
|
Мантиқий амаллар
Мантиқий амаллар қуйидаги жадвалда кўрсатилган тарзда амалга оширилади.
x
|
y
|
x AND y
|
x OR y
|
NOT x
|
TRUE
|
TRUE
|
TRUE
|
TRUE
|
FALSE
|
TRUE
|
FALSE
|
FALSE
|
TRUE
|
|
TRUE
|
NULL
|
NULL
|
TRUE
|
|
FALSE
|
TRUE
|
FALSE
|
TRUE
|
TRUE
|
FALSE
|
FALSE
|
FALSE
|
FALSE
|
|
FALSE
|
NULL
|
FALSE
|
NULL
|
|
NULL
|
TRUE
|
NULL
|
TRUE
|
NULL
|
NULL
|
FALSE
|
FALSE
|
NULL
|
|
NULL
|
NULL
|
NULL
|
NULL
|
|
Солиштириш амаллари
қуйидаги жадвалда солишитириш амалларининг маъноси келтирилган:
Оператор
|
Маъноси
|
=
|
тенг
|
<>, !=, ~=
|
тенг эмас
|
<
|
кичик
|
>
|
катта
|
<=
|
кичик ёки тенг
|
>=
|
катта ёки тенг
| IS NULL оператори
IS NULL оператори TRUE бул қиймат қайтаради, агар унинг операнди NULL қийматга эга бўлса ва FALSE қийматни қайтаради, агар унинг операнди NULL фарқли қийматга эга бўлса. Масалан
IF variable IS NULL THEN ...
LIKE
LIKE оператори белгили қийматларни солиштириш учун ишлатилади ва у бул қиймат қайтаради. Масалан ename ўзгарувчиси ‘JONSON’ қийматига эга бўлса
ename LIKE 'J%SON'
ифода TRUE қиймат қайтаради. Бу ерда % белгилар тўпламини билдиради, у бўш ҳам бўлиши мумкин.
BETWEEN оператори
BETWEEN оператори қийматни берилган интервалда ётиш ёки ётмаслигини аниқлаб беради. Масалан
45 BETWEEN 38 AND 44
ифода FALSE қийматни қайтаради.
IN оператори
IN оператори қиймат берилган тўпламнинг бирор элементи билан устма-уст тушишини текширади. Тўпламда NULL қатнашиши мумкин, аммо у инобатга олинмайди. Масалан
DELETE FROM emp WHERE ename IN (NULL, 'KING', 'FORD');
ифода ename устунининг қиймати NULL бўлган қаторларни ўчирмайди. NOT IN оператори эса тўпламда NULL иштирок этганда FALSE қиймат қайтаради. Масалан
DELETE FROM emp WHERE ename NOT IN (NULL, 'KING');
ифода ҳеч қандай қаторларни ўчирмайди.
Конкатенация оператори
Конкатенация оператори битта белгили қаторни иккинчисига қўшиш учун ишлатилади. Масалан
'suit' || 'case' |= 'suitcase'
Бул ифодалар
PL/SQL ўзгарувчи ва ўзгармасларни солиштиришга имкон беради. Ушбу солиштиришлар бул ифодалар дейилади.
Арифметик ифодалар
Сонларни тенгликга ёки тенг эмасликга текшириш мумкин:
number1 = 75;
number2 = 70;
бўлганда қуйидаги ифода TRUE қиймат қайтаради:
number1 > number2
Белгили ифодалар
Белгили қийматларни ҳам тенгликга ёки тенг эмасликга текшириш мумкин:
string1 := 'Kathy';
string2 := 'Kathleen';
бўлганда, қуйидаги ифода TRUE қиймат қайтаради:
string1 > string2
Санавий ифодалар
Саналарни ҳам солиштириш мумкин:
date1 = '01-JAN-91';
date2 = '31-DEC-90';
бўлганда, қуйидаги ифода TRUE қиймат қайтаради:
date1 > date2
NULL қиймати
NULL қиймати билан ишлаганда қуйидаги қоидаларни унутманг:
NULL қатнашган солиштиришлар ҳамма вақт NULL қайтаради.
NOT мантиқий операторини NULL қўллаганда NULL ҳосил бўлади.
Шартли ифодаларда шарт натижаси NULL бўлса, унга боғлиқ бўлган жумлалар кетма-кетлиги бажарилмайди. Масалан
Мисол 1.
x := 5;
y := NULL;
...
IF x != y THEN -- TRUE ни эмас NULL қайтаради.
Операторлар кетма-кетлиги -- бажарилмайди.
END IF;
Мисол 2.
a := NULL;
b := NULL;
...
IF a = b THEN -- TRUE ни эмас NULL қайтаради.
Операторлар кетма-кетлиги -- бажарилмайди.
END IF;
NOT оператори
NOT мантиқий операторини NULL қўллаганда NULL ҳосил бўлишини эслатиб ўтамиз. Шундай қилиб қуйидаги иккита жумла ҳамма вақт ҳам эквивалент эмас:
IF x > y THEN | IF NOT x > y THEN
high := x; | high := y;
ELSE | ELSE
high := y; | high := x;
END IF; | END IF;
ELSE жумласидаги операторлар кетма-кетлиги бажарилади, агарда IF шарти FALSE ёки NULL бўлса. Демак x ва у бири ёки иккаласи NULL бўлса, биринчи IF жумла y қийматини high ўзгарувчига беради, лекин иккинчи IF жумла x қийматини high ўзгарувчига беради.
Нол узунликдаги қатор
PL/SQL нол узунликдаги қаторларни NULL деб қабул қилади:
null_string := TO_VARCHAR2('');
zip_code := SUBSTR(address, 25, 0);
valid := (name != '');
ўзгарувчилар NULL қийматни қабул қилади.
Конкатенация амали
Конкатенация амали NULL операндларни инкор қилади:
'apple'|| NULL || NULL || 'sauce' = 'applesauce'
Функциялар
Агар функцияга бўш қиймат узатилса у ҳолда у ҳам бўш қиймат қайтаради, қуйидаги ҳоллар бундан мустасно.
қуйидаги мисолда rating устунининг қиймати NULL бўлганда DECODE функцияси 1000 қийматни қайтаради:
SELECT DECODE(rating, NULL, 1000, 'C', 2000, 'B', 4000, 'A', 5000)
INTO credit_limit FROM accts WHERE acctno = my_acctno;
қуйидаги мисолда hire_date - нинг қиймати NULL бўлганда NVL функцияси SYSDATE қийматни қайтаради:
start_date := NVL(hire_date, SYSDATE);
new_string := REPLACE(old_string, NULL, my_string);
мисолда old_string ва new_string қийматлар бир хил.
syllabified_name := 'Gold-i-locks';
name := REPLACE(syllabified_name, '-', NULL);
мисолда name қиймати 'goldilocks' бўлади.
Ички қурилган функциялар
Ички қурилган функцияларни қуйидаги категорияларга бўлиш мумкин:
Хатоларни рўйхатга олиш функциялари
Сонли функциялар
Белгили функциялар
Берилганлар турларини алмаштириш функциялари
Саналар билан ишлайдиган функциялар
Объект билан ишлайдиган функциялар
Аралаш функциялар
Хар бир категориядаги функциялар рўйхатини қуйидаги жадвалда келтирамиз:
Do'stlaringiz bilan baham: |