Veamos, he hecho un ejemplo muy, muy simple:
Tengo un par de tablas:
Código SQL
[-]CREATE TABLE EJEMPLO(
ID ENTERO DEFAULT 0 NOT NULL,
VALUE1 ENTERO DEFAULT 0 NOT NULL,
VALUE2 ENTERO DEFAULT 0 NOT NULL,
PEPITO Integer,
OTRO Varchar(18384),
MASGRANDE Varchar(32000),
CONSTRAINT PK_EJEMPLO PRIMARY KEY (ID)
);
CREATE TABLE EJEMPLO2(
ID ENTERO DEFAULT 0 NOT NULL,
VALUE1 ENTERO DEFAULT 0 NOT NULL,
VALUE2 ENTERO DEFAULT 0 NOT NULL,
PRIMARY KEY (ID)
);
Creo un par de stored procedure, uno llama al otro, retorna un valor y es usado para insertar en otra tabla
Código SQL
[-]CREATE PROCEDURE AA1 ( VALOR Integer )
RETURNS ( DEVOLVER Integer )
AS
BEGIN
select id
from ejemplo
where value1= :valor
into :devolver;
END^
Código SQL
[-]CREATE PROCEDURE BB1
AS
DECLARE VARIABLE valor integer;
BEGIN
execute procedure aa1 (5) RETURNING_VALUES valor;
insert into ejemplo2 values (:valor, 10,10 );
END^
Como ves, el procedure BB1 llama al procedure AA1 con el parámetro '5' y devuelve el campo ID de la otra tabla
La tabla
ejemplo tiene el registro:
id 1
value1 5
etc.
Ejecuto el mismo;
Y si miro la tabla
ejemplo2 tiene el registro insertado con el valor correspondiente, id=1