Witam serdecznie,
mam 3 tab. employess, jobs i departments. napisałam procedurę dodającą wiersz do tab employess:
CREATE TABLE employess (
id NUMBER(4) NOT NULL PRIMARY KEY,
first_name VARCHAR2(30),
last_name VARCHAR2(30),
email VARCHAR2(40),
phone NUMBER(12),
jobs_id NUMBER(4),
salary NUMBER(4),
departments_name VARCHAR2(30)
);
ALTER TABLE employess ADD FOREIGN KEY (departments_name) REFERENCES departments(name);
ALTER TABLE employess ADD FOREIGN KEY (jobs_id) REFERENCES jobs(id);
Procedura nie wyświetla żadnych błędów :) Jednak pojawia mi się błąd podczas jej wywołania:
ORA-01422: exact fetch returns more than requested number of rows.
Domyślam się, że jest to błąd wywołany kluczem obcym, ponieważ działają mi procedury dodające wiersz do tab bez FOREIGN KEY.
Moja procedura przedstawia się następująco:
CREATE OR REPLACE PROCEDURE dodajWiersz (v_id employess.id%TYPE, v_first_name employess.first_name%TYPE,
v_last_name employess.last_name%TYPE, v_email employess.email%TYPE,
v_phone employess.phone%TYPE, v_jobs_id employess.jobs_id%TYPE,
v_salary employess.salary%TYPE,
v_departments_name employess.departments_name%TYPE) IS
j_id jobs.id%TYPE;
d_name departments.name%type;
BEGIN
select id INTO j_id from jobs;
if(j_id != v_jobs_id)
then raise_application_error( -20000, 'Nie istnieje takie stanowisko pracy ');
end if;
select name INTO d_name from departments;
if(d_name != v_departments_name)
then raise_application_error( -20001, 'Nie istnieje taki dział');
end if;
for c in (select d_name from departments)
loop
if(c.d_name = v_departments_name)
then
for w in (select j_id from jobs)
loop
if(w.j_id= v_jobs_id)
then
INSERT INTO employess VALUES(v_id, v_first_name, v_last_name, v_email, v_phone, v_jobs_id, v_salary, v_departments_name );
end if;
end loop;
end if;
end loop;
EXCEPTION
WHEN dup_val_on_index THEN
dbms_output.put_line('Zły ID');
END dodajWiersz;
Proszę uprzejmie o jakąś wskazówkę w rozwiązaniu tego błędu ...?