Задание в португальском университете

Viltora

Добрый день, нужна небольшая помощь с заданием (sql oracle 11exp.ed) Задание таково ,надо создать 1 таблицу, но чтобы её создать надо до этого создать 2 другие. Первую у меня получилось, пытаюсь запилить вторую, к сожалению выдаёт ошибку. Прикладываю фото, ошибку и задание Код первой таблицы, которая создалась
CREATE TABLE Empregados
( Num_empregado NUMBER (4)
CONSTRAINT Num_key PRIMARY KEY,
Nome_empregado VARCHAR2 (12) NOT NULL,
Profissao VARCHAR2 (12) NOT NULL,
Chefe NUMBER (4),
Data_adm DATE DEFAULT SYSDATE,
Salario NUMBER (7,2)
CHECK (Salario BETWEEN 500 AND 6000));
Код второй таблицы, в которой где-то ошибка
CREATE TABLE Projectos 
(Id_projecto NUMBER (4)
CONSTRAINT Id_key PRIMARY KEY,
Descricao_projecto VARCHAR2 (14),
Responsavel_projecto NUMBER
CONTSTRAINT fk_responsavel
FOREIGN KEY (Responsavel_projecto)
REFERENCES Empregados (Responsavel_projecto),
Orcamento_projecto NUMBER (10,2),
Tempo_projecto NUMBER (3));
И сама ошибка ORA-00907: missing right parenthesis
3 ответа

Viltora

Во втором коде, я нашёл ошибку я написал CONTSTRAINT а не Constraint. я изменил, и появилась вот такая ошибка ORA-02253: constraint specification not allowed hereПопробовал написать 3 таблицу (Tarefas)
CREATE TABLE Tarefas (
Id_projecto NUMBER (4)
CONSTRAINT fk_id_projecto FOREIGN KEY
(Id_projecto) REFERENCES Projectos (Id_projecto),
Num_empregado NUMBER (4)
CONSTRAINT num_empregado_fr_key FOREIGN KEY
(Num_empregado) REFERENCES Empregados (Num_empregado),
Id_Tarefa NUMBER (4) PRIMARY KEY,
Data_inicio DATE NOT NULL,
Data_fim DATE
CHECK (Data_fim > Data_inicio),
Designacao_tarefa VARCHAR2 (200),
Horas_trabalho NUMBER (3));
Но всё равно ошибка : ORA-02253: constraint specification not allowed here


Viltora

Код второй таблицы, в которой где-то ошибка
Как минимум, в первой таблице отсутствует поле Responsavel_projecto, на которое идет ссылка во внешнем ключе второй таблицы Empregados (Responsavel_projecto). Кроме того, чтобы был внешний ключ, нужен (Oracle так говорит) индекс, на который он ссылается. Вот в таком варианте у меня все создалось, но мне не нравятся эти сокращенные нотации. По-моему, они являются источником ошибок. По мне так гораздо проще создать таблицы, а потом добавить ограничения через ALTER TABLE
Кликните здесь для просмотра всего текста
CREATE TABLE Empregados
( Num_empregado NUMBER (4)   CONSTRAINT Num_key PRIMARY KEY,
  Nome_empregado VARCHAR2 (12) NOT NULL, 
  Profissao VARCHAR2 (12) NOT NULL,
  Chefe NUMBER (4),
  Responsavel_projecto  NUMBER  CONSTRAINT Projecto UNIQUE,
  Data_adm DATE DEFAULT SYSDATE,
  Salario NUMBER (7,2)
CHECK (Salario BETWEEN 500 AND 6000));
 
CREATE TABLE Projectos 
( Id_projecto NUMBER (4)  CONSTRAINT Id_key PRIMARY KEY,
  Descricao_projecto VARCHAR2 (14),  
  Responsavel_projecto NUMBER, 
        FOREIGN KEY (Responsavel_projecto)
        REFERENCES Empregados (Responsavel_projecto),
  Orcamento_projecto NUMBER (10,2),
  Tempo_projecto NUMBER (3)
);
Вот так у меня тоже создается без проблем (но индекс все равно хочет для внешнего ключа)
Кликните здесь для просмотра всего текста
CREATE TABLE projectos
   (id_projecto                    NUMBER(4,0) ,
    descricao_projecto             VARCHAR2(14),
    responsavel_projecto           NUMBER,
    orcamento_projecto             NUMBER(10,2),
    tempo_projecto                 NUMBER(3,0))
;
 
ALTER TABLE projectos
ADD CONSTRAINT id_key PRIMARY KEY (id_projecto)
USING INDEX
;
 
ALTER TABLE projectos
ADD CONSTRAINT fk_responsavel FOREIGN KEY (responsavel_projecto)
REFERENCES empregados (responsavel_projecto)
;


Viltora

Спасибо!