DML
//
// Demonstration of how to use the various MaxDB functions
//
// User defined procedure (UDP) using recursive expression
// and interting result in a table
DROP   TABLE mona.test
//
CREATE TABLE mona.test (row INT,num10 FIXED(10))
//
DROP   DBPROC test_data
//
CREATE DBPROC test_data (IN rows INT) AS
VAR row INT;
    n10 FIXED(10);
    DECLARE c_test_data CURSOR FOR WITH RECURSIVE td (levl,r10) AS 
     (SELECT 1
           , FIXED(RAND(1)*10000000000,10) 
        FROM dbadmin.dual 
       UNION ALL 
      SELECT levl + 1
           , FIXED(RAND(levl + 1)*10000000000,10) 
        FROM td  
       WHERE levl < 1000 
     )
      SELECT levl,r10
        FROM td;
  FETCH NEXT c_test_data INTO :row, :n10;
  WHILE $RC = 0 DO BEGIN
    INSERT INTO mona.test (row,num10) VALUES (:row, :n10);
    FETCH NEXT c_test_data INTO :row, :n10;
  END;
  CLOSE c_test_data;
//
CALL test_data (1000)
//
SELECT * FROM mona.test WHERE rowno < 5
//
Result
> DROP   TABLE mona.test
> CREATE TABLE mona.test (row INT,num10 FIXED(10))
> DROP   DBPROC test_data
> CREATE DBPROC test_data (IN rows INT) AS VAR row INT;     n10 FIXED(10);     DECLARE c_test_data CURSOR FOR WITH RECURSIVE td (levl,r10) AS      (SELECT 1            , FIXED(RAND(1)*10000000000,10)         FROM dbadmin.dual        UNION ALL       SELECT levl + 1            , FIXED(RAND(levl + 1)*10000000000,10)         FROM td        WHERE levl < 1000      )       SELECT levl,r10         FROM td;   FETCH NEXT c_test_data INTO :row, :n10;   WHILE $RC = 0 DO BEGIN     INSERT INTO mona.test (row,num10) VALUES (:row, :n10);     FETCH NEXT c_test_data INTO :row, :n10;   END;   CLOSE c_test_data;
> CALL test_data (1000)
> SELECT * FROM mona.test WHERE rowno < 5
> | ROW            | NUM10            |
> | -------------- | ---------------- |
> |           1000 |       9130434783 |
> |            999 |       9086956522 |
> |            998 |       9043478261 |
> |            997 |       9000000000 |