Announcement

Collapse
No announcement yet.

Dictionary: Funkt. Tabellenfelder auslesen - Cursorproblem?

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Dictionary: Funkt. Tabellenfelder auslesen - Cursorproblem?

    Hallo zusammen,

    ich grübel seit einigen Stunden an der Lösung zu einer Aufgabe. Diese lautet:

    Erstellung einer Funktion, die die Felder einer beliebigen Tabelle durch ein Trennzeichen in einem String zurückgibt (Tabellenname und Trennzeichen werden als Parameter übergeben). Das Dictionary ist zu verwenden.

    Mein Lösungsversuch:
    Ich habe einen Cursor1 zum einlesen der Datensätze der Tabelle und einen Cursor2, der via Dictionary die Spaltenüberschriften der jeweiligen Tabelle enthält. In einer doppelt verschachtelten Anweisung möchte ich dann die Datensätze der Reihe nach durchlaufen. Die Felder in den jeweiligen Datensätzen wollte ich durch eine weiter Schleife auslesen. Beispiel:

    Ausgabe: Cursor1.Cursor2
    (Datensatz1.Spaltenüberschrift1)
    (Datensatz1.Spaltenüberschrift2)
    (Datensatz2.Spaltenüberschrift1)
    (Datensatz2.Spaltenüberschrift2)
    (Datensatz3.Spaltenüberschrift1)
    ... etc.

    Das Problem besteht nun darin, dass die Felder durch die Kombination der beiden Cursor scheinbar nicht ausgelesen werden können. Anbei mein Code, der jedoch noch sehr vereinfacht ist (z. B. die Tabellennamen fest einprogrammiert sind und noch nicht als Parameter übergeben werden).

    CREATE OR REPLACE
    FUNCTION get_tbl_dat RETURN VARCHAR2 IS
    __str VARCHAR2(30767);
    __CURSOR dat_cur IS SELECT * FROM USER123.MY_BIRTHDAYS; -- data of table , Cursor1
    __dat_set USER123.MY_BIRTHDAYS%ROWTYPE;
    __CURSOR col_cur IS SELECT column_name FROM all_tab_cols WHERE table_name = 'MY_BIRTHDAYS' AND owner = 'USER123'; -- colums of table --Cursor2
    __--col_set all_tab_cols%ROWTYPE; -- Diese Deklaration funktioniert auch nicht. Wer wieß warum? Behelf ist nächste Zeile
    __col_set varchar2(50);
    __-- error handling
    __errtext VARCHAR2(300);
    __BEGIN
    __OPEN dat_cur;
    __LOOP -- loop for rows
    ____FETCH dat_cur INTO dat_set;
    ____IF dat_cur%NOTFOUND OR dat_cur%NOTFOUND IS NULL THEN
    ______EXIT;
    ____ELSE
    ______OPEN col_cur;
    ______LOOP -- loop for all colums in each row
    ________FETCH col_cur INTO col_set;
    ________IF col_cur%NOTFOUND OR col_cur%NOTFOUND IS NULL THEN
    __________CLOSE col_cur;
    __________EXIT;
    ________ELSE
    __________DBMS_OUTPUT.PUT_LINE('Colum:' || dat_set.col_set ); -- Hier sollte nun das jeweilige Feld ausgelesen werden. Funzt jedoch nicht. Fehlermeldung: PLS 00302: Komponente COL_SET muss deklariert werden.
    ________END IF;
    ______END LOOP;
    ____END IF;
    __END LOOP;
    __CLOSE dat_cur;
    __str := 'Dummy-Text';
    __RETURN str;
    __EXCEPTION
    __WHEN OTHERS THEN
    ____errtext := sqlerrm(sqlcode);
    ____DBMS_OUTPUT.PUT_LINE('Fehlernr: ' || sqlcode ||' Fehlertext: ' || errtext);
    END get_tbl_dat;

    Bin für jede Hilfe Dankbar! (Wie kann man den ordentlich einrücken ohne _-Zeichen verwenden zu müssen?)

  • #2
    Originally posted by MikeSnow View Post
    ...(Wie kann man den ordentlich einrücken ohne _-Zeichen verwenden zu müssen?)
    Mit [ highlight=sql ]Hier SQL-Quellcode[/ highlight ] (Leerzeichen bitte weglassen)

    Gruß Falk
    Wenn du denkst du hast alle Bugs gefunden, dann ist das ein Bug in deiner Denksoftware.

    Quellcode ohne ein Mindestmaß an Formatierung sehe ich mir nicht an! Ich leiste keinen Privatsupport per Mail oder PN!

    Comment


    • #3
      Danke Falk. Werde ich dann in Zukunft beachten.

      Comment

      Working...
      X