SQL INSERT INTO дочерняя сущность - PullRequest
0 голосов
/ 13 мая 2018

У меня есть две сущности, родительская таблица EMPLOYEE и дочерняя таблица DOCTOR, следующим образом:

CREATE TABLE EMPLOYEE(
Emp_Id VARCHAR2(3 CHAR) CONSTRAINT employee_emp_id PRIMARY KEY,
Emp_Fname VARCHAR2(20 CHAR) NOT NULL,
Emp_Lname VARCHAR2(20 CHAR) NOT NULL,
Emp_DOB DATE NOT NULL,
Emp_Address VARCHAR2(40 CHAR),
Emp_Phone VARCHAR2(10 CHAR) NOT NULL,
Emp_Email VARCHAR2(40 CHAR) NOT NULL,
Emp_Type VARCHAR2(1 CHAR) check (Emp_Type in ('D', 'N', 'R')));

CREATE TABLE DOCTOR(
Doc_Id VARCHAR2(3 CHAR) CONSTRAINT doctor_doc_id PRIMARY KEY,
Emp_Id VARCHAR2(3 CHAR) REFERENCES EMPLOYEE(emp_id),
Doc_Spec VARCHAR2(10 CHAR) NOT NULL, 
Doc_Med_Lic VARCHAR2(10 CHAR) NOT NULL, 
Doc_Fee NUMBER(10,2) NOT NULL, 
Doc_Avail VARCHAR2(3 CHAR) check(Doc_Avail in ('Yes'/'No')));

Как мне добавить вставки строк в таблицу DOCTOR таким образом, чтобы они также вводились в EMPLOYEEтаблица или, по крайней мере, ссылается на существующую запись в таблице EMPLOYEE?Вставить строки в таблицу EMPLOYEE достаточно просто:

INSERT INTO EMPLOYEE (Emp_Id, Emp_Fname, Emp_Lname, Emp_DOB, Emp_Address, Emp_Phone, Emp_Email, Emp_Type)
VALUES (emp_id_no_seq.NEXTVAL,'John', 'Le Grange', '15-MAY-65','15 Maple Ave.', '0112562314', 'jlg@rockhealth.com', 'D');

Я немного запутался в реляционном INSERT INTO для дочерней сущности.Будем весьма благодарны за любую помощь в прояснении этого вопроса или направление меня в ветку, посвященную этому вопросу.

1 Ответ

0 голосов
/ 14 мая 2018

Поскольку DOCTOR ссылается на EMPLOYEE, вы должны сначала указать строку в таблице сотрудников и вставить строку в текст доктора, используя идентификатор сотрудника. Если вы делаете это в PL / SQL, это достаточно просто с предложением RETURNING INTO, которое возвращает значение, которое фактически было вставлено в таблицу:

DECLARE
    l_id    employee.id%TYPE;
BEGIN
    INSERT INTO employee ( id, ... )
    VALUES ( emp_id_no_seq.NEXTVAL, ... )
    RETURNING id INTO l_id;

    INSERT INTO doctor ( id, emp_id, ... )
    VALUES ( doc_id_so_seq.NEXTVAL, l_emp_id, ... );
END;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...