Ist es möglich die Ausgabe einer SELECT-Anweisung von PL/SQL-block?
Wie kann ich eine PL/SQL-block zur Ausgabe der Ergebnisse einer SELECT
- Anweisung genauso, als wenn ich hatte einen einfachen SELECT
?
Beispielsweise, wie eine SELECT
wie:
SELECT foo, bar FROM foobar;
Hinweis :
BEGIN
SELECT foo, bar FROM foobar;
END;
nicht funktioniert.
- Ich fühle mich nicht wie irgendeine von den beantworteten diese Frage beantwortet. Ich bin eine PL/SQL-noob und ich habe Schwierigkeiten, herauszufinden, wie man das Ergebnis einer einfachen select-Anweisung zeigen, DBVisualizer, wenn es ausgeführt wird, die aus einem PL/SQL block. Es kann eine ziemlich einfache Antwort, sondern als eine MSSQL-Benutzer, ich bin verloren hier. Ich habe versucht ein wenig Googeln, aber ich habe nicht stolperte über die Antwort, sonst würd ich hinzufügen, dass es mich selbst.
- Sergej ' s Antwort ist sehr umfassend, aber Sie würden es gern sehen, visualisiert in einer ähnlichen tool (SQL Developer vs DBVisualizer), check this out thatjeffsmith.com/archive/2012/03/dbms_output-in-sql-developer
- Wenn Sie innerhalb einer einzigen PL/SQL-block und vielleicht sind Sie mithilfe der Oracle SQL Developer Zugriff auf Ihre Datenbank mit
dbms_output.put_line()
ist, wie würden Sie dies tun. Auf der anderen Seite, wenn Sie kompilieren Sie diesen code in Ihre Oracle-Datenbank als ein Paket oder eine Funktion, die Sie würdePIPE
die Daten mitPIPE ROW(r);
Du musst angemeldet sein, um einen Kommentar abzugeben.
Es hängt davon ab, was Sie brauchen, ist das Ergebnis für die.
Wenn Sie sicher sind, dass es nur 1 Zeile, verwenden implizite cursor:
Wenn Sie möchten, wählen Sie mehr als 1 Zeile, können Sie entweder eine explizite cursor:
oder verwenden Sie eine andere Art von cursor:
Dazu können Sie in Oracle 12.1 oder höher:
Habe ich nicht DBVisualizer zu testen, aber das sollte wohl Ihrem Ausgangspunkt.
Weitere details finden Sie unter Implizite Result Sets in der Oracle 12.1 Neue Funktionen-Führer, Oracle-Basis etc.
Für frühere Versionen, je nach Werkzeug, das Sie vielleicht in der Lage sein zu verwenden, ref cursor-bind-Variablen wie in diesem Beispiel von SQL*Plus:
rc
variable als cursor in den unteren Bereich, dann nach der Ausführung des Blocks, den Sie klicken können, auf die variable.Von einen anonymen block? Ich möchte jetzt mehr über die situation, in der Sie denke, dass es für Sie erforderlich sein, weil mit subquery factoring-Klauseln und inline-Ansichten, es ist ziemlich selten, dass Sie brauchen, zu greifen, um PL/SQL für alles andere als die komplexesten Situationen.
Wenn Sie können, verwenden Sie eine benannte Prozedur verwenden Sie dann per Pipeline Funktionen. Hier ist ein Beispiel stammt aus der Dokumentation:
Erstellen eine Funktion in einem Paket zurück und ein SYS_REFCURSOR:
Dem Klassiker "Hallo Welt!" - block enthält eine ausführbare Abschnitt, ruft die
DBMS_OUTPUT.PUT_LINE
Verfahren zum anzeigen von text auf dem Bildschirm:Können Sie Kasse es hier:
http://www.oracle.com/technetwork/issue-archive/2011/11-mar/o21plsql-242570.html
wenn Sie möchten sehen, wählen Sie Abfrage-Ausgabe in pl/sql Sie müssen mit einem expliziten cursor. Was halten Sie als aktiven Datensatz auswählen und abrufen jede Zeile in einer Zeit, wird es zeigen den Datensatz aus der aktiven Daten-set, solange es ruft die Aufzeichnung von Daten festgelegt, die von der Iteration in der Schleife. Diese Daten werden nicht generiert in tabellarischer Form das Ergebnis wird in nur-text-format. Hoffe, dass dies hilfreich sein wird. Für jede andere Abfrage, die Sie Fragen können....
Für Versionen unter 12c, die einfache Antwort ist KEINE, zumindest nicht in der Art wie es getan wird, ist SQL-Server.
Sie können die Ergebnisse gedruckt werden, können Sie die Ergebnisse in Tabellen, können Sie die Rückgabe der Ergebnisse als Cursor innerhalb der Funktion/Prozedur oder Zeile zurück gesetzt von der Funktion -
aber Sie nicht SELECT-Anweisung ausführen, ohne dabei etwas mit den Ergebnissen.
SQL Server
/* 3 zurückgegebenen Resultsets */
Oracle
Müssen Sie mit Native dynamic SQL. Auch müssen Sie nicht BEGIN-END zum ausführen von SQL-Befehl:
verwenden Sie execute immediate-Anweisung
wie:
Auch wenn die Frage alt ist aber ich werde die Lösung, die Antworten, die perfekt die Frage :