Oracle
 sql >> база данни >  >> RDS >> Oracle

Извличане и групово събиране от REF CURSOR, върнат от процедура

Не е разрешено използването на променливи на курсора в for цикъл на курсора (FOR i IN myCursor ). Трябва да извличате от променливата на курсора изрично един ред наведнъж, като използвате FETCH INTO оператор и обикновен оператор за цикъл например или използвайте FETCH BULK COLLECT INTO за попълване на колекция. Например:

SQL> declare
  2    TYPE t_clientID_nt IS TABLE OF dual%rowtype;
  3    clientID_nt t_clientID_nt;
  4  
  5    l_cur sys_refcursor;
  6  
  7    procedure OpenAndPopulateCursor(p_cur in out sys_refcursor) is
  8    begin
  9      open p_cur for
 10        select *
 11         from dual;
 12    end;
 13  
 14  begin
 15    OpenAndPopulateCursor(l_cur);
 16  
 17    if l_cur%isopen
 18    then
 19      fetch l_cur bulk collect into clientID_nt;
 20    end if;
 21  
 22    dbms_output.put_line(concat( to_char(clientID_nt.count) 
 23                               , ' record(s) has/have been fetched.'));
 24  end;
 25  /

 1 record(s) has/have been fetched.

 PL/SQL procedure successfully completed



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. HikariCP 1.4.0 MBean InstanceNotFoundException

  2. Предотвратяване на отпадане на таблица в целева схема в Oracle Streams

  3. Каква е разликата между || оператор и функция concat в Oracle?

  4. Как да измерим ефективността на заявката в Oracle

  5. excel към oracle db с помощта на VS 2005 C#