Importante

Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!

17
respostas

Algum erro no sql?

Boa noite. Ao tentar resolver um exercício do Modulo II do curso de Oracle, aonde é solicitado ..."Selecione o curso e as médias de notas, levando em conta somente alunos que tenham "Silva" ou "Santos" no sobrenome." Foi escrito o sql abaixo, porém, a frase "Não há linhas selecionadas" aparece no prompt. Já fiz um select em todas as tabelas e estão preenchidas. Alguém poderia me auxiliar se este sql está correto?

select c.nome, avg(n.nota) as media from nota n
    join resposta r on r.id = n.resposta_id
    join exercicio e on e.id = r.exercicio_id
    join secao s on s.id = e.secao_id
    join curso c on c.id = s.curso_id
    join aluno a on a.id = r.aluno_id
where a.nome like '%Santos%' or a.nome like '%Silva%'
group by c.nome;
17 respostas

Roda assim o código e cola a resposta pra gente ver como tá a tabela nesse ponto.

select *, c.nome, avg(n.nota) as media from nota n
    join resposta r on r.id = n.resposta_id
    join exercicio e on e.id = r.exercicio_id
    join secao s on s.id = e.secao_id
    join curso c on c.id = s.curso_id
    join aluno a on a.id = r.aluno_id
group by c.nome;

Apareceu mensagem de erro!

select *, c.nome, avg(n.nota) as media from nota n
        *
ERRO na linha 1:
ORA-00923: palavra-chave FROM nÒo localizada onde esperada

Desculpe, esqueci do group by lá embaixo por isso não retornou tudo. Tamo fazendo assim só pra tentar depurar. Tenta assim:

select  c.nome, avg(n.nota) as media from nota n
    join resposta r on r.id = n.resposta_id
    join exercicio e on e.id = r.exercicio_id
    join secao s on s.id = e.secao_id
    join curso c on c.id = s.curso_id
    join aluno a on a.id = r.aluno_id
group by c.nome;
select  c.nome, avg(n.nota) as media from nota n
  2      join resposta r on r.id = n.resposta_id
  3      join exercicio e on e.id = r.exercicio_id
  4      join secao s on s.id = e.secao_id
  5      join curso c on c.id = s.curso_id
  6      join aluno a on a.id = r.aluno_id
  7  group by c.nome;

não há linhas selecionadas

Ué mas seu código tá igual ao do professor. Dá um select na aluno e mostra o que traz.

SQL> select * from aluno;

        ID NOME                           EMAIL
---------- ------------------------------ ------------------------------
         1 Joao da Silva                  joao@dasilva.com
         2 Frederico Jose                 fred@jose.com
         3 Alberto Santos                 alberto@santos.com
         4 Renata Alonso                  renata@alonso.com
         5 Paulo da Silva                 paulo@dasilva.com
         6 Carlos Cunha                   carlos@cunha.com
         7 Paulo Jose                     paulo@jose.com
         8 Manoel Santos                  manoel@santos.com
         9 Renata Ferreira                renata@ferreira.com
        10 Paula Soares                   paula@soares.com
        11 Jose da Silva                  jose@dasilva.com

        ID NOME                           EMAIL
---------- ------------------------------ ------------------------------
        12 Danilo Cunha                   danilo@cunha.com
        13 Zilmira Jose                   zilmira@jose.com
        14 Cristaldo Santos               cristaldo@santos.com
        15 Osmir Ferreira                 osmir@ferreira.com
        16 Claudio Soares                 claudio@soares.com

16 linhas selecionadas.

Vou baixar todo o banco de dados do professor para ver se encontro a solução.

Beleza, obrigado pela ajuda.

Importei as tabelas novamente via sqlplus, e percebi que apareceu estas mensagens de erro.

SQL> @c:\users\fabricio\desktop\sql1br.sql
DROP TABLE aluno
           *
ERRO na linha 1:
ORA-00942: a tabela ou view nÒo existe
...
DROP TABLE curso
           *
ERRO na linha 1:
ORA-00942: a tabela ou view nÒo existe
...
DROP TABLE exercicio
           *
ERRO na linha 1:
ORA-00942: a tabela ou view nÒo existe
...
DROP TABLE nota
           *
ERRO na linha 1:
ORA-00942: a tabela ou view nÒo existe
....
DROP TABLE resposta
           *
ERRO na linha 1:
ORA-00942: a tabela ou view nÒo existe
....
DROP TABLE secao
           *
ERRO na linha 1:
ORA-00942: a tabela ou view nÒo existe
.....

Não sei se estes erros estão aparecendo para você.

Deu o mesmo erro no meu. aparecia que não há linhas... importa a tabela de novo com o o @caminho da tabela\nomedatabela.sql

Bom dia. Já havia feito o drop nas tabelas e importado novamente, mas aparece o mesmo erro. O arquivo não está corrompido?

Não to conseguindo instalar no meu pc (preciso de um novo rsrsrs). E se você fizesse backup do que tem de importante no banco de dados e reinstalasse ele, ou desse drop na database e criasse ela novamente? Se o arquivo de importação tivesse corrompido o erro seria diferente.

comando certo seria

drop database;

?

Sim:

drop database nomedobanco;

Estou usando o comando abaixo para descobrir o nome do banco, o comando está certo?

select sys_context('userenv', 'db_name')from dual;

Esse comando mostra o nome do banco de dados com especificado no parâmetro DB_NAME de inicialização.

No Oracla SQL não tem um comando tipo SHOW DATABASES do MySql que mostra todos os bancos de dados. A não ser que você visualize por alguma interface gráfica do banco de dados não vai conseguir ver o nome dos bancos de dados facilmente.

Já que está com dificuldades de encontrar o nome do banco e a importação está dando erro a solução é reinstalar o servidor Oracle de banco de dados.

Boa noite. Infelizmente não funcionou. Reinstalei o banco, inclusive em local diferente, e o erro persiste. Não será a base que está com algum erro?