Fórum condição selecionavel numa stored procedure #55618
28/03/2006
0
[b:64b681f10c]vincremento : String;
vincremento := ´ and ID_Historico = ´+QuotedStr(0001´ );
select * from
from
caixa
where
(Data between :vData_Inicio and :vDATA_FINAL)+
QuotedStr(vincremento)[/b:64b681f10c]
//na SP está assim e preciso mudar
[b:64b681f10c]select * from
from
caixa
where
(Data between :vData_Inicio and :vDATA_FINAL)
and
(ID_Historico = :vid_historico)
and
ID_Filial = :vid_filial[/b:64b681f10c]
essa SP está no banco e tem como parametro de entrada DataInicio e DataFinal, o q tentei e naum consegui foi colocar uma var vincremento varchar(100) e usar na pesquisa, ele naum aceitou uma variável no meio do select...
agradeço a atenção
Camilo
Curtir tópico
+ 0Posts
28/03/2006
Gandalf.nho
Gostei + 0
28/03/2006
Emerson Nascimento
crie duas variáveis na sp: chistorico e cfilial, ambos varchar (você define o tamanho)
faça:
if historico = -1 then cHistorico = ´¬´; else cHistorico = cast(historico as varchar(tamanhoquevcdefiniu)); if filial = -1 then cFilial = ´¬´; else cFilial = cast(filial as varchar(tamanhoquevcdefiniu));
e mude sua instrução para:
select * from caixa where (Data between :vData_Inicio and :vDATA_FINAL) and (ID_Historico LIKE :cHistorico) and (ID_Filial LIKE :cFilial)
daí você pode passar os parâmetros histórico e filial ou ignorá-los
(passe -1 para a sp para ´ignorar´ os parâmetros)
não sei no IB/FB, mas no SQL Server funciona perfeitamente.
Gostei + 0
28/03/2006
Camilo
Gostei + 0
28/03/2006
Emerson Nascimento
porque sua afirmação está INcorreta...
se eu passar
LIKE ´1´ ele vai me trazer somente o que for = ´1´
LIKE ´1¬´ vai me trazer o que iniciar por ´1´ (1, 11, 101, 12, 14)
Gostei + 0
29/03/2006
Camilo
Gostei + 0
29/03/2006
Camilo
PRA ENTENDIMENTO, O vID_Filial e o vID_Loja passo o valor ou o ´¬´ com if no delphi e pra chamar a SP fica assim
SELECT * FROM p_caixa ( ´+
QuotedStr(FormatDateTime(´DD.MM.YYYY´,dpkInicio.Date)) +´,´+
QuotedStr(FormatDateTime(´DD.MM.YYYY´,dpkFinal.Date))+´,´+
QuotedStr(vID_Filial)+´,´+
QuotedStr(vID_Historico)+
´)´;
CREATE PROCEDURE P_CAIXA (
VDATA_INICIO DATE,
VDATA_FINAL DATE,
vID_Filial varchar(10),
vID_Historico varchar(10)
)
RETURNS (
R_ANT_DINHEIRO NUMERIC(18,2),
D_ANT_DINHEIRO NUMERIC(18,2),
R_DIA_DINHEIRO NUMERIC(18,2),
D_DIA_DINHEIRO NUMERIC(18,2),
R_ANT_CHEQUE NUMERIC(18,2),
D_ANT_CHEQUE NUMERIC(18,2),
R_DIA_CHEQUE NUMERIC(18,2),
D_DIA_CHEQUE NUMERIC(18,2),
R_ANT_CARTAO NUMERIC(18,2),
D_ANT_CARTAO NUMERIC(18,2),
R_DIA_CARTAO NUMERIC(18,2),
D_DIA_CARTAO NUMERIC(18,2))
AS
DECLARE VARIABLE VR_ANT_DINHEIRO NUMERIC(18,2);
DECLARE VARIABLE VD_ANT_DINHEIRO NUMERIC(18,2);
DECLARE VARIABLE VR_DIA_DINHEIRO NUMERIC(18,2);
DECLARE VARIABLE VD_DIA_DINHEIRO NUMERIC(18,2);
DECLARE VARIABLE VR_ANT_CHEQUE NUMERIC(18,2);
DECLARE VARIABLE VD_ANT_CHEQUE NUMERIC(18,2);
DECLARE VARIABLE VR_DIA_CHEQUE NUMERIC(18,2);
DECLARE VARIABLE VD_DIA_CHEQUE NUMERIC(18,2);
DECLARE VARIABLE VR_ANT_CARTAO NUMERIC(18,2);
DECLARE VARIABLE VD_ANT_CARTAO NUMERIC(18,2);
DECLARE VARIABLE VR_DIA_CARTAO NUMERIC(18,2);
DECLARE VARIABLE VD_DIA_CARTAO NUMERIC(18,2);
BEGIN
select
--DINHEIRO
sum((case when nat = ´C´ and Conta = ´DINHEIRO´ then (Valor) end)),
sum((case when nat = ´D´ and Conta = ´DINHEIRO´ then (Valor) end)),
--CHEQUE
sum((case when nat = ´C´ and Conta = ´CHEQUE´ then (Valor) end)),
sum((case when nat = ´D´ and Conta = ´CHEQUE´ then (Valor) end)),
--CARTAO
sum((case when nat = ´C´ and Conta = ´CARTAO´ then (Valor) end)),
sum((case when nat = ´D´ and Conta = ´CARTAO´ then (Valor) end))
from
caixa
where
(Data < :vData_Inicio)
and
(ID_Historico like :vID_historico)
and
(ID_Loja like :vid_filial)
into :vR_Ant_Dinheiro,
:vD_Ant_Dinheiro,
:vR_Ant_CHEQUE,
:vD_Ant_CHEQUE,
:vR_Ant_CARTAO,
:vD_Ant_CARTAO;
if (:vR_Ant_Dinheiro is null) then vR_Ant_Dinheiro = 0.00;
if (:vD_Ant_Dinheiro is null) then vD_Ant_Dinheiro = 0.00;
if (:vR_Ant_CHEQUE is null) then vR_Ant_CHEQUE = 0.00;
if (:vD_Ant_CHEQUE is null) then vD_Ant_CHEQUE = 0.00;
if (:vR_Ant_CARTAO is null) then vR_Ant_CARTAO = 0.00;
if (:vD_Ant_CARTAO is null) then vD_Ant_CARTAO = 0.00;
R_Ant_Dinheiro = vR_Ant_Dinheiro;
D_Ant_Dinheiro = vD_Ant_Dinheiro;
R_Ant_CHEQUE = vR_Ant_CHEQUE;
D_Ant_CHEQUE = vD_Ant_CHEQUE;
R_Ant_CARTAO = vR_Ant_CARTAO;
D_Ant_CARTAO = vD_Ant_CARTAO;
select
--DINHEIRO
sum((case when nat = ´C´ and Conta = ´DINHEIRO´ then (Valor) end)),
sum((case when nat = ´D´ and Conta = ´DINHEIRO´ then (Valor) end)),
--CHEQUE
sum((case when nat = ´C´ and Conta = ´CHEQUE´ then (Valor) end)),
sum((case when nat = ´D´ and Conta = ´CHEQUE´ then (Valor) end)),
--CARTAO
sum((case when nat = ´C´ and Conta = ´CARTAO´ then (Valor) end)),
sum((case when nat = ´D´ and Conta = ´CARTAO´ then (Valor) end))
from
caixa
where
(Data between :vData_Inicio and :vDATA_FINAL)
and
(ID_Historico like :vid_historico)
and
(ID_Loja like :vid_filial)
into :vR_DIA_DINHEIRO,
:vD_DIA_DINHEIRO,
:vR_DIA_CHEQUE,
:vD_DIA_CHEQUE,
:vR_DIA_CARTAO,
:vD_DIA_CARTAO;
if (:vR_DIA_DINHEIRO is null) then vR_DIA_DINHEIRO = 0.00;
if (:vD_DIA_DINHEIRO is null) then vD_DIA_DINHEIRO = 0.00;
if (:vR_DIA_CHEQUE is null) then vR_DIA_CHEQUE = 0.00;
if (:vD_DIA_CHEQUE is null) then vD_DIA_CHEQUE = 0.00;
if (:vR_DIA_CARTAO is null) then vR_DIA_CARTAO = 0.00;
if (:vD_DIA_CARTAO is null) then vD_DIA_CARTAO = 0.00;
R_DIA_DINHEIRO = vR_DIA_DINHEIRO;
D_DIA_DINHEIRO = vD_DIA_DINHEIRO;
R_DIA_CHEQUE = vR_DIA_CHEQUE;
D_DIA_CHEQUE = vD_DIA_CHEQUE;
R_DIA_CARTAO = vR_DIA_CARTAO;
D_DIA_CARTAO = vD_DIA_CARTAO;
suspend;
end
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)