Основы (асослар)
Download 0.95 Mb.
|
PL-SQL Маъруза матни
- Bu sahifa navigatsiya:
- Курсор атрибутлари қ ийматлари
- Ошкормас курсор атрибутлари
- %ISOPEN Oracle SQL курсорини уни бажаришдан сўнг автомат тарзда ёпади. Шу сабабли %ISOPEN атрибут ҳамма вақт FALSE қиймат қайтаради.. %NOTFOUND
- Хатоликларга ишлов бериш
%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; Курсор атрибутлари қийматлари
Мисоллар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 жумлаларнинг бажарилиши ҳақидаги ахборотларни қайтаради. %FOUNDSQL жумласи бажарилгунга қадар %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, ...); %ISOPENOracle 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: |
Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling
ma'muriyatiga murojaat qiling