Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Wie übergebe ich einen Tabellennamen als Parameter an eine gespeicherte Prozedur?

Sie können kein %ROWTYPE erstellen Variable für eine unbekannte Tabelle und Sie können nicht statisch auf Spaltennamen verweisen, wenn Sie den Tabellennamen zur Kompilierzeit nicht kennen.

Sie können das Paket dbms_sql verwenden, um mit vollständig dynamischen SQL-Anweisungen umzugehen. Sie müssen die SQL-Anweisung vorbereiten, die Spalten beschreiben, um die Anzahl der Spalten und ihre Datentypen herauszufinden, geeignete Variablen binden und dann die Daten abrufen. Es ist eine viel umständlichere Art, Code zu schreiben, als das Beispiel, das Sie gepostet haben, aber es gibt Ihnen extreme Flexibilität.

Es gibt eine Reihe von Beispielen für die Verwendung des dbms_sql-Pakets in der Dokumentation, auf die ich verlinkt habe. Vielleicht möchten Sie auch die dump_csv-Funktion von Tom Kyte ausprobieren, die das Ergebnis einer beliebigen Abfrage mit UTL_FILE in eine CSV-Datei schreibt . Wenn Sie die Daten wirklich nach DBMS_OUTPUT schreiben wollen , könnten Sie einfach die UTL_FILE ersetzen Aufrufe mit DBMS_OUTPUT . Aber ich bin mir ziemlich sicher, dass Sie etwas Nützlicheres tun möchten, als nur die Daten in DBMS_OUTPUT zu schreiben Puffer, sodass Toms Verfahren wahrscheinlich näher an dem liegt, was Sie wirklich erreichen möchten.