ID 695215 Banca FCC Órgão TRF - 2ª REGIÃO Ano 2012 Provas FCC - 2012 - TRF - 2ª REGIÃO - Analista Judiciário - Informática Disciplina Banco de Dados Assuntos Oracle Sobre a instrução SELECT do Oracle, é INCORRETO afirmar: Alternativas O Oracle possui uma tabela denominada DUAL, para ser utilizada em instruções com valores literais que não possuem tabelas. Para que uma instrução realize a ordenação e retorne primeiramente os valores NULL é necessário que nela esteja contido o comando NULL FIRST. SELECT * FROM funcionarios WHERE ROWNUM <= 5; é usada para limitar a quantidade de linhas que podem ser retornadas em uma instrução de consulta na tabela funcionários. Numa busca ordenada, as palavras com letras maiúsculas são listadas antes das palavras com letras minúsculas. SELECT RIGHT('10/12/2010', 4) AS 'Ano' é uma instrução típica que retorna os caracteres à direita do conjunto especificado. Responder Comentários De acordo com minhas pesquisas, Oracle não tem RIGHT.O correto seria usar SUBSTR com valor negativo.Ex: SELECT SUBSTR(BRASIL, -3)Resultado: SILFonte:http://www.experts-exchange.com/Database/Oracle/9.x/Q_22391699.html Realmente o comando do item "e" está errado, mas o comando correto para a letra "b" é NULLS FIRST.Isso torna a questão errada.A FCC ainda esta avaliando o recurso que fiz, vamos ver no que dá Na verdade o gabarito dessa questão está é errado. O correto na B seria nullS first e a função RIGHT EXISTE SIM e sua sintaxe na assertiva E está perfeita:http://docs.oracle.com/cd/E17952_01/refman-5.1-en/string-functions.html#function_right Senhores,essa questão foi ANULADA, apesar do gabarito correto ser a letra B, conforme explicação anterior:http://www.concursosfcc.com.br/concursos/trf2r111/trf2r111_atribuicoes_alteracoes_de_questoes.pdf Letra A: Está correto, porque existe a tabela DUAL.Letra B: Está incorreta porque o nome correto do comando é NULLS FIRST. (http://www.orafaq.com/wiki/NULL)Letra C: Está correta porque existe a opção ROWNUM para limitar a quantidade de linhas. Lembrando que o comando não funciona usando somente o operador de igual = .Letra D: Está incorreta, porque no Oracle a ordernação não é Case Sensitive. (http://www.orafaq.com/node/999)Letra E: Está incorreta pois o comando RIGHT não existe para SGBD Oracle, para essa função é utilizado SUBSTR. Mas ele existe sim no SGBD MySQL conforme link citado pelo colega acima. (http://docs.oracle.com/cd/E17952_01/refman-5.1-en/string-functions.html#function_right) a) tabela DUAL existe e seu conteúdo é:> select * from DUAL DUMMY X Como, diferentemente dos demais bancos de dados, o Oracle não permite uma instrução SELECT sem uma cláusula FROM, é necessário uma tabela para instruções literais. Por exemplo: > select 1+1 as soma1mais1Essa instrução retornaria: ORA-00923: palavra-chave FROM não localizada onde esperada Agora a tabela DUAL nos serve e muito> select 1+1 as soma1mais1 FROM DUAL nos retorna o seguinte: SOMA1MAIS1 2 b) Correta a verificação dos colegas: (Alternativa Incorreta por erro de digitação de um S após a palavra NULL) > select a,b,c order by c NULLS FIRSTc) ROWNUM enumera linhas de 1 a n, de modo que somente podemos filtrar linhas iniciando em 1 já que a cada linha retornada no sql, teremos um valor incremental iniciado em 1, sendo assim é possível: c.1) > select * from funcionarios where ROWNUM = 1;c.2) > select * from funcionarios where ROWNUM >= 1; (>=2 em diante, não é possível, visto que o ROWNUM sempre inicia em 1)c.3) > select * from funcionarios where ROWNUM <n (n=qualquer valor de 1 em diante, independente de existir o numero n de linhas)c.4) > select * from funcionarios where ROWNUM <=nResumindo, não é possível ROWNUM = 2..n nem mesmo ROWNUM >1..n, visto que não é necessário limitarmos resultados dessa maneira, quando quisermos utilizar uma dessas formas (erradas) é porque estaríamos querendo efetuar um filtro em cima de uma ou n colunas. Também é possível combinar os ROWNUM (somente os válidos)d) INDEPENDENTE de o Oracle ser case INSENSITIVE, a busca ordenada, ordena pelo correspondente ASCII da letra, sendo assim, está correto. Sempre irá ordenar a letra maiúscula primeira. Vejam: A = 65 Deca = 97 Dec a justificativa para a letra maíscula aparecer antes da minúscula em uma ordenação ascendente é que, como 65 vem antes do 97, 'A' vem antes do 'a'É possível alterar a ordenação através da cláusula order by:> ... order by NLSSORT(nome, 'NLS_SORT = XGERMAN')Para mais detalhes, acesse:http://docs.oracle.com/cd/B13789_01/server.101/b10749/ch5lings.htm#1008801e) RIGHT existe em mysql e não em oracle (alternativa incorreta)Como possuímos duas alternativas incorretas, o mais sensato seria marcar a mais incorreta de todas que é a letra E, mas a questão é passível de anulação.