ストアド・プロシージャ動的カーソルの使用例


データテーブルの構造は次のとおりです.
SQL> desc record;
Name        Type         Nullable Default Comments 
----------- ------------ -------- ------- -------- 
RECORD_GUID VARCHAR2(50) Y                         
DNIS        VARCHAR2(15) Y                         
ANI         VARCHAR2(15) Y                         
STARTTIME   DATE         Y                         
ENDTIME     DATE         Y                         
STAFFID     VARCHAR2(10) Y                         
AGENTID     VARCHAR2(10) Y                         
EXTENSION   VARCHAR2(20) Y

 
指定された電話とある年月の電話記録を表示し、ストレージ・プロシージャを使用して実現します.
create or replace procedure proc_getrecord(i_dnis in varchar2,
                                           i_time in varchar2)
/*
  :        
    :i_dnis     ,i_time     (  201401)
    :2014.06.26
*/
as
sqlstr varchar2(5000);
begin
  declare
    type rc is ref cursor;
    c_rc rc;
    r_record record%rowtype;
  begin
   sqlstr:='select * from king.record where dnis =:1’||
           ' and replace(substr(starttime, 1, 7), ''-'', '''')=:2';
   open c_rc for sqlstr using i_dnis,i_time;
   fetch c_rc into r_record;
   while c_rc%found loop
       dbms_output.put_line(
       '    :'||r_record.starttime||'  '||
       '    :'||r_record.endtime||'  '||
       '    :'||r_record.dnis||'  '||
       '    :'||r_record.ani);
    fetch c_rc into r_record;
    end loop;
    close c_rc;
  end;
end;