This tutorial demonstrates how to generate a series or set of integers using Type Constructor Expressions for collection types. Other techniques are discussed in the tutorials listed in the menu to the left.
Prerequisites
This solution requires a nested table type or varry type. We will use one called INTEGER_TABLE_TYPE created in the Setup topic for this section. If you do not have privileges to create a type like this see Setup - Note 1.
desc integer_table_type integer_table_type TABLE OF NUMBER(38)
The Solution
If you need a manageable number of integers, like 10 or 20, you can use a simple query like this one.
select column_value from table( integer_table_type( 1,2,3,4,5,6,7,8,9,10 ) ) ;
COLUMN_VALUE ------------ 1 2 3 4 5 6 7 8 9 10
This method is unique from the others in this section in that it lends itself well to creating sets of non-sequential integers as well as sequential series.
select column_value from table( integer_table_type( 1,1,4,4,4,8,10 ) ) ;
COLUMN_VALUE ------------ 1 1 4 4 4 8 10
Applying the technique to our day of the week scenario yields this query.
select i.column_value as day_of_week , t.val from table( integer_table_type( 0,1,2,3,4,5,6 ) ) i left outer join t on ( i.column_value = t.day_of_week ) order by i.column_value ;
DAY_OF_WEEK VAL ----------- ---------- 0 1 100 2 3 300 4 400 5 500 6
If you require more integers than you care to list in a type constructor expression see the Type Constructor + Cartesian Product tutorial for a variation of this technique.
Gotchas
If we specify more than 999 arguments in a type constructor it will generate a ORA-00939: too many arguments for function error (as tested in Oracle 10g).