Gibt es Oracle-Tools, die mehrere Ergebnissätze aus einem anonymen Block ausgeben?Mehrere Resultsets in Oracle Anonymous Block
in SQL Server ich häufig Sätze von Anweisungen ähnlich wie im folgenden ausgeführt ...
DECLARE @MostRecentPurchaseOrderId int;
SELECT @MostRecentPurchaseOrderId = MAX(PurchaseOrderId) FROM dbo.PurchaseOrders;
SELECT * FROM dbo.PurchaseOrders WHERE PurchaseOrderId = @MostRecentPurchaseOrderId;
SELECT * FROM dbo.PurchaseOrderDetails WHERE PurchaseOrderId = @MostRecentPurchaseOrderId;
ich laufen einige frisch geschrieben C# dann diese SQL-Anweisungen in SSMS ausführen einen Blick auf die Daten habe ich nur schrieb.
Aber in Oracle ist alles anders. Wenn ich nur zwei SQL-Anweisungen ausführen wollte, erlauben die meisten Tools das. Aber wenn ich eine Variable deklarieren möchte, wählen Sie einen Wert hinein und verwenden Sie den Wert dieser Variablen in einer oder mehreren SELECT-Anweisungen, ich muss einen anonymen Block verwenden. Und Sie können nicht nur eine eigenständige SELECT-Anweisung in einem anonymen Block haben. Hier ist was ich tun muss.
DECLARE purchaseOrderId NUMBER(16);
TYPE RefCursor IS REF CURSOR;
purchaseOrders RefCursor;
purchaseOrderDetails RefCursor;
BEGIN
SELECT MAX(PurchaseOrderId) INTO purchaseOrderId FROM PurchaseOrders;
OPEN purchaseOrders FOR
SELECT * FROM PurchaseOrders WHERE PURCHASE_ORDER_ID = purchaseOrderId;
OPEN purchaseOrderDetails FOR
SELECT * FROM PurchaseOrderDetails WHERE PURCHASE_ORDER_ID = purchaseOrderId;
END;
Die Frage ist, wie die Ergebnisse der beiden Ref-Cursor in einem Raster angezeigt werden.
In TOAD, wenn ich ein paar nicht deklarierte Variablen hinzufügen (: purchaseOrdersOutput und: purchaseOrderDetailsOutput) es bringt mich fast dort, aber nicht den ganzen Weg. Wenn ich es ausführe, erscheint ein Dialog, der mich auffordert, den Typ der zwei Variablen auszuwählen, ich wähle Cursor und TOAD wird ausgeführt und lade den Inhalt des ersten Ref-Cursors in das Datenraster. Aber vom zweiten Cursor wird keine Ausgabe angezeigt.
DECLARE purchaseOrderId NUMBER(16);
TYPE RefCursor IS REF CURSOR;
purchaseOrders RefCursor;
purchaseOrderDetails RefCursor;
BEGIN
SELECT MAX(PurchaseOrderId) INTO purchaseOrderId FROM PurchaseOrders;
OPEN purchaseOrders FOR
SELECT * FROM PurchaseOrders WHERE PURCHASE_ORDER_ID = purchaseOrderId;
:purchaseOrdersOutput := purchaseOrders;
OPEN purchaseOrderDetails FOR
SELECT * FROM PurchaseOrderDetails WHERE PURCHASE_ORDER_ID = purchaseOrderId;
:purchaseOrderDetailsOutput := purchaseOrderDetails;
END;
Irgendwelche Ideen?
Welche Oracle-Version verwenden Sie? Außerdem: Ich benutze nicht TOAD, aber die meisten SQL-Clients erlauben es Ihnen, Variablen zu definieren, die vom SQL-Tool verwaltet werden, nicht vom Server. –