PL-SQL REF CURSOR

BLR

Erfahrenes Mitglied
Hallo,

Ich möchte einen REF Cursor benutzen.
Dieser wird auf folgender Seite erklärt:
http://docs.oracle.com/cd/B10500_01/appdev.920/a96624/11_dynam.htm

Mein Problem ist bei "OPEN" und zwar steht da:

SQL:
OPEN emp_cv FOR -- open cursor variable
'SELECT ename, sal FROM emp WHERE sal > :s' USING my_sal;

In meinem Fall wäre sowas:

OPEN cursor FOR
'SELECT ' + variableSpalte + ' FROM ' + variableTabelle

Wie kriege ich das hin?? kann man mit dem Plus-Operator Chars mit CharsVariablen miteinander verbinden?

Danke für jeden Tipp
 
Hi,

Keine Ahnung ob sowas geht, aber der Operator zum String zusammenfügen ist meines Wissens nach "||" und nicht "+".

Grüße,
BK
 
Bratkartoffel hat recht mit dem string concat, in Oracle ist das ||.

Was aber deine eigentliche Frage betrifft, schau mal die Website an die du gepostet hast. Dort wird der dynamische Teil ausschliesslich für den set oder where Teil verwendet. Nie für einen Spalten- oder Tabellennamen. Mir wäre nicht bekannt, dass man so mit variablen Spalten und Tabellen dynamisch bestimmen kann.
Was du aber machen kannst ist manuell einen String zusammenzubauen und diesen dann mit EXECUTE IMMEDIATE ausführen.

Z.B.
SQL:
  v_sql_query :=    'SELECT  '
                 || p_COLUMN_NAME     
                 || '  FROM  '
                 || p_OWNER
                 || '.'
                 || p_TABLE_NAME      
                 || ' WHERE condition = '''
                 || p_CONDITION
                 || '''';

  BEGIN
     EXECUTE IMMEDIATE v_sql_query;
  EXCEPTION
    WHEN OTHERS THEN
     p_RETURN := 'FAILED SELECT '
        || '; OWNER = ' || p_OWNER
        || '; TABLE = ' || p_TABLE_NAME
        || '; COLUMN = ' || p_COLUMN_NAME;
     dbms_output.put_line(SQLCODE);
  END;
 
Vielen Dank für den Tipp,
habs gemacht, ich hoffe das dient meinem eigentlich Zweck, wenn nicht, dann meld ich mich noch mal^^
 

Neue Beiträge

Zurück