Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Przekazywanie nazwy tabeli do kursora

Aby rozwinąć odpowiedź JackPDouglasa, nie możesz użyć nazwy parametru jako nazwy [tabeli] w kursorze. Musisz użyć dynamicznego sql do REF CURSOR

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 ;
/

Przykład rozpoczęcia

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 ;

Wyjście:

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

EDYCJA:Dodano Close CUR, który został słusznie zasugerowany przez @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. Struktura testów jednostkowych dla Oracle PL/SQL?

  2. Wybieranie zarówno MIN, jak i MAX z tabeli jest wolniejsze niż oczekiwano

  3. ORA-00942:tabela lub widok nie istnieje dla tabeli i kolumn mieszanych wielkości liter

  4. Oracle SQL Query do pobrania określonego zdarzenia przy użyciu określonego warunku w xpath?

  5. Pobieranie określonych ciągów w ciągu za pomocą Oracle SQL