A função DECODE originalmente disponível nas instalações de ...
Gabarito comentado
Confira o gabarito comentado por um dos nossos professores
Alternativa correta: A - CASE
Para resolver esta questão, é necessário compreender como diferentes sistemas de gerenciamento de banco de dados (SGBD) implementam funcionalidades para avaliação condicional em consultas SQL. A função DECODE em Oracle realiza uma comparação simples e retorna um valor baseado nessa comparação. Busca-se um equivalente em outros SGBDs, como o MS SQL Server e o MySQL, capaz de oferecer funcionalidade similar.
O comando CASE é o equivalente mais próximo disponível tanto no MS SQL Server quanto no MySQL para a função DECODE do Oracle. Ele permite avaliar condições e retornar valores baseados em resultados de teste lógico. A estrutura do CASE em SQL é bastante flexível e pode ser usada tanto para escolhas simples (como um IF-THEN-ELSE), quanto para listas de possibilidades, imitando a funcionalidade de seleção múltipla, como um SWITCH ou a própria DECODE.
Um exemplo de uso do CASE em MySQL seria:
SELECT id, CASE status WHEN 'A' THEN 'Ativo' WHEN 'I' THEN 'Inativo' ELSE 'Indefinido' END AS StatusDescricao FROM tabela;
Este trecho utiliza o CASE para avaliar o valor da coluna "status" e retorna 'Ativo' se for 'A', 'Inativo' se for 'I', ou 'Indefinido' para qualquer outro valor.
As demais alternativas não são equivalentes diretas da função DECODE. COALESCE retorna o primeiro valor não-nulo em uma lista de valores, SUBSTRING é utilizado para extrair uma substring de uma string, e SWITCH, embora seja um comando de escolha múltipla, não é um comando do MySQL ou MS SQL Server.
O comando IF-THEN-ELSE não existe como tal em SQL; no MySQL, a função IF realiza operações condicionais, mas de forma mais limitada que o CASE. Portanto, a alternativa A - CASE é a correta por ser a que fornece um método condicional de equivalência mais próxima à função DECODE do Oracle em outros SGBDs mencionados.
Clique para visualizar este gabarito
Visualize o gabarito desta questão clicando no botão abaixo
Comentários
Veja os comentários dos nossos alunos
A função DECODE trabalha da mesma forma que o IF
sintaxe:
SELECT DECODE(1,1, ‘equal’)
essa função irá analisar se o primeiro argumento(1) é igual ao segundo(1).
Caso seja, ela trará o terceiro argumento (“equal”)
nas alternativas não há a opção if , mas o Case também trabalha com a mesma lógica
Uma expressão DECODE substitui um valor específico por outro valor específico ou por valor padrão, dependendo do resultado de uma condição de igualdade. Essa operação é equivalente à operação de uma expressão CASE simples ou de uma instrução IF-THEN-ELSE. para min essa questão tem dois gabaritos! https://docs.aws.amazon.com/pt_br/redshift/latest/dg/r_DECODE_expression.html
Temos duas formas de trabalhar com condição dentro de consultas em Oracle SQL, são elas o Case e o Decode. Os dois tem a mesma função, que é permitir de forma dinâmica e pratica como obter um retorno de uma coluna com base em uma condição, ou seja, ter a possibilidade de usar condições semelhantes ao IF-THEN-ELSE em consultas.
Assim, é possível definir de forma dinâmica e bem pratica o que será exibido na tela, evitando assim, consultas com retorno de colunas em branco, por exemplo.
Diferença
O exemplo abaixo mostra o tipo de trabalho com o Case e o Decode. O Decode irá traduzir os valores passados por uma coluna com o esquema de codificação (1, 2, 3, 4) e irá retornar os valores decodificados (“Presidente”, “Diretor”, “Gerente”, “Funcionário”).
O Case é parecido com o Decode, eles tem uma forma de processo que vem lendo os valores da esquerda para a direita, avaliando um a um e quando encontra um valor verdadeiro, ele retorna o valor correspondente.
Por exemplo, você precisa saber qual o cargo referente ao código 2, então, ele irá pesquisar esse valor e quando achar, retornará o valor equivalente, ou seja, “Diretor”.
Qualquer expressão feita com o Case poderá ser feito com o Decode, mas é difícil ter a mesma flexibilidade e possivelmente, será desgastante escrever grandes códigos com o Decode. A Diferença entre os dois é praticamente essa, que na verdade, faz com que o Case seja melhor de se trabalhar.
Decode
SELECT
DECODE
(
vCargo,
1, 'Presidente',
2, 'Diretor',
3, 'Gerente',
'Funcionário'
)
FROM dual;
Case Simples
SELECT
CASE
vCargo
WHEN 1
THEN 'Presidente'
WHEN 2
THEN 'Diretor'
WHEN 3
THEN 'Gerente'
ELSE 'Funcionário'
END
FROM dual;
Case com Pesquisa
SELECT
CASE
WHEN vCargo = 1
THEN 'Presidente'
WHEN vCargo = 2
THEN 'Diretor'
WHEN vCargo = 3
THEN 'Gerente'
ELSE 'Funcionário'
END
FROM dual;
Case x Decode, Quem vence?
Implementado na versão Oracle 8.1.6, o Case é o melhor. Ele é mais flexível, tem uma melhor performance de execução, é mais fácil para leitura e escrita e conseqüentemente é mais fácil de eliminar erros e manter uma codificação mais elegante.
https://www.google.com/amp/s/www.devmedia.com.br/amp/decode-x-case/4952
a-
SIM, O DECODE NO ORACLE EQUIVALE AO CASE NO SQL.
ex.:
SELECT col,
DECODE (col_pk,
1, 'label 1',
2, 'label 2', 3, 'label 3', 'Other - default para demais campos da col_pk') AS var FROM tabela
--limita output as 10 primeiras tuplas
where rownum <=10;
A função DECODE no Oracle pode ser substituída por diferentes abordagens em outros bancos de dados. Para o MS SQL Server e MySQL, uma alternativa comum à função DECODE do Oracle é usar a expressão CASE.
Portanto, a resposta correta é:
A) CASE
Assim, ao migrar consultas de Oracle para MS SQL Server ou MySQL, você pode substituir o uso da função DECODE por uma expressão CASE. Essa abordagem permite realizar avaliações condicionais e fornecer resultados específicos com base em diferentes condições.
Clique para visualizar este comentário
Visualize os comentários desta questão clicando no botão abaixo