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

Предаване на името на таблицата към курсора

За да разширите отговора на JackPDouglas, не можете да използвате име на параметър като име на [таблица] в курсор. Трябва да използвате динамичен sql в REF КУРСОР

http://download.oracle.com /docs/cd/B10500_01/appdev.920/a96590/adg09dyn.htm#24492

CREATE OR REPLACE PROCEDURE dynaQuery(
       TAB IN VARCHAR2, 
       sid in number ,
       cur OUT NOCOPY sys_refcursor) IS
 query_str VARCHAR2(200);
BEGIN
    query_str := 'SELECT USERNAME FROM ' || tab
      || ' WHERE sid= :id';
dbms_output.put_line(query_str);
    OPEN cur FOR query_str USING sid;
END ;
/

Пример за начало

create table test1(sid number, username varchar2(50));
insert into test1(sid, username) values(123,'abc');
insert into test1(sid, username) values(123,'ddd');
insert into test1(sid, username) values(222,'abc');
commit;
/



 declare 
  cur  sys_refcursor ;
  sid number ;
  uName varchar2(50) ;
  begin
  sid := 123; 
  dynaQuery('test1',sid, cur);
   LOOP
     FETCH cur INTO uName;
     DBMS_OUTPUT.put_line(uName);
     EXIT WHEN cur%NOTFOUND;
     -- process row here
   END LOOP;
CLOSE CUR;


  end ;

Изход:

SELECT USERNAME FROM test1 WHERE sid= :id
abc
ddd
abc
ddd
ddd

РЕДАКТИРАНЕ:Добавен Close CUR, който правилно беше предложен от @JackPDouglas




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Предизвикателство за тестване на база данни на Oracle – Сравнете данните за схемата

  2. FNDCPASS &AFPASSWD

  3. Как да поправя повреден файл за експортиране на Oracle (.dmp)?

  4. Възможно ли е свързване към друга база данни?

  5. Колко време отнема, за да станете сравнително опитни в Oracle, даден SQL Server