Jump to content
RafaGomes

[Resolvido] Select Case condicional

Recommended Posts

Boa tarde, seria possível realizar uma consulta da seguinte forma:

SELECT *
FROM CARGA
WHERE (CASE WHEN :VARIAVEL = 2 THEN ('2', '7')
WHEN :VARIAVEL = 3 THEN ('3', '9', '10')
WHEN :VARIAVEL = 4 THEN '4'
WHEN :VARIAVEL = 5 THEN '5'
WHEN :VARIAVEL = 6 THEN '6' END) IN AD_DIAENTREGA;

 

Share this post


Link to post
Share on other sites

Mas :V ARIAVEL  seria comparado com alguma coluna ?

Com o conteúdo de AD_DIAENTREGA ?

 

Explique melhor o problema

Share this post


Link to post
Share on other sites

boa tarde Motta, eu tenho essa tabela carga no sistema eu preciso retornar os registros na seguinte situação: é passado um valor pela variável e conforme esse valor deverá retornar os registros que tenham os campos que preciso. ex:
carga segunda (2), carga terça(3), carga quarta(4), carga quinta(5), carga sexta(6), carga terça e quinta(7), carga segunda e quarta(8), todos os dias(9)

 

caso o valor da variável for 2 deverá retornar os registros 2, 8 e 9

caso o valor da variável for 3 deverá retornar os registros  3, 7 e 9

caso o valor da variável for 5 deverá retornar os registros 5 e 9

 

AD_DIAENTREGA é uma coluna da tabela carga é nele que que tem os valores que preciso buscar, VARIAVEL é um valor que vou passar através da aplicação.

a estrutura da tabela é: nro_carga, desc_carga, ad_diaentrega

Share this post


Link to post
Share on other sites
SELECT *
FROM CARGA
/*
caso o valor da variável for 2 deverá retornar os registros 2, 8 e 9
caso o valor da variável for 3 deverá retornar os registros  3, 7 e 9
caso o valor da variável for 5 deverá retornar os registros 5 e 9
*/
WHERE ( (:VARIAVEL = 2 AND AD_DIAENTREGA IN (2,8,9))
         OR
        (:VARIAVEL = 3 AND AD_DIAENTREGA IN (3,7,9))
         OR
        (:VARIAVEL = 5 AND AD_DIAENTREGA IN (5,9)) )

