CREATE TABLE Escola (
Cd_Escola Number(6) NOT NULL,
Nm_Escola varchar(50) NOT NULL,
Ds_Endereco VARCHAR2(50) NOT NULL,
Ds_Bairro VARCHAR(40) NOT NULL,
constraint PK_Escola PRIMARY KEY(Cd_Escola)
);
CREATE TABLE Grau (
Cd_Grau Number(2) NOT NULL,
Nm_Grau varchar(50) NOT NULL,
constraint PK_Grau PRIMARY KEY(Cd_Grau)
);
CREATE TABLE Periodo (
Cd_Periodo Number(2) NOT NULL,
Nm_Periodo varchar2(50) NOT NULL,
constraint PK_Periodo PRIMARY KEY(Cd_Periodo)
);
Agora eu te pergunto: existe uma tabela com o nome periodo? Ela já está criada?
Quando você vai trabalhar com banco de dados relacional, como o caso do oracle, precisa ter em mente que ele funciona de maneira estruturada, mais ou menos comos nós lemos (embora a gente consiga burlar algumas coisas, sempre tendemos a ler da esquerda para a direita e de cima para baixo). Logo, se você tem, em teu script, algo assim:
Coloca o código.
Este erro, table or view does not exists, é bem específico e só ocorre em 2 situações:
O que foi escrito está errado, não confere com o nome da tabela, daí não vai achar a tabela mesmo
O que foi escrito está certo, confere com o nome que a tabela deveria ter, mas a tabela não existe.
Em qualquer um dos dois casos, será preciso verificar como proceder.
CREATE TABLE Classe (
Cd_Classe Number(8) NOT NULL,
Nr_AnoLetivo Number(4) NOT NULL,
constraint Classe_Nr_AnoLetivo_ck check(Nr_AnoLetivo > 2000),
Nr_Serie Number(2) NOT NULL,
Sg_Turma VARCHAR2(2) not NULL,
Cd_Escola Number(6) not NULL,
Cd_Grau Number(2) not NULL,
Cd_Periodo Number(2) not NULL,
CodSexo CHAR(1) not NULL CHECK (codsexo in ('m', 'f')),
constraint PK_Classe PRIMARY KEY(Cd_Classe),
constraint FK_Classe FOREIGN KEY(Cd_Escola) REFERENCES Escola(Cd_Escola),/* 3 O relacionamento se faz na FK, chave estrangeira aponta */
/*para primary key de outra tabela*/
constraint FK_Classe FOREIGN KEY(Cd_Grau) REFERENCES Grau(Cd_Grau),
constraint FK_Classe FOREIGN KEY(Cd_Periodo) REFERENCES Peridodo(Cd_Periodo)
);
CREATE TABLE Escola (
Cd_Escola Number(6) NOT NULL,
Nm_Escola varchar(50) NOT NULL,
Ds_Endereco VARCHAR2(50) NOT NULL,
Ds_Bairro VARCHAR(40) NOT NULL,
constraint PK_Escola PRIMARY KEY(Cd_Escola)
);
CREATE TABLE Grau (
Cd_Grau Number(2) NOT NULL,
Nm_Grau varchar(50) NOT NULL,
constraint PK_Grau PRIMARY KEY(Cd_Grau)
);
CREATE TABLE Periodo (
Cd_Periodo Number(2) NOT NULL,
Nm_Periodo varchar2(50) NOT NULL,
constraint PK_Periodo PRIMARY KEY(Cd_Periodo)
);
Viu o que eu disse acima?
Você está declarando as tabelas que contém as colunas que vai utilizar na tabela Classe depois da tabela classe. Acabará tendo esse erro realmente.
Sugiro colocar a tabela classe por último, no script.
Tanto é que se eu executar o create de novo nas tabelas abaixo da tabela classe elas vão apresentar o seguinte erro:
identar texto Relatório de erros -
ORA-00955: nome já está sendo usado por um objeto existente
00955. 00000 - “name is already used by an existing object”
*Cause:
*Action:
Então mudei o nome da tabela mas apareceu outro erro:
Relatório de erros -
ORA-02264: nome já usado por uma restrição existente
02264. 00000 - "name already used by an existing constraint"
*Cause: The specified constraint name has to be unique.
*Action: Specify a unique constraint name for the constraint.
Maldito CTRL+C / CTRL+V!
Você copiou e colou a linha referente as FKs e não alterou quase nada nelas.
Resultado, teve problemas com a coluna referindo a uma tabela errada, teve problemas com o nome da tabela e está tendo problemas com o nome da constraint.
São dois pontos em três linhas de código quase iguais e que impediram que você conseguisse criar tuas tabelas sem erros.
Isso pode acontecer com qualquer pessoa. É preciso ter mais atenção, só isso.