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


Курсор ўзгарувчисидан қаторларни олиш


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

Курсор ўзгарувчисидан қаторларни олиш


FETCH жумласи кўп-қаторли сўровнинг натижавий тўпламидан қаторларни битта-битта олиш учун ишлатилади. Унинг синтаксиси:
FETCH {курсор_ўзгарувчиси_номи | :host_ курсор_ўзгарувчиси_номи }
INTO { ўзгарувчи_номи [,ўзгарувчи_номи]... | ёзув_номи};

Масалан:
LOOP


/* курсор ўзгарувчисидан қатор олиш. */
FETCH emp_cv INTO emp_rec;
EXIT WHEN emp_cv%NOTFOUND; /* охирги қатор олиниши билан цикл тугатилади */
--берилганларни ёзиш жараёни
END LOOP;


Курсор ўзгарувчисини ёпиш


CLOSE жумласи курсор ўзгарувчисини ёпади. Унинг синтаксиси:
CLOSE { курсор_ўзгарувчиси_номи | :host_ курсор_ўзгарувчиси_номи);

Масалан:
LOOP


FETCH emp_cv INTO emp_rec;
EXIT WHEN emp_cv%NOTFOUND;
-- берилганларни ёзиш жараёни
END LOOP;
/* курсор_ўзгарувчисини_ёпиш. */
CLOSE emp_cv;


1 мисол


Берилганлар базасидаги асосий библиотека даврий китоблари излаб топиб берувчи процедурани қараб чиқамиз.
CREATE PACKAGE cv_types AS
TYPE LibCurTyp IS REF CURSOR;
...
END cv_types;

CREATE PROCEDURE find_item (title VARCHAR2(100),


lib_cv IN OUT cv_types.LibCurTyp) AS
code BINARY_INTEGER;
BEGIN
SELECT item_code FROM titles INTO code
WHERE item_title = title;
IF code = 1 THEN
OPEN lib_cv FOR SELECT * FROM books
WHERE book_title = title;
ELSIF code = 2 THEN
OPEN lib_cv FOR SELECT * FROM periodicals
WHERE periodical_title = title;
ELSIF code = 3 THEN
OPEN lib_cv FOR SELECT * FROM tapes
WHERE tape_title = title;
END IF;
END find_item;

2 мисол


Библиотека филиалидаги мижоз томонидаги дастур олинган ахборотни кўриш учун қуйидаги PL/SQL блокидан фойдаланиш мумкин.
DECLARE
lib_cv cv_types.LibCurTyp;
book_rec books%ROWTYPE;
periodical_rec periodicals%ROWTYPE;
tape_rec tapes%ROWTYPE;
BEGIN
get_title(:title); -- title is a host variable
find_item(:title, lib_cv);
FETCH lib_cv INTO book_rec;
display_book(book_rec);
EXCEPTION
WHEN ROWTYPE_MISMATCH THEN
BEGIN
FETCH lib_cv INTO periodical_rec;
display_periodical(periodical_rec);
EXCEPTION
WHEN ROWTYPE_MISMATCH THEN
FETCH lib_cv INTO tape_rec;
display_tape(tape_rec);
END;
END;

Download 0.95 Mb.

Do'stlaringiz bilan baham:
1   ...   26   27   28   29   30   31   32   33   ...   58




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