END;
FETCH cv_sal1 INTO rec_sal ;
CLOSE cv_sal1;
END;
2.8.5. Передача курсорной переменной в качестве параметра
· Создание локального модуля внутри программы.
DECLARE
TYPE sal_curtype IS REF CURSOR RETURN sal%ROWTYPE;
PROCEDURE open_query (p_CV OUT sal_curtype) IS
cv_sal sal_curtype;
BEGIN
OPEN cv_sal FOR select * from sal;
p_CV := cv_sal;
END;
. . .
BEGIN
. . .
END;
· Создание отдельной процедуры.
PACKAGE pack_lib IS
TYPE sal_curtype IS REF CURSOR RETURN sal%ROWTYPE;
END;
PROCEDURE open_query (p_CV OUT pack_lib.sal_curtype) IS
cv_sal pack_lib.sal_curtype;
BEGIN
. . .
END;
2.9. Курсорные выражения
Курсорное выражение – это выражение, включающее специальный оператор CURSOR и определяющее вложенный курсор.
DECLARE
CURSOR c_sal IS
SELECT snum, sname FROM sal;
CURSOR c_ord(p_Sal NUMBER) IS
SELECT odate,amt FROM ord WHERE snum = p_Sal;
BEGIN
FOR v_sal IN c_sal LOOP
FOR v_ord IN c_ord(v_sal. snum) LOOP
DBMS_OUTPUT.PUT_LINE
(v_sal.sname ||' '|| v_ord.odate ||' '|| v_ord.amt);
END LOOP;
END LOOP;
END;
DECLARE
TYPE ord_curtype IS REF CURSOR;
CURSOR c_sal_ord IS
SELECT s.sname,
CURSOR ( SELECT o.odate,o.amt FROM ord o
WHERE o.snum = s.snum)
FROM sal s;
ord_cur ord_curtype;
v_name sal.sname%TYPE;
v_date ord.odate%TYPE;
v_sum ord.amt%TYPE;
BEGIN
OPEN c_sal_ord;
LOOP
FETCH c_sal_ord INTO v_name, ord_cur;
EXIT WHEN c_sal_ord%NOTFOUND;
LOOP
FETCH ord_cur INTO v_date ,v_sum;
EXIT WHEN ord_cur %NOTFOUND;
DBMS_OUTPUT.PUT_LINE(v_name ||' '||v_date ||' '||v_sum);
END LOOP;
END LOOP;
CLOSE c_sal_ord;
END;
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.