Hola.
Sinceramente no veo manera de hacer lo que consultas en el primer mensaje pero, dependiendo del formato de la sentencia SQL original, se podría optimizar un poco el código anterior del SP para evitar la repetición:
Código SQL
[-]
SET TERM ^ ;
CREATE OR ALTER PROCEDURE SP_TEST (
COD_CLIENTE INTEGER )
RETURNS (
R_CODIGO INTEGER,
R_NUMERO_CV INTEGER,
R_TIPO_TRANSACCION INTEGER )
AS
DECLARE VARIABLE SENTENCIA VARCHAR(512);
BEGIN
SENTENCIA = 'SELECT A.CODIGO, A.NUMERO_CV, A.TIPO_TRANSACCION '||
'FROM TB_COMPRAS_VENTAS A';
IF ( COD_CLIENTE <> -1 ) THEN
SENTENCIA = SENTENCIA || 'WHERE A.REF_CLIENTE = ' || :COD_CLIENTE;
FOR EXECUTE STATEMENT SENTENCIA
INTO
:R_CODIGO,
:R_NUMERO_CV,
:R_TIPO_TRANSACCION
DO
SUSPEND;
END^
SET TERM ; ^
Eso siempre que la sentencia SQL original no sea muy compleja y lo permita...
Saludos