Skip to main content
 

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:

  1. 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
  2. La clausula USING non può speicificare il valore NULL, un possibile workaround è l'uso di una variabile non inizializzata come quiExample 7-3
  3. Per dettagli sulla sintassi vai a OPEN-FOR Statement.
  4. Uso una FETCH per recuperare i record uno alla volta
  5. Per dettagli sulla sintassi vai a FETCH Statement
  6. Usate CLOSe per chiudere il ref-cursor
  7. 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;

Dynamic