Uso dei ref-Cursors
Uso di OPEN-FOR, FETCH, eCLOSE
Un SQL dinamico rappresenta una SELECT che resistuisce più righe può essere procvessato in modo nativo come segue:
- Uso un OPEN-FOR per associare la/le variabili al SQL dinamico. La clausula USING di OPEN-FOR specifica un 'bind' tra un parametro e un segnaposto all' interno dell SQL
- La clausula USING non può speicificare il valore NULL, un possibile workaround è l'uso di una variabile non inizializzata come quiExample 7-3
- Per dettagli sulla sintassi vai a OPEN-FOR Statement.
- Uso una FETCH per recuperare i record uno alla volta
- Per dettagli sulla sintassi vai a FETCH Statement
- Usate CLOSe per chiudere il ref-cursor
- Per dettagli sulla sitnassi CLOSE Statement.
Example 7-4 elenca gli impiegati che sono anche manager, resituendo i record uno alla volta
DECLARE
TYPE EmpCurTyp IS REF CURSOR;
v_emp_cursor EmpCurTyp;
emp_record employees%ROWTYPE;
v_stmt_str VARCHAR2(200);
v_e_job employees.job%TYPE;
BEGIN
-- Dynamic SQL statement with placeholder:
v_stmt_str := 'SELECT * FROM employees WHERE job_id = :j';
-- Open cursor & specify bind argument in USING clause:
OPEN v_emp_cursor FOR v_stmt_str USING 'MANAGER';
-- Fetch rows from result set one at a time:
LOOP
FETCH v_emp_cursor INTO emp_record;
EXIT WHEN v_emp_cursor%NOTFOUND;
END LOOP;
-- Close cursor:
CLOSE v_emp_cursor;
END;