Criar condição com IF no SP - Firebird 2.0
To tentando inventar uma SP no firebrid, mais nem sei como fazer para funcionar
Mais alem de eu nao saber como fazer esta SP ainda contem erros
O que eu quero eh quando o IF (bcalculo = ´´) and (quantia ...) estiver satisfazendo a condiçao mostrar o select como esta ai no SP em um dbgrid.
Esses dois campos b_calculo e quantia faz parte de uma tabela, mais nao sei se pode ser feito assim.
Bom alias nem sei fazer esta procedure.
Fiz um pequeno modelo com o CASE no query com apenas uma tabela.
Mais este case eh soh pra eu ver, a nao ser que tenha como fazer um case como o select acima.
CREATE PROCEDURE SPCONCATENATION ( id_sal integer, id_formula integer, descricao varchar(80), id_func integer, id_gerarformula integer, formula varchar(50), quantia float, salario numeric(15,2)) returns ( quantia float, b_calculo varchar(10)) as begin if (exists(select A.id_sal, cast(A.salario as varchar(10))||B.formula||´*´||B.quantia, B.id_formula, B.descricao,A.id_func, A.nome, B.id_gerarformula from salario_M A left join formulas B on B.id_gerarformula = A.id_sal)) then IF (:b_calculo = ´Fixo´) then select A.id_sal, B.formula, B.id_formula, B.descricao, A.id_func, A.nome, B.id_gerarformula from salario_M A left join formulas B on B.id_gerarformula = A.id_sal group by 1,2,3,4,5,6,7 order by 6 into :id_func; else IF ((:b_calculo = ´Salario_Contratado´) and (:quantia = 0)) then select A.id_sal, cast(A.salario as varchar(10))||B.formula, B.id_formula, B.descricao,A.id_func, A.nome, B.id_gerarformula from salario_M A left join formulas B on B.id_gerarformula = A.id_sal group by 1,2,3,4,5,6,7 order by 6 into :id_func; else IF ((:b_calculo = ´Salario_Contratado´) and (:quantia <> 0)) then select A.id_sal, cast(A.salario as varchar(10))||B.formula||´*´||B.quantia, B.id_formula, B.descricao,A.id_func, A.nome, B.id_gerarformula from salario_M A left join formulas B on B.id_gerarformula = A.id_sal group by 1,2,3,4,5,6,7 order by 6 into :id_func; suspend; end;
Mais alem de eu nao saber como fazer esta SP ainda contem erros
[color=red:30d4671085]count of column list and variable list do not match.
Dynamic SQL Error.
SQL error code = -313.
count of column list and variable list do not match.[/color:30d4671085]
O que eu quero eh quando o IF (bcalculo = ´´) and (quantia ...) estiver satisfazendo a condiçao mostrar o select como esta ai no SP em um dbgrid.
Esses dois campos b_calculo e quantia faz parte de uma tabela, mais nao sei se pode ser feito assim.
Bom alias nem sei fazer esta procedure.
Fiz um pequeno modelo com o CASE no query com apenas uma tabela.
select id_formula, case marcar when ´True´ then case B_calculo when ´Salario_Governo´ then descricao || ´-´ || formula end else case B_Calculo when ´Salario_Contratado´ then descricao || ´-´ || formula || ´*´ || quantia end end as CamposM_N, count(marcar)as quantidade //aqui nem precisa, so fiz pra saber quanto tem cfe. o case. from formulas group by 1,2 order by 1
Adriano_servitec
Curtidas 0
Respostas
Adriano_servitec
11/07/2007
Alias postei errado o case do query o correto eh assim
Entao gostaria de saber se tem como unir as duas tabelas no join para msotrar como o select que estou tentando fazer na SP, ou se tem como fazer uma SP do jeito que estou precisando.
select id_formula, case when marcar=´True´ and B_Calculo = ´Salario_Governo´ then descricao || ´-´ || formula when marcar=´True´ and B_Calculo = ´Salario_Contratado´ then descricao || ´-´ || formula || ´*´ || quantia when marcar=´True´ and B_Calculo = ´Fixo´ Then descricao end as CamposM_N, count(marcar)as quantidade from formulas group by 1,2 order by 1
Entao gostaria de saber se tem como unir as duas tabelas no join para msotrar como o select que estou tentando fazer na SP, ou se tem como fazer uma SP do jeito que estou precisando.
GOSTEI 0
Adriano_servitec
11/07/2007
Consegui, mexendo daqui e dali, chegeui ao resultado que eu precisava fazer case no query mesmo.
Entao ficou assim (caso alguem precise de algum exemplo pra query tai)
Bom tai, caso resolvido
Entao ficou assim (caso alguem precise de algum exemplo pra query tai)
select A.id_empresa, A.id_sal, B.id_formula, B.descricao, A.id_func, A.nome, B.id_gerarformula, case when B.marcar=´True´ and B.B_Calculo = ´Fixo´ and B.valor = ´False´ Then A.salario when B.marcar=´True´ and B.B_Calculo = ´Salario_Contratado´ and B.quantidade = ´True´ and B.valor = ´False´ then cast(A.salario as varchar(10))||B.formula||´*´||B.quantia when B.marcar=´True´ and B.B_Calculo = ´Salario_Contratado´ and B.quantidade = ´False´ and B.valor = ´False´ then cast(A.salario as varchar (10))||B.formula when B.marcar=´True´ and B.B_Calculo = ´Salario_Contratado´ and B.quantidade = ´False´ and B.valor = ´True´ then B.vl_Informado when B.marcar=´True´ and B.B_Calculo = ´Salario_Governo´ and B.quantidade = ´True´ and B.valor = ´False´ then cast(A.salario as varchar(10))||B.formula||´*´||B.quantia when B.marcar=´True´ and B.B_Calculo = ´Salario_Governo´ and B.quantidade = ´False´ and B.valor = ´False´ then cast(A.salario as varchar (10))||B.formula when B.marcar=´True´ and B.B_Calculo = ´Salario_Governo´ and B.quantidade = ´False´ and B.valor = ´True´ then B.vl_informado end as CamposM_N from salario_m A left join formulas B on B.id_gerarformula = A.id_sal where B.marcar = ´True´ order by 1,5
Bom tai, caso resolvido
GOSTEI 0