[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