sql >> データベース >  >> RDS >> Oracle

パラメータを使用して複数の行を選択する方法はありますか?

    クエリのみを使用してOracleで結果セットを返すことはできません。同じためにRefカーソルを使用する必要があります。以下のコードを試すことができます-

    CREATE OR REPLACE PROCEDURE p_find_all_routes (
       p_start   IN VARCHAR2 DEFAULT '%',
       p_end     IN VARCHAR2 DEFAULT '%',
       p_via     IN VARCHAR2 DEFAULT '%',
       multiroutes OUT SYS_REFCURSOR)
    AS
    BEGIN
       -- =======================================================================
       -- Author:       Coilin P. Boylan Jeritslev (CTBJ)
       -- Description:   Find all possible routes between two different points
       -- "p_start" and "p_end" via the choosen point "p_via" in a graph-tabel.
       -- =======================================================================
    OPEN multiroutes FOR
       WITH multiroutes (p_from, p_to, full_route, total_distance)
            AS (SELECT p_from,
                       p_to,
                       p_from || '->' || p_to full_route,
                       distance total_distance
                  FROM graph
                 WHERE p_from LIKE p_start
                UNION ALL
                SELECT M.p_from,
                       n.p_to,
                       M.full_route || '->' || n.p_to full_route,
                       M.total_distance + n.distance total_distance
                  FROM multiroutes M JOIN graph n ON M.p_to = n.p_from
                 WHERE n.p_to <> ALL (M.full_route))
         SELECT *
           FROM multiroutes
          WHERE     p_to LIKE p_end
                AND (   full_route LIKE ('%->' || p_via || '%')
                     OR full_route LIKE ('%' || p_via || '->%'))
       ORDER BY p_from, p_to, total_distance ASC;
    END;
    /
    

    その後、Refカーソル変数を宣言することにより、このプロシージャを呼び出すことができます。

    DECLARE
        Result SYS_REFCURSOR;
    BEGIN
        p_find_all_routes('A','E','%', Result);
    END; 
    
    



    1. テーブルベースのレコードデータ型を持つ強力な参照カーソル

    2. postgresデータベースをsqliteに変換する方法

    3. データベースに新しいテーブル/エンティティを追加するJavaEE/JPAの方法

    4. テーブルPHPエコーでの発生をカウント