What I would do is use a temporary table, like this:
P1 : BEGIN -- Declare cursor
DECLARE GLOBAL TEMPORARY TABLE myTemp (AIPROD integer, AISTRQ integer, CAL_VALUE integer)
WITH REPLACE ON COMMIT PRESERVE ROWS NOT LOGGED ;
INSERT INTO session.myTemp (AIPROD,AISTRQ) SELECT AIPROD , AISTRQ
FROM DAI
WHERE DAI . AIWHS = 'S'
BEGIN
DECLARE num_rows integer;
DECLARE cur_row integer;
DECLARE value integer;
DECLARE ret_value integer;
DECLARE cursor1 CURSOR FOR SELECT AIPROD from session.myTemp;
DECLARE cursor2 CURSOR WITH RETURN TO CALLER for select * from session.myTemp;
SELECT count(*) into num_rows from session.myTemp;
SET cur_row = 0;
OPEN CURSOR1;
WHILE cur_row < num_rows do
FETCH cursor1 into value;
CALL SP2(value,ret_value);
UPDATE session.myTemp set cal_value = ret_value where current of cursor1;
END WHILE;
OPEN CURSOR2;
END;
END P1
HTH
Andy