select case
ola gostaria de saber se é possivel fazer um select case com instrucao sql
por exemplo
select case of
0 : faz esse
1 : outro select
e assim por diante.
se alguem tiver um exemplo agradeco.
vlw
por exemplo
select case of
0 : faz esse
1 : outro select
e assim por diante.
se alguem tiver um exemplo agradeco.
vlw
Ciotti
Curtidas 0
Respostas
Djjunior
16/01/2008
select case when campo = 1 then "a" when campo = 2 then "b" else "?" end from tabela
Funcina em SQL / Oracle (me parece que a partir do 9
O Oracle tb tem o decode
decode(campo, valor, verdadeiro, falso)
ou seja:
Decode(campo, 1, ´a´, 2, ´b´, ´?´)
GOSTEI 0
Aroldo Zanela
16/01/2008
Colega,
Sim, veja o exemplo:
Sim, veja o exemplo:
select matricula, case unidade when 1 then ´Sul´ when 2 then ´Norte´ when 3 then ´Taguatinga´ end Unidade from tbInfoEscolares
GOSTEI 0
Ciotti
16/01/2008
ola gente valew pela dica mas acho que nao me expressei bem,estou usando um componete chamado group onde dentro dele criamos os index
por exemplo
id
cpf
razao_social
nesse caso gostaria de saber se quando eu selecionar o id ele so faz pesquisa com id , cpf a mesma coisa e assim vai.
consigo fazer de outras formas mas tentei usando case nao consegui.
seria assim mais ou menos assim
select case componente.index of
0: faz a pesquisa de id
1: faz pesquisa cpf
2 : faz pesquisa razao social
tipo em fez de ficar usando if uso case.
vlw gente
case
por exemplo
id
cpf
razao_social
nesse caso gostaria de saber se quando eu selecionar o id ele so faz pesquisa com id , cpf a mesma coisa e assim vai.
consigo fazer de outras formas mas tentei usando case nao consegui.
seria assim mais ou menos assim
select case componente.index of
0: faz a pesquisa de id
1: faz pesquisa cpf
2 : faz pesquisa razao social
tipo em fez de ficar usando if uso case.
vlw gente
case
GOSTEI 0
Djjunior
16/01/2008
você poderia usar algo do tipo:
só que ñ recomento esse tipo de código, pq com isso o banco deixa de usar os indices e passa a fazer fullScan na tabela, mas, se as tabelas forem pequenas tudo bem. :twisted:
where (campo1 = :param1 or :param1 = 0) and (campo2 = :param2 or :param2 = 0) and (campo3 = :param3 or :param3 = 0)
só que ñ recomento esse tipo de código, pq com isso o banco deixa de usar os indices e passa a fazer fullScan na tabela, mas, se as tabelas forem pequenas tudo bem. :twisted:
GOSTEI 0
Aroldo Zanela
16/01/2008
Colega,
Não estou certo de ter compreendido ainda, mas:
Não estou certo de ter compreendido ainda, mas:
function TForm1.Pesquisa(Tipo: Integer; Argumento: Variant): string; begin case Tipo of 1: Result := ´Select * from xTabela where codigo = ´ + VarToStr(Argumento); 2: Result := ´Select * from xTabela where cpf = ´ + QuotedStr(Argumento); 3: Result := ´Select * from xTabela where razao like´ + QuotedStr(´¬´+Argumento); end; end; procedure TForm1.Button1Click(Sender: TObject); begin ShowMessage( Pesquisa( rgCriterio.ItemIndex+1, ´111222333777´)); end;
GOSTEI 0
Djjunior
16/01/2008
cuidado com códigos do tipo:
Isso gera furo de segurança, além de não permitir que o seu SGDB utiliza cache.
prefira sempre usar parmetros em suas querys
´Select * from xTabela where codigo = ´ + edt.text
Isso gera furo de segurança, além de não permitir que o seu SGDB utiliza cache.
prefira sempre usar parmetros em suas querys
GOSTEI 0
Pestana_
16/01/2008
cuidado com códigos do tipo:
Isso gera furo de segurança, além de não permitir que o seu SGDB utiliza cache.
prefira sempre usar parmetros em suas querys
´Select * from xTabela where codigo = ´ + edt.text
Ola djjunior, você poderia explicar porque gera furos de segurança?
Obrigado pela atenção!
GOSTEI 0
Djjunior
16/01/2008
sql Inject (se não me engano é assim que se chama)
se alguem rodar um sqlMonitor e ver que suas querys são deste tipo ele pode alterar o conteúdo do seu edit para algo do tipo:
´1 or 0 = 0´
de forma que sua query que era pra ser
vai ficar
e em vez de trazer somente um registro ele irá trazer todos
se alguem rodar um sqlMonitor e ver que suas querys são deste tipo ele pode alterar o conteúdo do seu edit para algo do tipo:
´1 or 0 = 0´
de forma que sua query que era pra ser
´Select * from xTabela where codigo = 1
vai ficar
Select * from xTabela where codigo = 1 or 0 = 0
e em vez de trazer somente um registro ele irá trazer todos
GOSTEI 0
Pestana_
16/01/2008
sql Inject (se não me engano é assim que se chama)
se alguem rodar um sqlMonitor e ver que suas querys são deste tipo ele pode alterar o conteúdo do seu edit para algo do tipo:
´1 or 0 = 0´
de forma que sua query que era pra ser
vai ficar
e em vez de trazer somente um registro ele irá trazer todos
´Select * from xTabela where codigo = 1
Select * from xTabela where codigo = 1 or 0 = 0
[b:41af96233a]djjunior,[/b:41af96233a] Obrigado por responder!
valeu mesmo por essa dica, eu não tinha nem pensado nisso, preciso rever meus códigos. :lol:
Abraços,
Pestana.
GOSTEI 0