SQL to generate a list of numbers from 1 to 100

后端 未结 11 1514
悲&欢浪女
悲&欢浪女 2020-11-27 04:07

Using the DUAL table, how can I get a list of numbers from 1 to 100?

11条回答
  •  执笔经年
    2020-11-27 04:22

    I created an Oracle function that returns a table of numbers

    CREATE OR REPLACE FUNCTION [schema].FN_TABLE_NUMBERS(
        NUMINI INTEGER,
        NUMFIN INTEGER,
        EXPONENCIAL INTEGER DEFAULT 0
    ) RETURN TBL_NUMBERS
    IS
        NUMEROS TBL_NUMBERS;
        INDICE NUMBER;
    BEGIN
        NUMEROS := TBL_NUMBERS();
    
        FOR I IN (
            WITH TABLA AS (SELECT NUMINI, NUMFIN FROM DUAL)
            SELECT NUMINI NUM FROM TABLA UNION ALL
            SELECT 
                (SELECT NUMINI FROM TABLA) + (LEVEL*TO_NUMBER('1E'||TO_CHAR(EXPONENCIAL))) NUM
            FROM DUAL
            CONNECT BY 
                (LEVEL*TO_NUMBER('1E'||TO_CHAR(EXPONENCIAL))) <= (SELECT NUMFIN-NUMINI FROM TABLA)
        ) LOOP
            NUMEROS.EXTEND;
            INDICE := NUMEROS.COUNT; 
            NUMEROS(INDICE):= i.NUM;
        END LOOP;
    
        RETURN NUMEROS;
    
    EXCEPTION
      WHEN NO_DATA_FOUND THEN
           RETURN NUMEROS;
      WHEN OTHERS THEN
           RETURN NUMEROS;
    END;
    /
    

    Is necessary create a new data type:

    CREATE OR REPLACE TYPE [schema]."TBL_NUMBERS" IS TABLE OF NUMBER;
    /
    

    Usage:

    SELECT COLUMN_VALUE NUM FROM TABLE([schema].FN_TABLE_NUMBERS(1,10))--integers difference: 1;2;.......;10
    

    And if you need decimals between numbers by exponencial notation:

    SELECT COLUMN_VALUE NUM FROM TABLE([schema].FN_TABLE_NUMBERS(1,10,-1));--with 0.1 difference: 1;1.1;1.2;.......;10
    SELECT COLUMN_VALUE NUM FROM TABLE([schema].FN_TABLE_NUMBERS(1,10,-2));--with 0.01 difference: 1;1.01;1.02;.......;10
    

提交回复
热议问题