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


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


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

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


OPEN-FOR, FETCH, ва CLOSE жумлалари орқали курсор ўзгарувчисини бошқариш мумкин.

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


OPEN-FOR жумласи ўзгарувчисини кўп-қаторли сўров билан боғлайди, сўровни бажаради ва натижавий тўпламни аниқлайди. Унинг синтаксиси қуйидагича:
OPEN {курсор_ўзгарувчиси_номи |
:host_ курсор_ўзгарувчиси_номи }
FOR select_жумласи;
Масалан:
IF NOT emp_cv%ISOPEN THEN
/* Курсор ўзгарувчисини очиш */
OPEN emp_cv FOR SELECT * FROM emp;
END IF;
Курсор ўзгарувчиси формал параметр сифатида:
CREATE PACKAGE emp_data AS
...
TYPE EmpCurTyp IS REF CURSOR RETURN emp%ROWTYPE;
PROCEDURE open_emp_cv (emp_cv IN OUT EmpCurTyp);
END emp_data;
CREATE PACKAGE BODY emp_data AS
...
PROCEDURE open_emp_cv (emp_cv IN OUT EmpCurTyp) IS
BEGIN
OPEN emp_cv FOR SELECT * FROM emp;
END open_emp_cv;
END emp_data;

Курсор ўзгарувчиларини очиш учун алоҳида-сақланадиган процедуралардан ҳам фойдаланиш мумкин:


CREATE PACKAGE cv_types AS
TYPE GenericCurTyp IS REF CURSOR;
TYPE EmpCurTyp IS REF CURSOR RETURN emp%ROWTYPE;
TYPE DeptCurTyp IS REF CURSOR RETURN dept%ROWTYPE;
...
END cv_types;

Пакетда аниқланган курсордан фойдаланиш:


CREATE PROCEDURE open_emp_cv (emp_cv IN OUT cv_types.EmpCurTyp) AS
BEGIN
OPEN emp_cv FOR SELECT * FROM emp;
END open_emp_cv;

Шартга қараб курсорни очиш:


CREATE PACKAGE emp_data AS
TYPE GenericCurTyp IS REF CURSOR;
TYPE EmpCurTyp IS REF CURSOR RETURN emp%ROWTYPE;
PROCEDURE open_emp_cv (emp_cv IN OUT EmpCurTyp, choice NUMBER);
END emp_data;

CREATE PACKAGE BODY emp_data AS


PROCEDURE open_emp_cv (
emp_cv IN OUT EmpCurTyp,
choice NUMBER) IS
BEGIN
IF choice = 1 THEN
OPEN emp_cv FOR SELECT * FROM emp WHERE comm IS NOT NULL;
ELSIF choice = 2 THEN
OPEN emp_cv FOR SELECT * FROM emp WHERE sal > 2500;
ELSIF choice = 3 THEN
OPEN emp_cv FOR SELECT * FROM emp WHERE deptno = 20;
END IF;
END open_emp_cv;
END emp_data;

Қулайроқ бўлиши учун курсор ўзгарувчисини ҳар хил турни қайтарувчи сўровларни бажарувчи процедурага узатишингиз мумкин:


CREATE PACKAGE BODY emp_data AS
PROCEDURE open_cv (
generic_cv IN OUT GenericCurTyp,
choice NUMBER) IS
BEGIN
IF choice = 1 THEN
OPEN generic_cv FOR SELECT * FROM emp;
ELSIF choice = 2 THEN
OPEN generic_cv FOR SELECT * FROM dept;
ELSIF choice = 3 THEN
OPEN generic_cv FOR SELECT * FROM salgrade;
END IF;
END open_cv;
END emp_data;

Download 0.95 Mb.

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




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