Faltou o 6 ...

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Similar Content

    • By ronimarcos.silva
      Estou com a seguinte situação: No Mysql eu consegui fazer em  "insert into" de uma única vez, com vários registros, conforme abaixo:
      insert into prefeitos (nome, cidade_id) VALUES ('Rodrigo Neves', 2), ('Caique Rosa Baldran', 9), ('Raquel Lira', 11), ('Maísa Albuquerque Sain', 12), ('Zenaldo Coutinho', null); Porém, no Oracle 12C, usando a mesma forma que no Mysql, está dando o seguinte erro: 
      insert into e080rat (CODEMP, CODSER, SEQRAT, TIPRSC, CRIRAT, NUMPRJ, CODFPJ, CTAFIN, CTARED, PERCTA, CODCCU, PERRAT) values ('800', 'S0001', '279', 'U', '5', '0', '0', '1360', '13730', '100', '31058', '100'), ('800', 'S0001', '280', 'U', '5', '0', '0', '1360', '13730', '100', '31060', '100'), ('800', 'S0001', '281', 'U', '5', '0', '0', '1360', '13730', '100', '31202', '100'), ('800', 'S0001', '282', 'U', '5', '0', '0', '1360', '13730', '100', '31203', '100'); ORA-00933: comando SQL não encerrado adequadamente
      Será que a sintaxe no Oracle é diferente?
       
      Eu sei que assim funciona perfeitamente:
      insert into e080rat (CODEMP, CODSER, SEQRAT, TIPRSC, CRIRAT, NUMPRJ, CODFPJ, CTAFIN, CTARED, PERCTA, CODCCU, PERRAT) values ('800', 'S0001', '279', 'U', '5', '0', '0', '1360', '13730', '100', '31058', '100'); insert into e080rat (CODEMP, CODSER, SEQRAT, TIPRSC, CRIRAT, NUMPRJ, CODFPJ, CTAFIN, CTARED, PERCTA, CODCCU, PERRAT) values ('800', 'S0001', '280', 'U', '5', '0', '0', '1360', '13730', '100', '31060', '100'); insert into e080rat (CODEMP, CODSER, SEQRAT, TIPRSC, CRIRAT, NUMPRJ, CODFPJ, CTAFIN, CTARED, PERCTA, CODCCU, PERRAT) values ('800', 'S0001', '281', 'U', '5', '0', '0', '1360', '13730', '100', '31202', '100'); insert into e080rat (CODEMP, CODSER, SEQRAT, TIPRSC, CRIRAT, NUMPRJ, CODFPJ, CTAFIN, CTARED, PERCTA, CODCCU, PERRAT) values ('800', 'S0001', '282', 'U', '5', '0', '0', '1360', '13730', '100', '31203', '100');  
      Porém, eu tenho uma tabela com quase 100.000 registros e gostaria de fazer em um único "insert". Eu uso o PL/SQLDeveloper e quando faço o "insert" da forma acima, com vários "insert into", ele abre um novo documento para cada "insert into", nisso ele trava, fica horas rodando o "insert" e não conclui se for em um único "insert" como no Mysql, creio que não pesaria tanto.
      Tem uma forma mais fácil de fazer o "insert into" com muitos dados envolvidos?
      Desde já agradeço.
    • By leonidas.assuncao
      Bom dia!
       
      Peço ajuda para um projeto escolar, vou descrever a função do script:
       
      > Banco de dados prévio contendo uma relação de nomes de empresas da internet e seus respectivos sites.
       
      >Função 1 do script:
       
      Caixa de seleção com os nomes das empresas. Após selecionar, o usuário clica no botão "acessar site" e será aberto uma nova guia com o endereço do site da empresa.
       
      Função 2 do script:
      Caixa de texto para digitação dos nomes das empresa com autocompletar, o usuário inicia a digitação do nome, o sistema retorna como as palavras até fechar o nome da empresa (igual ao buscador do google), o usuário clica no botão "acessar site" e será aberto uma nova guia com o endereço do site da empresa.
       
      Desde já agradeço!
       
    • By ronaldobgomes
      Boa tarde galera
      Tenho um problema que preciso resolver, seguinte:
      tenho um banco de dados e nele contem uma tabela chamada agencia, ela esta funcionando legal mas NÃO consegui montar um filtro legal pra ela,
      a tabela é de agencias bancarias,  chama-se Bancoage, os campos de pesquisa são Bancod e Agenum
      o editbanco.text busca só  banco , exemplo: '237'.O editagencia.text busca só agencias, exemplo: '0522' e os dois edit teria que pesquisar banco agencia, 
      banco - agencia  - 
      237         0522
      este comando eu quero usar nas pesquisas e também pra verificar se ja existe a agencia cadastrada.
      meu filtro só faz em um edit só, me ajudem por favor.
      Uso UniSql, delphi 10.3 e que fique claro eu estou desenvolvendo um programa para empresas de cobrancas e esta base alimenta o cadastro de cheques
       
      Valew!!!!!
    • By Gustavo2503
      Estes são alguns pontos do que eu preciso
      Eu tenho um sistema que em cada registro tem um ou mais anexos. Os nomes destes anexos estão guardados no banco de dados, e os arquivos ficam na pasta anexos/ no servidor.  O usuário manda este registro via email e os anexos devem ir juntos. Eu estou usando a função do PHP mail(). Objetivo: Enviar um email com um ou mais anexos
      Problema: Este código só está enviando um anexo, que é o último anexo que a query pega.
      OBS.: Eu não entendo de boundary e de anexos por email, eu peguei esse código na internet, mas eu fiz algumas alterações nele, porque no código original só mandava um anexo.
      $assunto = "Registros"; $boundary = "XYZ-".md5(date("dmYis"))."-ZYX"; // cabeçalho do email $cabecalho = "MIME-Version: 1.0" . PHP_EOL; $cabecalho .= "Content-Type: multipart/mixed; "; $cabecalho .= "boundary=" . $boundary . PHP_EOL; $cabecalho .= "$boundary" . PHP_EOL; $msg = ""; // Anexos $sql = " SELECT A.LOCAL, A.ARQUIVO FROM TB_ANEXOS AS A LEFT JOIN TB_REGISTROS AS R ON (A.ID_REGISTRO = R.ID) WHERE R.ID = $ID "; $resultado = mysqli_query($link, $sql); if ($resultado){ while ($dados = mysqli_fetch_array($resultado, MYSQLI_ASSOC)){ $LOCAL = $dados['LOCAL']; $ARQUIVO_NAME = $dados['ARQUIVO']; $path = 'anexos/'.$LOCAL; $fileType = mime_content_type( $path ); // Pegando o conteúdo do arquivo $fp = fopen( $path, "rb" ); // abre o arquivo enviado $anexo = fread( $fp, filesize( $path ) ); // calcula o tamanho $anexo = chunk_split(base64_encode( $anexo )); // codifica o anexo em base 64 fclose( $fp ); // fecha o arquivo $msg.= "Content-Type: ". $fileType ."; name=\"". $ARQUIVO_NAME . "\"" . PHP_EOL; $msg.= "Content-Transfer-Encoding: base64" . PHP_EOL; $msg.= "Content-Disposition: attachment; filename=\"". $ARQUIVO_NAME . "\"" . PHP_EOL; $msg.= "$anexo" . PHP_EOL; $msg.= "--$boundary" . PHP_EOL; } } $msg.= "--$boundary" . PHP_EOL; $msg.= "Content-Type: text/html; charset='utf-8'" . PHP_EOL; $msg.= " <!doctype html> <html lang='pt-br'> <head> <meta charset='UTF-8'> <meta name='viewport' content='width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0'> <meta http-equiv='X-UA-Compatible' content='ie=edge'> <title>$assunto</title> <style> h2, b, legend { color: #2d2d2d; } </style> </head> <body> <p>CORPO DO EMAIL</p> </body> </html> "; $msg.= "--$boundary" . PHP_EOL; if(mail($para, $assunto, $msg, $cabecalho)) { echo "<p>Email enviado com sucesso</p>"; } else { echo '<p style="color: #f00">Erro!</p>'; }  
    • By pablwo
      CREATE TABLE FUNCIONARIO( MATRICULA NUMBER PRIMARY KEY, NOME VARCHAR2(100) ); CREATE TABLE DEPENDENTE( CPF VARCHAR2(14) PRIMARY KEY, NOME VARCHAR2(100), MATRICULA_FUNCIONARIO NUMBER, CONSTRAINT fk_dependente_matricula FOREIGN KEY (matricula_funcionario) REFERENCES FUNCIONARIO(matricula) ); CREATE OR REPLACE TRIGGER QUANTIDADE_DE_DEPENDENTE BEFORE INSERT OR UPDATE ON DEPENDENTE FOR EACH ROW BEGIN IF:NEW.MATRICULA_FUNCIONARIO IN (SELECT MATRICULA_FUNCIONARIO FROM DEPENDENTE HAVING COUNT(MATRICULA_FUNCIONARIO) >= 3 GROUP BY MATRICULA_FUNCIONARIO) THEN RAISE_APPLICATION_ERROR(-20000, 'Funcionario Excedeu a Quantidade de Dependentes'); END IF; END; Boa noite, estou com dificuldades em criar triggers no sql oracle. Minha dificuldade é criar um trigger que so permita que um funcionario tenha no maximo 3 dependetes, acredito que o erro seja no select dentro do if, quando eu troco por valores como (1,2,3) esses valores servem como matriculas de funcionários que não é mais permitido adicionar dependentes.
×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.