lojayn
asked on
pl/sql
how can I put the following pl/sql cursor in a package:
DECLARE
v_instr instructor.instructor_Id%t ype := &id_instr;
CURSOR c_instr IS
SELECT i.instructor_id, i.last_name,c.description
from instructor i join section s
on i.instructor_id = s.instructor_id
join course c
on s.course_no = c.course_no
WHERE i.instructor_id=v_instr;
vr_instr c_instr%rowtype;
BEGIN
DBMS_OUTPUT.PUT_LINE('inst ructor '||v_instr);
OPEN c_instr;
LOOP
FETCH c_instr INTO vr_instr;
EXIT WHEN c_instr%notfound;
DBMS_OUTPUT.PUT_LINE(vr_in str.instru ctor_id||' , '||vr_instr.last_name ||', '||vr_instr.description);
END LOOP;
DBMS_OUTPUT.PUT_LINE('Ther e are '||c_instr%rowcount||' classes.');
CLOSE c_instr;
EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('An error has occurred');
END;
DECLARE
v_instr instructor.instructor_Id%t
CURSOR c_instr IS
SELECT i.instructor_id, i.last_name,c.description
from instructor i join section s
on i.instructor_id = s.instructor_id
join course c
on s.course_no = c.course_no
WHERE i.instructor_id=v_instr;
vr_instr c_instr%rowtype;
BEGIN
DBMS_OUTPUT.PUT_LINE('inst
OPEN c_instr;
LOOP
FETCH c_instr INTO vr_instr;
EXIT WHEN c_instr%notfound;
DBMS_OUTPUT.PUT_LINE(vr_in
END LOOP;
DBMS_OUTPUT.PUT_LINE('Ther
CLOSE c_instr;
EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('An error has occurred');
END;
or were you looking for a procedure that would mimic your entire pl/sql block and open/fetch/close the cursor?
if you want the latter then try something like this...
CREATE OR REPLACE PACKAGE your_package
IS
PROCEDURE process_cursor(p_instr IN instructor.instructor_id%T YPE);
END;
CREATE OR REPLACE PACKAGE BODY your_package
IS
PROCEDURE process_cursor(p_instr IN instructor.instructor_id%T YPE)
IS
v_count INTEGER := 0;
BEGIN
DBMS_OUTPUT.put_line('inst ructor ' || p_instr);
FOR vr_instr IN (SELECT i.instructor_id, i.last_name, c.description
FROM instructor i
JOIN section s
ON i.instructor_id = s.instructor_id
JOIN course c
ON s.course_no = c.course_no
WHERE i.instructor_id = p_instr)
LOOP
v_count := v_count + 1;
DBMS_OUTPUT.put_line(
vr_instr.instructor_id
|| ', '
|| vr_instr.last_name
|| ', '
|| vr_instr.description
);
END LOOP;
DBMS_OUTPUT.put_line('Ther e are ' || v_count || ' classes.');
EXCEPTION
WHEN OTHERS
THEN
DBMS_OUTPUT.put_line('An error has occurred');
END;
END;
CREATE OR REPLACE PACKAGE your_package
IS
PROCEDURE process_cursor(p_instr IN instructor.instructor_id%T
END;
CREATE OR REPLACE PACKAGE BODY your_package
IS
PROCEDURE process_cursor(p_instr IN instructor.instructor_id%T
IS
v_count INTEGER := 0;
BEGIN
DBMS_OUTPUT.put_line('inst
FOR vr_instr IN (SELECT i.instructor_id, i.last_name, c.description
FROM instructor i
JOIN section s
ON i.instructor_id = s.instructor_id
JOIN course c
ON s.course_no = c.course_no
WHERE i.instructor_id = p_instr)
LOOP
v_count := v_count + 1;
DBMS_OUTPUT.put_line(
vr_instr.instructor_id
|| ', '
|| vr_instr.last_name
|| ', '
|| vr_instr.description
);
END LOOP;
DBMS_OUTPUT.put_line('Ther
EXCEPTION
WHEN OTHERS
THEN
DBMS_OUTPUT.put_line('An error has occurred');
END;
END;
ASKER
considering the first case,looking to declare the cursor in a package. How would I use the cursor after creating the package?
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
CREATE OR REPLACE PACKAGE your_package
IS
CURSOR c_instr(p_instr IN instructor.instructor_id%T
IS
SELECT i.instructor_id, i.last_name, c.description
FROM instructor i
JOIN section s
ON i.instructor_id = s.instructor_id
JOIN course c
ON s.course_no = c.course_no
WHERE i.instructor_id = p_instr;
vr_instr c_instr%ROWTYPE;
END;