### 9.22.6.Procedure Table Examples

```create procedure n_range (in first integer, in  last integer)
{
declare n, n2 integer;
n := first;
result_names (n, n2);
while (n < last){
result (n, 2 * n);
n := n + 1;
}
}

select n, n2 from n_range (first, last) (n int, n2 int) n
where first = 2 and last = 12;
```

This returns a set of numbers from 2 to 11 and from 4 to 22.

```select a.n, b.n from n_range (first, last) (n int, n2 int) a,
n_range (f2, l2) (n int, n2 int) b
where first = 2 and last = 12 and f2 = a.n - 2 and l2 = a.n + 2;
```

Here we join the second call to the procedure to the first, effectively passing the output of the left call as parameters to the right call.

```create procedure view n_range as n_range (first, last) (n1 int, n2 decimal);
```

This defines the procedure as a view, so that it can be referenced like a table.

```select * from n_range a, n_range b where a.first = 1 and a.last = 11
and b.last = a.n1 + 2 and b.first = a.n1 - 2;
```

This is the previous join but now using the view.