1
resposta

[Dúvida] problemas no sql

estou tendo um problema no banco mas não sei como resolver a mensagem de erro que aparece no console do java é: erro ao autenticar o usuário java.sql.SQLSyntaxErrorException: ORA-00933: comando SQL não encerrado adequadamente tambem quando eu seleciono o insert do java_usuario_perfil dá esse erro: Erro a partir da linha : 64 no comando - insert into java_usuario_perfil values (1000,1) Relatório de erros - ORA-00001: restrição exclusiva (RM550843.SYS_C003284317) violada

esse é o script do banco:

-- deletando as tabelas
drop table java_usuario_perfil;
drop table java_perfil;
drop table java_usuario;
commit;

-- deletando as sequences
drop sequence sequencia_usuario;
drop sequence sequencia_perfil;
commit;

-- cria  o da sequence para a tabela java_usuario
create sequence sequencia_usuario
    START WITH 1000
    INCREMENT BY 1
    NOMAXVALUE
    NOCYCLE
    CACHE 10;
    
-- cria  o da sequence para a tabela java_usuario
create sequence sequencia_perfil
    START WITH 1
    INCREMENT BY 1
    NOMAXVALUE
    NOCYCLE
    CACHE 10;
    
-- cria  o da tabela java_perfil
create table java_perfil(
    id_perfil number,
    nome varchar2(50),
    primary key(id_perfil)
);
commit;

-- cria  o da tabela java_usuario
create table java_usuario(
    id_usuario number,
    nome varchar2(50),
    email varchar2(50),
    senha varchar2(50),
    ativo number(1) check(ativo in (0, 1)),
    primary key(id_usuario)
);
commit;

-- tabela associativa entre java_usuario e java_perfil
create table java_usuario_perfil (
    id_usuario number,
    id_perfil number,
    primary key(id_usuario, id_perfil),
    foreign key(id_usuario) references java_usuario(id_usuario),
    foreign key(id_perfil) references java_perfil(id_perfil)
);
commit;

select u.nome, p.nome as perfil from java_usuario u
join java_usuario_perfil up on u.id_usuario = up.id_usuario
join java_perfil p on p.id_perfil = up.id_perfil
where u.email = 'rafael550843@fiap.com.br' and u.senha = '200604';

INSERT into java_perfil values (sequencia_perfil.nextval, 'admin');
INSERT into java_usuario values (sequencia_usuario.nextval, 'Rafael', 'rafael550843@fiap.com.br', '200604', 1);
insert into java_usuario_perfil values (1000,1);

select * from java_perfil;
select * from java_usuario;
select * from java_usuario_perfil;
1 resposta

Olá Rafaelng, tudo bem?

O erro ORA-00933: comando SQL não encerrado adequadamente ocorre quando há algum problema na formatação do comando SQL, estando incorreta ou incompleta ( por exemplo, a falta de um ;) . Olhei o seu código e não vi algum problema. Mas você comentou sobre console do Java, então, o problema pode estar relacionado a como o seu código Java está passando a string SQL. Portanto, caso esteja utilizando alguma aplicação, verifique como está passando os comandos SQL.

Um exemplo de uma consulta no código seria:

String sql = "SELECT u.nome, p.nome AS perfil " +
             "FROM java_usuario u " +
             "JOIN java_usuario_perfil up ON u.id_usuario = up.id_usuario " +
             "JOIN java_perfil p ON p.id_perfil = up.id_perfil " +
             "WHERE u.email = ? AND u.senha = ?";

Já o erro ORA-00001: restrição exclusiva (RM550843.SYS_C003284317) violada indica que você está tentando inserir um valor que já existe em uma coluna que deve ter valores únicos. Por exemplo, no seu script, você está tentando inserir (1000, 1) na tabela java_usuario_perfil. Verifique se esse id_usuario ou id_perfil já exista na tabela. Como id_usuario e id_perfil formam uma chave primária composta, a combinação desses dois valores deve ser única.

Espero ter ajudado.

Qualquer dúvida, não hesite em compartilhar no fórum.

Abraços e bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado