2

スタックオーバーフローのメンバーの皆さん、こんにちは。

ここで差し迫った質問があります。

私は現在、GridView. は動的に並べ替えGridViewを実行できる必要があります。multi columnユーザーが別の列をクリックするたびに、私の C# アプリは列を解析し、asc/descレコードの取得を実行するためにストアド プロシージャの順序を並べ替えます。そのため、SP は入力を動的に処理できる必要があります。

私は動的 SQL を使用したくなく、PL/SQL クエリに固執したいと考えています。

これが私のコードのサンプルです。

SELECT ID,NAME FROM MY_TABLE WHERE ID='123' ORDER BY ID ASC, NAME DESC;

この部分はORDER BY ID ASC, NAME DESC動的でなければなりません。アプリケーションから渡されたパラメーターに基づいて、この部分を作成したいと考えています。

現在、DECODE 関数と CASE 関数をいじっていますが、1 つのパラメーター入力しか処理できないため、結果がまちまちです。ユーザーが GridView で複数の列をクリックした場合、複数の列の並べ替えを処理できる必要があります。

この部分は動的で、複数の列の並べ替えを処理できる必要があります。

ORDER BY ID ASC, NAME DESC, CLASS ASC...などなど。

仲間のメンバーは、私を正しい方向に向けてください. ありがとう!

1) 動的 SQL を使用して PL/SQL で上記を実現したくない。

2) パラメータ入力はカスタマイズ可能で、フロント エンドでは何でもOKです。SP のヘルプが必要です。

よろしく、 TP

4

4 に答える 4

4

そのためのパラメーターを渡すことができます(@SortIndex)

ORDER BY 
CASE WHEN @SortIndex = 1 THEN ID END ASC,
CASE WHEN @SortIndex = 2 THEN NAME END DESC
CASE WHEN @SortIndex = 3 THEN Title END ASC 
于 2013-07-02T05:58:07.453 に答える
0

エレガントではありませんが、うまくいくはずです。コード番号を指定し、それに応じて並べ替えます。

ORDER BY CASE myparam 
         WHEN  1 THEN col1 ASC 
         WHEN -1 THEN col1 DESC
         WHEN  2 THEN col2 ASC 
         WHEN -2 THEN col2 ASC
         END;
于 2013-07-01T18:16:01.630 に答える
0

渡す

DECLARE @OrderBy VARCHAR(10)

DECLARE @ColumnName varchar(50) 

ストアド プロシージャの入力パラメータとしてのこの 2 つの引数

CASE次の条件を試してください。

ORDER BY CASE WHEN @OrderBy = 'ASC' THEN @ColumnName END ASC,
CASE WHEN @OrderBy = 'DESC' THEN @ColumnName END DESC
于 2013-07-01T10:36:00.177 に答える
0

これにより、正しい方向に進むはずです。

CREATE OR REPLACE PROCEDURE GET_DETAILS (ORDER_TYPE1   IN VARCHAR2(5)
                         ORDER_TYPE2   IN VARCHAR2(5)
                                         ORDER_FIELD1 IN VARCHAR2(5) 
                                         ORDER_FIELD2  IN VARCHAR2(5)
                     V_ID         IN VARCHAR2(5)
                                         OUTPUT_DATA  OUT REF_CURSOR)
    IS
BEGIN 

OPEN OUTPUT_DATA FOR 
SELECT ID,NAME FROM MY_TABLE WHERE ID=V_ID ORDER BY ORDER_FIELD1 ORDER_TYPE1, ORDER_FIELD2 ORDER_TYPE2;

END GET_DETAILS;

ORDER_TYPE1、ORDER_TYPE2、ORDER_FIELD1 などは入力です。この手順の出力は、必要なレコードのセットになります。

于 2013-07-02T15:50:15.583 に答える