Основы (асослар)


Download 0.95 Mb.
bet33/58
Sana28.12.2022
Hajmi0.95 Mb.
#1011518
1   ...   29   30   31   32   33   34   35   36   ...   58
Bog'liq
PL-SQL Маъруза матни

%NOTFOUND


%NOTFOUND мантиқан %FOUND қарама қаршидир. %NOTFOUND атрибут FALSE қиймат қайтаради, агар охирги уриншида қатор олинган бўлса, акс ҳолда TRUE қиймат қайтаради.
LOOP
FETCH c1 INTO my_ename, my_sal, my_hiredate;
EXIT WHEN c1%NOTFOUND;
...
END LOOP;

Биринчи қатор олгунга қадар %NOTFOUND атрибути NULL қийматга эга. Ушбу хавфдан ҳимоялаш учун қуйидаги жумладан фойдаланишингизни тавсия берамиз:


EXIT WHEN c1%NOTFOUND OR ci%NOTFOUND IS NULL;


%ROWCOUNT


%ROWCOUNT олинган қаторлар сонини қайтаради.
LOOP
FETCH c1 INTO my_ename, my_deptno;
IF c1%ROWCOUNT > 10 THEN
...
END IF;
...
END LOOP;


Курсор атрибутлари қийматлари



%FOUND 

%ISOPEN 

%NOTFOUND 

%ROWCOUNT 

OPEN

before

exception

FALSE

exception

exception


after

NULL

TRUE

NULL

0

First FETCH

before

NULL

TRUE

NULL

0


after

TRUE

TRUE

FALSE

1

Next FETCH(es)

before

TRUE

TRUE

FALSE

1


after

TRUE

TRUE

FALSE

data dependent

Last FETCH

before

TRUE

TRUE

FALSE

data dependent


after

FALSE

TRUE

TRUE

data dependent

CLOSE

before

FALSE

TRUE

TRUE

data dependent


after

exception

FALSE

exception

exception







Мисоллар


1 мисол.
DECLARE
num1 data_table.n1%TYPE;
num2 data_table.n2%TYPE;
result temp.col1%TYPE;
CURSOR c1 IS
SELECT n1, n2, n3 FROM data_table WHERE exper_num = 1;
BEGIN
OPEN c1;
LOOP
FETCH c1 INTO num1, num2, num3;
EXIT WHEN c1%NOTFOUND;
result := num2/(num1 + num3);
INSERT INTO temp VALUES (result, NULL, NULL);
END LOOP;
CLOSE c1;
COMMIT;
END;

2 мисол.


DECLARE
CURSOR bin_cur(part_number NUMBER) IS
SELECT amt_in_bin FROM bins
WHERE part_num = part_number AND amt_in_bin > 0
ORDER BY bin_num
FOR UPDATE OF amt_in_bin;
bin_amt bins.amt_in_bin%TYPE;
total_so_far NUMBER(5) := 0;
amount_needed CONSTANT NUMBER(5) := 1000;
bins_looked_at NUMBER(3) := 0;
BEGIN
OPEN bin_cur(5469);
WHILE total_so_far < amount_needed LOOP
FETCH bin_cur INTO bin_amt;
EXIT WHEN bin_cur%NOTFOUND;
-- if we exit, there's not enough to fill the order
bins_looked_at := bins_looked_at + 1;
IF total_so_far + bin_amt < amount_needed THEN
UPDATE bins SET amt_in_bin = 0
WHERE CURRENT OF bin_cur;
-- take everything in the bin
total_so_far := total_so_far + bin_amt;
ELSE -- we finally have enough
UPDATE bins SET amt_in_bin = amt_in_bin
- (amount_needed - total_so_far)
WHERE CURRENT OF bin_cur;
total_so_far := amount_needed;
END IF;
END LOOP;

CLOSE bin_cur;


INSERT INTO temp
VALUES (NULL, bins_looked_at, '<- bins looked at');
COMMIT;
END;

Ошкормас курсор атрибутлари


Ошкормас курсор атрибутлари INSERT, UPDATE, DELETE ёки SELECT INTO жумлаларнинг бажарилиши ҳақидаги ахборотларни қайтаради.

%FOUND


SQL жумласи бажарилгунга қадар %FOUND атрибути NULL қиймат қайтаради. Сўнг %FOUND атрибути TRUE қиймат қайтаради, агар INSERT, UPDATE ёки DELETE жумласи битта ёки ундан кўп қаторларга таъсир қилса ёки SELECT INTO жумласи битта ёки ундан кўп қаторларни қайтарса. Акс ҳолда %FOUND атрибути FALSE қиймат қайтаради. Қуйидаги мисолда қаторларни йўқотиш амали муваффақиятли бажарилса янги қаторни ёзиш амали бажарилади:
DELETE FROM emp WHERE empno = my_empno;
IF SQL%FOUND THEN -- йўқотиш муваффақиятли
INSERT INTO new_emp VALUES (my_empno, my_ename, ...);

%ISOPEN


Oracle SQL курсорини уни бажаришдан сўнг автомат тарзда ёпади. Шу сабабли %ISOPEN атрибут ҳамма вақт FALSE қиймат қайтаради..

%NOTFOUND


%NOTFOUND мантиқан %FOUND атрибутининг қарама-қаршисидир.

%ROWCOUNT


%ROWCOUNT атрибути INSERT, UPDATE ёки DELETE жумлалари томнидан таъсир қилган қаторлар сонини SELECT INTO жумласи қайтарган қаторлар сонини қайтаради.
DELETE FROM emp WHERE ...
IF SQL%ROWCOUNT > 10 THEN --10 кўп қаторлар ўчирилган
...
END IF;

Хатоликларга ишлов бериш



Ушбу бўлимда биз қуйидаги мавзуларга тўхталиб ўтамиз:

белгилар тўплами;
Хатоликлар
Мустасноларнинг ижобий томонлари
Олдиндан аниқланган мустаснолар
Фойдаланувчи томонидан аниқланган мустаснолар
Мустаснолар қандай пайдо бўлади
Мустаснолар қандай тарқалади
Мустанолар қандай такроран вужудга келади
Вужудга келган мустасноларга ишлов бериш
Фойдали усуллар

Download 0.95 Mb.

Do'stlaringiz bilan baham:
1   ...   29   30   31   32   33   34   35   36   ...   58




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