2017-01-24 2 views
0

Ich möchte eine Zeichenfolge wie "select 'a' as alphabet, 1 as number from dual" an Prozedur übergeben und verwenden Sie die gleiche, um einen Cursor zuzuweisen.Oracle Prozedur-Cursor als varchar2 Variable

Hier ist mein Code, wie mein proc wie

sieht
CREATE OR REPLACE PROCEDURE ME(sqlstmt in varchar2) 
AS 
    C1 CURSOR IS sqlstmt; 

BEGIN 
    FOR REC IN C1 
     LOOP 
      DBMS_OUTPUT.PUT_LINE(REC.alphabet); 
     END LOOP; 
END; 

sofort und andere Sachen versucht auszuführen, aber nichts half.

Antwort

0

Sie benötigen nur eine etwas andere Syntax, um einen Cursor zu öffnen, basierend auf einer Auswahl in einem varchar2 gespeichert:

CREATE OR REPLACE PROCEDURE ME(sqlstmt IN VARCHAR2) AS 
    C1          SYS_REFCURSOR; 
    vAlphabet varchar2(100); 
    vNumber  number; 
BEGIN 
    OPEN C1 FOR sqlstmt; 

    LOOP 
     FETCH C1 INTO vAlphabet, vNumber; 

     EXIT WHEN C1%NOTFOUND; 
     DBMS_OUTPUT.PUT_LINE(vAlphabet); 
    END LOOP; 
END; 

Der Prozeduraufruf, Aufmerksamkeit reservierte Worte zu vermeiden, wie 'number' in der Aussage:

SQL> exec ME('select ''a'' as alphabetValue, 1 as numberValue from dual'); 
a 

PL/SQL procedure successfully completed. 

Beachten Sie, dass Sie im Voraus die Anzahl und den Typ der Spalten wissen müssen, die vom Cursor zurückgegeben werden, um Daten abzurufen.

+0

Hilft große Zeit. Danke vielmals. – Jay

Verwandte Themen