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?