[firebase-br] Par?metros em Stored Procedures

hugo.osawa em gmail.com hugo.osawa em gmail.com
Qui Jun 15 00:16:08 -03 2006


Gente, perdi muito tempo tentando descobrir, mas não consigo fazer esta 
procedure funcionar pelo SQLStoredProcedure.

Pelo IBExpress funciona sossegado.. já pelo Delphi, nao..
Procedure:


<? SET TERM ^ ;



CREATE PROCEDURE PROCEDURE2 (

    i_u varchar(1),

    id_lote varchar(10),

    id_funcionario varchar(10),

    status varchar(1),

    id_processo integer)

returns (

    id_proc integer)

as

begin

  /* Procedure Text */

  IF (I_U = 'I') THEN /*Inclusão*/

  BEGIN

    INSERT INTO PROCESSO (ID_LOTE,ID_FUNCIONARIO,STATUS) VALUES 
(:ID_LOTE,:ID_FUNCIONARIO,:STATUS);

    id_proc = gen_id(gen_processo, 0);

  END

  ELSE

  IF (I_U = 'U') THEN /*Alteração*/

    UPDATE PROCESSO SET DATA_FIM = current_date, HORA_FIM = current_time, 
STATUS = :status WHERE ID_PROCESSO = :id_processo;

  suspend;

end^



SET TERM ; ^



GRANT SELECT,INSERT,UPDATE ON PROCESSO TO PROCEDURE PROCEDURE2;



GRANT EXECUTE ON PROCEDURE PROCEDURE2 TO SYSDBA;?>



Obs: comentei as condicionais que testam o parametro que define se é Update 
ou Insert (I_U) e tive a impressão que a procedure não está reconhecendo o 
caractere (não entra em nenhum if).

Delphi (tirei a parte do SQLConnection p/ ficar mais claro de ler):



<?   with DBForm.SQLSPProcesso do

  begin

    ParamByName('I_U').AsString:='I';

    ParamByName('ID_LOTE').AsString:=ST.ID_Lote; dos campos

    ParamByName('ID_FUNCIONARIO').AsString:=ST.ID_Funcionario;//

    Params.ParamByName('ID_PROCESSO').Asinteger:=0;

    try

      ExecProc;

      ST.ID_PROCESSO:=ParamByName('ID_PROC').AsInteger;

    except

      on Exc:Exception do

      begin

        ShowMessage('Erro na insercao: ' + Exc.Message);

      end;

    end;

  end;?>



No SQLStoreProcedure estão configurados todos os parametros com seus tipos, 
sendo todos de entrada com exceção do ID_PROC, que recupero quando INSERT.

Quem puder ajudar, agradeço muito!







Mais detalhes sobre a lista de discussão lista