匿名ブロックから複数の結果セットを出力するOracleツールはありますか?私は頻繁に次のようなステートメントのセットを実行するSQL ServerではOracleの匿名ブロックの複数の結果セット
...
DECLARE @MostRecentPurchaseOrderId int;
SELECT @MostRecentPurchaseOrderId = MAX(PurchaseOrderId) FROM dbo.PurchaseOrders;
SELECT * FROM dbo.PurchaseOrders WHERE PurchaseOrderId = @MostRecentPurchaseOrderId;
SELECT * FROM dbo.PurchaseOrderDetails WHERE PurchaseOrderId = @MostRecentPurchaseOrderId;
私はデータだけで私を見ているためにSSMSでこれらのSQL文を実行し、いくつかの新たに書かれたC#]を実行します書きました。
しかし、Oracleではすべてが異なります。 2つのSQL文を実行したければ、ほとんどのツールで可能です。 しかし、変数を宣言したい場合は、値を選択してから、その変数の値を1つ以上のselectステートメントで使用し、匿名ブロックを使用する必要があります。また、匿名ブロックでスタンドアロンのSELECT文を使用することはできません。ここに私がしなければならないことがあります。
質問は、2つのREFカーソルの結果をグリッドに表示する方法です。
TOADでは、宣言されていない変数 (:purchaseOrdersOutputと:purchaseOrderDetailsOutput)をいくつか追加すると、それはほとんどすべてではありません。 TOADを実行すると、2つの変数のタイプを選択するダイアログが表示され、カーソルを選択するとTOADが実行され、最初の参照カーソルの内容がデータグリッドに読み込まれます。しかし、2番目のカーソルからの出力は表示されません。
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;
私はあなたの条件から理解したよう
使用しているOracleのバージョンはどれですか?また、TOADは使用しませんが、ほとんどのSQLクライアントでは、サーバーではなくSQLツールによって管理される変数を定義できます。 –