Oracle
 sql >> डेटाबेस >  >> RDS >> Oracle

टेबलनेम को कर्सर में पास करना

जैकपीडौगलस के उत्तर पर विस्तार करने के लिए, आप एक कर्सर में [तालिका] नाम के रूप में एक परम नाम का उपयोग नहीं कर सकते हैं। आपको डायनेमिक sql का उपयोग 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 ;
/

उदाहरण प्रारंभ करें

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

संपादित करें:जोड़ा गया क्लोज 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 sql में संग्रहीत करें

  2. Oracle:अद्यतन खंड के साथ CTE का उपयोग करना

  3. Oracle 21c को SQL सर्वर से कनेक्ट करना

  4. Oracle में हमेशा 2 दशमलव स्थान प्राप्त करने का सबसे अच्छा तरीका क्या है?

  5. Oracle क्वेरी त्रुटि दे रही है