A função DECODE originalmente disponível nas instalações de ...

Próximas questões
Com base no mesmo assunto
Q1933765 Banco de Dados
A função DECODE originalmente disponível nas instalações de bancos de dados Oracle pode, em consultas para o MS SQL Server e o MySQL, ser substituída pelo comando/função:
Alternativas

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