SQL Query to return N rows from dual

前端 未结 10 1846
盖世英雄少女心
盖世英雄少女心 2021-02-13 10:31

I want to write a SQL query which accepts a bind variable (say :NUM) and its output consists of one column & :NUM number of rows, each row having its row number. i.e. if we

10条回答
  •  庸人自扰
    2021-02-13 11:14

    Try something like:

    SELECT 1 AS Val FROM dual
    UNION ALL SELECT 2 FROM dual
    UNION ALL SELECT 3 FROM dual
    UNION ALL SELECT 4 FROM dual
    UNION ALL SELECT 5 FROM dual
    UNION ALL SELECT 6 FROM dual
    UNION ALL SELECT 7 FROM dual;
    

    It's messy, but it'll do the trick.

    Edited: Ah - you need to pass in a variable to let you know how high to go...

    So how about something like:

    SELECT t1.Val + t2.Val * 2 + t3.Val * 4 + t4.Val * 8 AS Val
    FROM
    (
    SELECT 0 AS Val FROM dual
    UNION ALL SELECT 1 FROM dual
    ) AS t1, 
    (
    SELECT 0 AS Val FROM dual
    UNION ALL SELECT 1 FROM dual
    ) AS t2, 
    (
    SELECT 0 AS Val FROM dual
    UNION ALL SELECT 1 FROM dual
    ) AS t3, 
    (
    SELECT 0 AS Val FROM dual
    UNION ALL SELECT 1 FROM dual
    ) AS t4
    WHERE t1.Val + t2.Val * 2 + t3.Val * 4 + t4.Val * 8 <= 7;
    

    Ok... editing again, now using WITH:

    WiTH 
    A0 AS (SELECT 0 as N FROM DUAL UNION ALL SELECT 0 FROM DUAL),
    A1 AS (SELECT 0 as N FROM A0, A0 AS B),
    A2 AS (SELECT 0 as N FROM A1, A1 AS B),
    A3 AS (SELECT 0 as N FROM A2, A2 AS B),
    A4 AS (SELECT 0 as N FROM A3, A3 AS B),
    A5 AS (SELECT 0 as N FROM A4, A4 AS B),
    A6 AS (SELECT 0 as N FROM A5, A5 AS B),
    Nums AS (SELECT ROW_NUMBER() OVER (ORDER BY N) AS Val FROM A6)
    SELECT *
    FROM Nums
    WHERE Val <= :NUM
    ;
    

提交回复
热议问题